嵌入式学习小组
直播中

王婷

7年用户 992经验值
私信 关注

无法获得信号量

我用ucos创建了两个任务,创建了一个信号量协调他们之间的关系,我的想法是任务can_send_thread()一直阻塞等待信号量,申请到信号量是在执行下面的程序,当调用函数canSend()时释放信号量。我现的问题是调用了canSend释放信号量,但是任务can_send_thread还是无法获得信号量,我已经把  can_send_thread的优先级调到最高。那位高手帮我分析一下
void start_task(void *pdata)
{
    OS_CPU_SR cpu_sr=0;
pdata = pdata;   
tran_sem = OSSemCreate(0);         
OSStatinit();  
OS_ENTER_CRITICAL();
OSTaskCreate(can_send_thread,(void *)0,(OS_STK*)&SEND_TASK_STK[SEND_STK_SIZE-1],SEND_TASK_PRIO);   
OSTaskCreate(can_send,(void *)0,(OS_STK*)&CAN_SEND_TASK_STK[CAN_SEND_STK_SIZE-1],CAN_SEND_TASK_PRIO);           
OSTaskSuspend(START_TASK_PRIO);
OS_EXIT_CRITICAL();
}
void can_send(void)
{
     while(1)
    {
        canSend(CAN1,M);
        delay_ms(100);
     }
}
void can_recv_thread(void* parameter)
{
  while(1)
  {
       OSSemPend(recv_sem,0,&err);
       。。。。。。。。。。。。。
      。。。。。。。。。。。。。
       。。。。。。。。。。。。
      。。。。。。。。。。。。。
  }
}
unsigned char canSend(CAN_PORT notused, Message *m)
{
        。。。。。。。。。
       。。。。。。。。。
        。。。。。。。。。
       。。。。。。。。。
        OSSemPost(tran_sem);

}

回帖(3)

张厉界

2019-7-3 15:30:27
自己顶
举报

胡书琴

2019-7-3 15:39:01
你调用函数 OSSemPend()请求的是信号量recv_sem,调用函数 OSSemPost()发送的是信号量tran_sem!的两个函数操作的都不是一个信号量,而且你的start_task()里面只创建了信号量tran_sem,能正常才怪了!
举报

王东

2019-7-3 15:46:30
这个贴错了,那个请求的信号量也是tran_sem
举报

更多回帖

发帖
×
20
完善资料,
赚取积分