求助,各位大哥,小弟在下面的程序里申请了两个任务,其中一个还是开始任务,在另外一个任务中使用函数OSMboxPost()给消息邮箱发送数(已用红色标出),按道理来说,应该返回0的,但是我调试的时候发现他返回的是1,忘各位大哥指点迷津,小弟感激不尽,同时我发现在原子哥的关于消息邮箱的例程中,只要屏蔽串口中断函数,也会发生这样的情况, 求原子哥帮忙看看,程序已贴出,谢谢大家了!
#define start_prio 0
#define start_stk_size 1024
OS_STK start_task_stk[start_stk_size];
void start_task(void *pdata);
#define scankey_prio 7
#define scankey_stk_size 1024
OS_STK scankey_task_stk[scankey_stk_size];
void scankey_task(void *pdata);
OS_EVENT* msgkey; //邮箱指针
int main()
{
SystemInit();
Sys
tick_Config(360000);
OSInit();
msgkey=OSMboxCreate((void*)0); //创建消息邮箱
OSTaskCreate(start_task, (void *)0, (OS_STK *)&start_task_stk[start_stk_size-1], start_prio);
OSStart();
}
void scankey_task(void *pdata)
{
u8 key;
u8 err=2;
char str[30]={0};
while(1)
{
key=2;
err = OSMboxPost(msgkey,&key);//给消息邮箱发送数据,此处的返回值err为什么等于1,不是应该等于0 的吗?
if(err==0)
{
OSTimeDlyHMSM(0, 0, 0, 5);
}
err=3;
OSMboxPend(msgkey, 10, &err);
if(err==0)
{
OSTimeDlyHMSM(0, 0, 0, 5);
}
err=4;
OSTimeDlyHMSM(0, 0, 0, 5);
}
}
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata = pdata;
OSStatInit();
OS_ENTER_CRITICAL();
OSTaskCreate(scankey_task, (void *)0, (OS_STK*)&scankey_task_stk[scankey_stk_size], scankey_prio);
OSTaskSuspend(start_prio);
OS_EXIT_CRITICAL();
OSTimeDlyHMSM(0, 0, 0, 5);
}
0