搜索
bottom↓
回复: 5

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

[复制链接]

出0入0汤圆

发表于 2015-1-30 17:00:43 | 显示全部楼层 |阅读模式
使用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)屏蔽,但是不知为什么任务仍能请求到信号继续向下执行,有没有碰到过这种现象的呢,在线等

出0入0汤圆

发表于 2015-2-9 14:44:51 | 显示全部楼层
现在我同样遇到这样类似的问题,求解

出0入0汤圆

发表于 2015-2-9 14:45:44 | 显示全部楼层
我设置初始值是5,理论上说要pos5次,等待信号量的任务才能运行,可是发现相反,是等待信号量的任务先运行5次

出0入0汤圆

 楼主| 发表于 2015-2-9 20:00:58 | 显示全部楼层
zwc135 发表于 2015-2-9 14:44
现在我同样遇到这样类似的问题,求解

你是不是信号量创建在OSInit()上面了,那样是不行的

出0入0汤圆

发表于 2015-2-10 09:38:16 | 显示全部楼层
一寒 发表于 2015-2-9 20:00
你是不是信号量创建在OSInit()上面了,那样是不行的

不是的,我是建立在系统初始化的下方。之前是建立在系统初始化上方,仿真发现返回的是一个NULL指针,然后修改了

出0入0汤圆

发表于 2015-3-11 01:34:14 | 显示全部楼层
zwc135 发表于 2015-2-9 14:45
我设置初始值是5,理论上说要pos5次,等待信号量的任务才能运行,可是发现相反,是等待信号量的任务先运行5 ...

初始值是5,肯定是等待信号量的任务先运行。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 20:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表