打印
[STM32L1]

任务优先级问题

[复制链接]
442|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
supernan|  楼主 | 2021-6-9 20:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在使用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闪灯任务。而结果却不是这样?

使用特权

评论回复
沙发
renyaq| | 2021-6-9 20:06 | 只看该作者
说明ADC的采样速度远高于LED,你设置同样的优先级,也不会影响ADC的正常秩序。

使用特权

评论回复
板凳
xxrs| | 2021-6-9 20:08 | 只看该作者
这样总是从ADC里出不来,不给其他机会了。我猜是这样的。

使用特权

评论回复
地板
dengdc| | 2021-6-9 20:10 | 只看该作者
并不是AD频率过快,因为AD没采集完成一次(没有开启continus),都会在LED的那个任务再使能AD采集.所以ADC采集频率不高。

使用特权

评论回复
5
houcs| | 2021-6-9 20:13 | 只看该作者
INCLUDE_vTaskSuspend  要配置成1

使用特权

评论回复
6
supernan|  楼主 | 2021-6-9 20:15 | 只看该作者

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

使用特权

评论回复
7
wyjie| | 2021-6-9 20:17 | 只看该作者
既然设置一样优先级可以用,那就别设置不同的了。

使用特权

评论回复
8
supernan|  楼主 | 2021-6-9 20:19 | 只看该作者
你说的也对,但是这样就失去了使用OS的优势了,本来是要处理一些实时的任务,看来只能放在中断里了

使用特权

评论回复
9
午夜粪车| | 2021-6-9 20:29 | 只看该作者
这个优先级不是自己设定的吗

使用特权

评论回复
10
supernan|  楼主 | 2021-6-9 20:32 | 只看该作者
是自己设定的。

使用特权

评论回复
11
supernan|  楼主 | 2021-6-9 20:35 | 只看该作者
多谢大家讨论这么多哈,呵呵

使用特权

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

本版积分规则

730

主题

10412

帖子

6

粉丝