使用ucos信号量,未使用Post函数释放信号量,任务却能请求到

2019-07-21 00:47发布

使用ucosII做一个任务的同步,为了找出问题所在把其他任务全部屏蔽了,只剩下一个任务

void mpu6050_task(void *pdata)
{
  u8 err;
        pdata = pdata ;
        while(1)
        {

     OSSemPend(sem_mpu6050,0,&err);
        
           mpu6050_times++;
           disp_num(200,130,mpu6050_times);//液晶显示该数字
                 delay_ms(100);
    
  }
}

创建任务前已经初始化信号量 sem_mpu6050

sem_mpu6050 = OSSemCreate(0);

释放该信号量的函数位于串口3中断服务子程序中

void USART3_IRQHandler(void)                   
{
   OSIntEnter();
   if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //接收中断有效
     {
                         OSSemPost(sem_mpu6050);
                       Temp0[counter] = USART_ReceiveData(USART3);   //
     
        
     }
         OSIntExit();

}

由于是第一次用到ucos,为了测试信号量到底有没有起作用,我将中断服务程序中的释放函数OSSemPost(sem_mpu6050)屏蔽,但是不知为什么任务仍能请求到信号继续向下执行,有没有碰到过这种现象的呢,在线等
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
pizza超
1楼-- · 2019-07-21 04:06
回复【4楼】styleno1:
---------------------------------
找到原因了,创建信号量的函数一定要写在OSInit()和OSStart()函数之间,之前写在了INIT前面,所以信号量没有创建成功,指针没有指向信号量,所以每次都能请求到信号量
taizonglai
2楼-- · 2019-07-21 04:27
 精彩回答 2  元偷偷看……
pizza超
3楼-- · 2019-07-21 06:53
回复【2楼】zuozhongkai:
---------------------------------
液晶上有显示的 任务确实在运行
styleno1
4楼-- · 2019-07-21 11:38
查看err信息
战舰水手
5楼-- · 2019-07-21 14:18
 精彩回答 2  元偷偷看……

一周热门 更多>