打印

关于UCOS不调度高优先级任务的问题

[复制链接]
5795|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jgphu|  楼主 | 2012-11-8 09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ucos, ADC, AD, dc, se
大家好:

我在STM32移植了一个UCOSII,现在遇到了一个问题。

任务1 : 优先级为 9 :ADC按键处理功能;

  while(1)
  {
    LED = 0;
    OSSemPend(Sem_Adc1Eoc, 0, &Sem_Adc1Eoc_err);
    ADC_KeyHandle(ADC1_ConValue);
  }


任务2:  优先级为 10:ADC采样

  while(1)
  {
    LED = 1;
    ADC1_Conversion();
    OSTimeDlyHMSM(0, 0, 0, 10);
  }

任务3:优先级为8: 串口2中断接收处理

  while(1)
  {
    USART2_HandleDataPacket();
    OSSemPend(Sem_Uart1Rx, 0, &Sem_Uart1Rx_err);
  }


现在的问题是:当我进行串口通信时(与电脑通信),差不多正常运行半个小时后,就出问题了,与电脑通信不成功,ADC按键无作用。用JLINK调试发现,程序能进串口中断代码。但总是在执行空闲任务。 任务3的状态是就绪态,但不会去执行任务3,包括任务2。
沙发
jgphu|  楼主 | 2012-11-8 14:27 | 只看该作者
是不是串口通信比较快的原因,我将电脑端串口工具定时发送时间设为20MS以内,比较空易出现这个问题;我将定时发送时间设为500MS或100MS就暂时还没有出现。

使用特权

评论回复
板凳
airwill| | 2012-11-8 21:56 | 只看该作者
SEM 信号量导致优先级反转了.
OSSemPend() 后没有调用  OSSemPost() 释放占用的信号量

使用特权

评论回复
地板
jgphu|  楼主 | 2012-11-9 14:39 | 只看该作者
我是用的UCOSII 2.86版本。 网上说有这个问题! 是真的吗?

使用特权

评论回复
5
airwill| | 2012-11-9 16:10 | 只看该作者
这是你程序的问题呀

使用特权

评论回复
6
fresh_meet| | 2015-5-3 19:49 | 只看该作者
你好:
您最后有没有解决:
我现在遇到同样问题,他只在IDLE任务下运行

使用特权

评论回复
7
小浣熊| | 2015-5-3 22:08 | 只看该作者
很感兴趣,先记号。

使用特权

评论回复
8
HORSE7812| | 2015-5-4 09:07 | 只看该作者
mark

使用特权

评论回复
9
神的兄弟| | 2015-5-4 09:57 | 只看该作者
三楼正解,你只申请了信号量,并没有释放信号量,信号量在同一时间只能被一个任调用,使用OSSemPend()申请后需要使用OSSemPost()释放信号量才能让别的任务调用,不然信号量始终在被占用的状态。

使用特权

评论回复
10
fuyinpeng| | 2015-9-10 14:40 | 只看该作者
如果怀疑2.86的问题,换个别的版本或者修改下就OK了

使用特权

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

本版积分规则

7

主题

642

帖子

2

粉丝