返回信息流初学tornado/vxworks,下面是我的一个测试程序.
问题是在shell中输入progStart任务运行起来后,再输入progStop时没有返回值,VxSim上会一直有输出,也就是任务根本就没有被删除。
请问这是怎么回事呀?代码哪里有问题?谢谢啦!
#include "Vxworks.h"
#include "taskLib.h"
#include "semLib.h"
#include "stdio.h"
#define STACK_SIZE 2000
/*任务id*/
int tidA;
int tidB;
/*信号量id*/
SEM_ID semBinary;
int progStart(void);
int A(void);
int B(void);
int progStop(void);
int progStart(void)
{
if((semBinary=semBCreate(SEM_Q_PRIORITY,SEM_EMPTY))==NULL)
{
printf("Binary semaphore create failed\n");
return 1;
}
if(tidA=taskSpawn("tA",240,0,STACK_SIZE,(FUNCPTR)A,0,0,0,0,0,0,0,0,0,0)==ERROR)
{
printf("TaskA create failed\n");
return 1;
}
if(tidB=taskSpawn("tB",200,0,STACK_SIZE,(FUNCPTR)B,0,0,0,0,0,0,0,0,0,0)==ERROR)
{
printf("TaskB create failed\n");
return 1;
}
return 0;
}
int A(void)
{
semFlush(semBinary);
while(1)
{
taskDelay(sysClkRateGet()*2);
printf("ss");
}
return 0;
}
int B(void)
{
semTake(semBinary,WAIT_FOREVER);
while(1)
{
taskDelay(sysClkRateGet()*2);
printf("aa");
}
return 0;
}
int progStop(void)
{
if(taskDelete(tidB)==ERROR)
return 1;
if(taskDelete(tidA)==ERROR)
return 1;
if(semDelete(semBinary)==ERROR)
return 1;
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #3152同步于 2008/12/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
求教一个有关任务删除的问题
ninadw
2008/12/11镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
我试了没问题啊
还有楼主把程序贴全啊
没有头文件,别人更嫌麻烦
#include "Vxworks.h"
#include "taskLib.h"
#include "semLib.h"
#include "stdio.h"
昨天回寝室时看的,没细看
今天又看了一下,确实有问题
if(tidA=taskSpawn("tA",240,0,STACK_SIZE,(FUNCPTR)A,0,0,0,0,0,0,0,0,0,0)==ERROR)
这句话==的优先级大于=的
也就是你先做的==判断,肯定不相等结果为0,然后赋给了tidA,if判断是根据tidA的值,由于tidA是0,所以把报错那段也跳过了
而且tidA和tidB都是0,而不是保存的id名,所以你后来调用stop就出问题了
ps。你的semBCreate居然是对的。。- -!这个迷惑性太强了,注意编程习惯。。
同样的问题我也遇到过,正如5楼说的。另外感觉的你的semFlush(semBinary);用的不太合适,之所以现在你的任务B也能运行,是因为任务B的优先级比任务A高,任务B抢占任务A先运行了,任务B先semTake()后任务A才semFlush()。你可以看看windview图。
【 在 eelb 的大作中提到: 】
: 昨天回寝室时看的,没细看
: 今天又看了一下,确实有问题
: if(tidA=taskSpawn("tA",240,0,STACK_SIZE,(FUNCPTR)A,0,0,0,0,0,0,0,0,0,0)==ERROR)
: ...................
很好啊!真细致
刚才还特意查了一下操作符优先级,才发现赋值的优先级竟然只比逗号高而已
PS:古人云,多加几个括号,什么事情都没有了……或者分两行写也可以嘛