张根硕近期照片:慎用OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);
来源:百度文库 编辑:中财网 时间:2024/05/07 10:28:15
毛主席夸我丑的博客
全部是关于嵌入式学习的一些经验的积累
博文:http://chijunya.blog.163.com/blog/static/7681173220084178492734/
慎用OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);
2008-05-17 20:49:27| 分类: 嵌入式面试 | 标签: |字号大中小 订阅
这是我做实验的教训!
OSTaskDel(OS_PRIO_SELF);这个函数,把该任务使用到的变量都给删除了!
比如,在Wake_Modem();中使用到了
char txmsg;
.................
txmsg ='7';
OSQPost(QSem, (void *)&txmsg);
而在另一个任务中等待该消息,
char *rxmsg = 0;
....................
rxmsg=(char *)OSQPend(QSem, 0, &err);
switch(*rxmsg)
{
case '7':
OS_ENTER_CRITICAL();
Uart_Select(0);
Uart_Init(0,115200);
Uart_Printf("OK!\n");
OS_EXIT_CRITICAL();
break;
}
程序则无法输出OK,因为OSTaskDel(OS_PRIO_SELF);这个函数的存在,导致txmsg也被删除了!
OSTaskSuspend(OS_PRIO_SELF); 与之同效!
解决办法:static char txmsg;