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

[复制链接]
2248|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采集频率不高。
Ketose 发表于 2018-1-26 11:35 | 显示全部楼层
INCLUDE_vTaskSuspend  要配置成1
 楼主| caoenq 发表于 2018-1-26 12:57 | 显示全部楼层
Ketose 发表于 2018-1-26 11:35
INCLUDE_vTaskSuspend  要配置成1

#define INCLUDE_vTaskSuspend                1
原来就宏定义成1了,不是这个原因
heisexingqisi 发表于 2018-1-26 14:39 | 显示全部楼层
既然设置一样优先级可以用,那就别设置不同的了。
 楼主| caoenq 发表于 2018-1-29 08:34 | 显示全部楼层
heisexingqisi 发表于 2018-1-26 14:39
既然设置一样优先级可以用,那就别设置不同的了。

你说的也对,但是这样就失去了使用OS的优势了,本来是要处理一些实时的任务,看来只能放在中断里了
Snow7 发表于 2018-1-29 18:33 | 显示全部楼层
这个优先级不是自己设定的吗
 楼主| caoenq 发表于 2018-1-31 08:38 | 显示全部楼层
Snow7 发表于 2018-1-29 18:33
这个优先级不是自己设定的吗

是自己设定的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

1366

帖子

11

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