[STM32L1] 任务优先级问题

[复制链接]
817|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采集频率不高。
houcs 发表于 2021-6-9 20:13 | 显示全部楼层
INCLUDE_vTaskSuspend  要配置成1
 楼主| supernan 发表于 2021-6-9 20:15 | 显示全部楼层

#define INCLUDE_vTaskSuspend                1
原来就宏定义成1了,不是这个原因
wyjie 发表于 2021-6-9 20:17 | 显示全部楼层
既然设置一样优先级可以用,那就别设置不同的了。
 楼主| supernan 发表于 2021-6-9 20:19 | 显示全部楼层
你说的也对,但是这样就失去了使用OS的优势了,本来是要处理一些实时的任务,看来只能放在中断里了
午夜粪车 发表于 2021-6-9 20:29 | 显示全部楼层
这个优先级不是自己设定的吗
 楼主| supernan 发表于 2021-6-9 20:32 | 显示全部楼层
是自己设定的。
 楼主| supernan 发表于 2021-6-9 20:35 | 显示全部楼层
多谢大家讨论这么多哈,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

730

主题

10412

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部