打印

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

[复制链接]
3112|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 | 只看该作者
信号量死锁

使用特权

评论回复
5
lyc6904| | 2010-4-20 22:45 | 只看该作者
可能是信号量初始值设为0了,应该设为1。推荐用互斥信号量,实现对串口的互斥访问

使用特权

评论回复
6
maomao2126| | 2010-4-22 12:46 | 只看该作者
信号量锁死了,两个任务都在等信号量,从而都被挂起了

使用特权

评论回复
7
无情剑客| | 2010-4-26 15:01 | 只看该作者
长见识了

使用特权

评论回复
8
caijie| | 2010-4-26 16:37 | 只看该作者
就是 初始化的问题 程序应用这里没有错误, 可以这么使用 你应该给出你的创建信号量的代码

使用特权

评论回复
9
biansf2001| | 2010-4-29 22:06 | 只看该作者
2个都等,你死等啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

7

帖子

0

粉丝