打印
[STM32L1]

关于STM32cube中FreeRTOS的任务优先级问题

[复制链接]
2044|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
caoenq|  楼主 | 2018-1-25 14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位好,最近在使用STM32Cube这款软件自带的FreeRTOS做一个简单的工程,工程里创建了两个任务(分别为LED闪烁任务和ADC数据处理任务)和一个二值信号量.
程序的基本流程如下:在ADC的中断ISR中,Give这个二值信号量。在ADC数据处理任务中take这个信号量,take成功后做ADC数据处理。
我分两种情况试了这个程序,第一种:把两个任务(LED任务和ADC数据处理任务)的优先级设成相同,程序运行没有任何问题。
第二种:我把ADC数据处理任务的优先级设置成比LED任务高一级(我本意是想在ADC完成采样后,立即处理ADC数据,因此把ADC数据处理任务的优先级提高了)。结果程序一直卡死在ADC任务里的take 二值信号量语句处。程序不再执行LED任务了。可是take 二值信号量的语句是一个无超时的等待语句,若没有take到二值信号量,应该使ADC数据处理任务进入阻塞态,进而去执行LED闪灯任务。而结果却不是这样?哪位大神能给答疑解惑?

沙发
gaoyang9992006| | 2018-1-25 18:28 | 只看该作者
说明ADC的采样速度远高于LED,你设置同样的优先级,也不会影响ADC的正常秩序。

使用特权

评论回复
板凳
gaoyang9992006| | 2018-1-25 18:29 | 只看该作者
这样总是从ADC里出不来,不给其他机会了。我猜是这样的。

使用特权

评论回复
地板
caoenq|  楼主 | 2018-1-26 08:31 | 只看该作者
gaoyang9992006 发表于 2018-1-25 18:29
这样总是从ADC里出不来,不给其他机会了。我猜是这样的。

谢谢你的回复。
并不是AD频率过快,因为AD没采集完成一次(没有开启continus),都会在LED的那个任务再使能AD采集.所以ADC采集频率不高。

使用特权

评论回复
5
Ketose| | 2018-1-26 11:35 | 只看该作者
INCLUDE_vTaskSuspend  要配置成1

使用特权

评论回复
6
caoenq|  楼主 | 2018-1-26 12:57 | 只看该作者
Ketose 发表于 2018-1-26 11:35
INCLUDE_vTaskSuspend  要配置成1

#define INCLUDE_vTaskSuspend                1
原来就宏定义成1了,不是这个原因

使用特权

评论回复
7
heisexingqisi| | 2018-1-26 14:39 | 只看该作者
既然设置一样优先级可以用,那就别设置不同的了。

使用特权

评论回复
8
caoenq|  楼主 | 2018-1-29 08:34 | 只看该作者
heisexingqisi 发表于 2018-1-26 14:39
既然设置一样优先级可以用,那就别设置不同的了。

你说的也对,但是这样就失去了使用OS的优势了,本来是要处理一些实时的任务,看来只能放在中断里了

使用特权

评论回复
9
Snow7| | 2018-1-29 18:33 | 只看该作者
这个优先级不是自己设定的吗

使用特权

评论回复
10
caoenq|  楼主 | 2018-1-31 08:38 | 只看该作者
Snow7 发表于 2018-1-29 18:33
这个优先级不是自己设定的吗

是自己设定的。

使用特权

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

本版积分规则

51

主题

1360

帖子

11

粉丝