#1楼主:消息邮箱为什么收不到?
文章发表于:2008-08-01 05:26
我是个菜鸟,学习调试消息邮箱的时候有个问题不知道错在哪里了:
int *s;
int *t;
int err;
while(1){
*s = 1;
OSMboxPost(press_box,s);
OSTimeDlyHMSM(0,0,0,1);
*t = 3;
t = OSMboxPend(press_box,0,&err);
if(*t == 1) LED_On(1);
else LED_On(3);
OSTimeDlyHMSM(0,0,1,0);
LED_Off(0);
OSTimeDlyHMSM(0,0,1,0);
}
我的原意是,如果收到消息邮箱第1个LED闪,收不到则第3个LED闪。现在总是收不到,第3个LED在闪。问题出在哪了?
哪位帮帮看看~~~
#3
文章发表于:2008-08-11 10:38
谢谢huanan
如果你的意思是说不能在任务里面调用收或者发消息邮箱,那就奇怪了,该哪里调用?书上的都是在任务里面调用啊
如果你的意思是不能在同一个任务里面同时收和发同一个消息邮箱,那好像也不对,我用下面的代码试过,也还是收不到的。如果收到LED3会闪,但实际上是不闪的。
OS_EVENT *myMbox;
main(){
......
myMbox = OSMboxCreate((void*)0);
.......
}
static void Task1(void){
static int j = 0;
while(1){
j = 7;
OSMboxPost(myMbox,(void *)&j);
OSTimeDlyHMSM(0,0,2,0);
}
}
static void Task2(void){
static int i = 0;
while(1){
OSTimeDlyHMSM(0,0,0,500);
i = 1;
i = (int *)OSMboxAccept(myMbox);
if(i == 7) LED_Toggle(3);
}
}
为什么啊?谁能帮帮我啊
#5
文章发表于:2008-08-18 14:31
2秒发一次,500毫秒收一次,应该很长了吧。再慢的话,我的项目也要求比这个快啊。
#6
文章发表于:2008-08-20 09:24
建议你去看一本书吧。周航慈的那本有关ucos的,很实用的
#7
文章发表于:2008-08-27 14:47
邮箱收发可以在任务级的函数里使用,但是你在同一个任务里同时使用的话就没意义了,
任务2里为什么程序一开始就延时呢?一延时系统就切换到任务1了
#11
文章发表于:2008-09-14 09:36
问题出在 t = OSMboxPend(press_box,0,&err),OSMboxPend()函数声明原型为:
void OSMutexPend(OS_WEVENT *pevent,INT16U timeout,INT8U *err)
是不会返回数据的,你只需将程序改为:
OSMboxPend(press_box,0,&err);
if(*err == OS_NO_ERR) LED_On(1);
else LED_On(3);
就可以了。