疑惑:UCOS中的信号量使用?????

[复制链接]
4554|8
 楼主| t200017 发表于 2010-3-1 19:20 | 显示全部楼层 |阅读模式
本帖最后由 t200017 于 2010-3-1 19:24 编辑

建立了两个任务TASK1,TASK2,TASK1的优先级高于TASK2,同时建立了一信号量
现在TASK1,TASK2申请信号量

static  void  TASK1(void *p_arg)
{
     while (DEF_TRUE) {
    OSSemPend(InfoSem,0,&err);

    检测按键KEY1,刷新串口
   OSSemPost(InfoSem);
  OSTimeDlyHMSM(0, 0, 0, 10);
  }
   
}

static  void  TASK2(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个都等,你死等啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部