张根硕近期照片:慎用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;