疑惑:UCOS中的信号量使用?????
本帖最后由 t200017 于 2010-3-1 19:24 编辑建立了两个任务TASK1,TASK2,TASK1的优先级高于TASK2,同时建立了一信号量
现在TASK1,TASK2申请信号量
staticvoidTASK1(void *p_arg)
{
while (DEF_TRUE) {
OSSemPend(InfoSem,0,&err);
检测按键KEY1,刷新串口
OSSemPost(InfoSem);
OSTimeDlyHMSM(0, 0, 0, 10);
}
}
staticvoidTASK2(void *p_arg)
{
while (DEF_TRUE) {
OSSemPend(InfoSem,0,&err);
检测按键KEY2,刷新串口
OSSemPost(InfoSem);
OSTimeDlyHMSM(0, 0, 0, 10);
}
}
现在的问题是:在TASK2中加入OSSemPend(InfoSem,0,&err)后,按键1和2都无法对检测做出反应,但去掉TASK2的OSSemPend(InfoSem,0,&err)后,均按键1按键2均能正常检测,请问是什么原因????
另外,什么情况下才需要使用信号量,在上面的程序中去掉TASK1和TASK2的等待信号量对程序都没有影响。。。。UCOS中依靠优先级不是也能保证程序的运行吗??
上述程序需不需要使用信号量? TASK1,TASK2都停在了等待信号量的地方,没有其他发送信号量的任务,都不会被唤醒的。TASK1,TASK2如果没有牵连的,用两个信号量,各自使用。如果是互斥的,用互斥信号量。 牛X,长知识了 信号量死锁 可能是信号量初始值设为0了,应该设为1。推荐用互斥信号量,实现对串口的互斥访问 信号量锁死了,两个任务都在等信号量,从而都被挂起了 长见识了 就是 初始化的问题 程序应用这里没有错误, 可以这么使用 你应该给出你的创建信号量的代码 2个都等,你死等啊
页:
[1]