中小企业融资.ppt
- 格式:ppt
- 大小:341.00 KB
- 文档页数:35
OSTaskDelReq()本文就该函数做了细致,深入的解答。
并借用网友的例子和邵贝贝书上的例子,讲解了一般的问题和常用的用法。
带了自己的感想和思考。
希望对自己有帮助。
做此记录。
在ucos中这个函数很常用,个人觉着,使用OSTaskDel,是有风险的,因为他会删除那些变量。
比如下面的一篇文章的部分内容。
慎用OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);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;下面是OSTaskDelReq的用法。
一、发出删除任务请求的任务和打算被时删除的任务都必须调用OSTaskDelReq() 函数举个例子:请求删除其他任务的任务,设为Task-1。
要被删除的任务,设为Task-2。