t200017 发表于 2010-3-1 19:20

疑惑: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中依靠优先级不是也能保证程序的运行吗??
上述程序需不需要使用信号量?

elife 发表于 2010-3-2 15:54

TASK1,TASK2都停在了等待信号量的地方,没有其他发送信号量的任务,都不会被唤醒的。TASK1,TASK2如果没有牵连的,用两个信号量,各自使用。如果是互斥的,用互斥信号量。

tigerchen 发表于 2010-4-18 20:53

牛X,长知识了

yuouzy 发表于 2010-4-19 12:26

信号量死锁

lyc6904 发表于 2010-4-20 22:45

可能是信号量初始值设为0了,应该设为1。推荐用互斥信号量,实现对串口的互斥访问

maomao2126 发表于 2010-4-22 12:46

信号量锁死了,两个任务都在等信号量,从而都被挂起了

无情剑客 发表于 2010-4-26 15:01

长见识了

caijie 发表于 2010-4-26 16:37

就是 初始化的问题 程序应用这里没有错误, 可以这么使用 你应该给出你的创建信号量的代码

biansf2001 发表于 2010-4-29 22:06

2个都等,你死等啊
页: [1]
查看完整版本: 疑惑:UCOS中的信号量使用?????