STM32CubeMX中的FreeRTOS的设置之内核参数

摘要

用 STM32CubeMX 建立了一个带有FreeRTOS的项目后,在 Configuration 标签页中,点击右侧窗口中的 FREERTOS 按钮,弹出 FREERTOS Configuration 窗口,内有很多设置参数,本篇重点学习其中 Config parameters 标签下的内核参数。

参考文献
  1. 使用Stm32CubeMX+FreeRTOS的组合
  2. FreeRTOS笔记一:配置之FreeRTOSConfig.h
  3. FreeRTOS系列第6篇—FreeRTOS内核配置说明
软件版本

在 Versions 一栏下有2个参数(我选择的器件是STM32F0):

参数说明
FreeRTOS version9.0.0STM32CubeMX下载的FreeRTOS 版本
CMSIS-RTOS version1.02STM32CubeMX下载的CMSIS-RTOS版本
内核参数
  1. 参数值中的 Enabled 代表 1;Disabled 代表 0。
  2. 设置值将生成在项目文件夹中的Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOSConfig.h 中。
  3. 在 Kernel settings 一栏有以下参数:
参数取值范围参数说明
USE_FREEMPTION0,11–抢占式调度器:优先级高的任务优先执行。
0–协作式调度器:不考虑优先级,所有任务轮流执行。
CPU_CLOCK_HZSystemCoreClockCPU 时钟频率。STM32F0 只能使用主系统时钟频率。
TICK_RATE_HZ1–1000tick 中断的频率,单位为Hz。
直接影响到计时的分辨率,精度越高,占用CPU时间越多。
MAX_PRIORITIES4–255能够分配给任务的最大优先级。STM32F0 只能 7
MINIMAL_STACK_SIZE分配给空闲任务的最小栈空间,单位为字,对于 STM32 而言一个字为 32bit。
应该考虑线程的数量、总堆大小和系统栈大小。栈的大小不能超过总堆的空间。
当动态分配时,最大值= configTOTAL_HEAP_SIZE/4;当静态分配时,最大值= MCU ram size/4。
MAX_TASK_NAME_LEN12–255任务名的最大(ASCII)字符数,包括字符串结束符NULL(’\0’)。
USE_16_BIT_TICKS0,1tick 计数值保存在一个 portTickType 型的变量中。STM32 只能 0
1–定义 portTickType 为无符号 16bit; 0–定义 portTickType 为无符号 32bit。
IDLE_SHOULD_YIELD0,1当任务具有空闲优先级且内核系统使用了抢占式调度器,则
0–阻止空闲任务为其它具有空闲优先级的任务让出CPU,只有当空闲任务离开运行状态才能被抢占。
1–如果有另外一个空闲优先级的任务在准备状态,则空闲任务立刻让出CPU,让该任务运行。
USE_MUTEXES0,11–使用互斥量;0–忽略互斥量。
USE_RECURSIVE_MUTEXES0,1当USE_MUTEXES=1才有意义。
1–使用递归互斥量;0–忽略递归互斥量。
USE_COUNTING_SEMAPHORES0,11–使用计数信号量;0–忽略计数信号量。
QUEUE_REGISTRY_SIZE0–255队列记录有2个用途,都与操作系统内核的调试器有关:
1、它允许文本名称与队列关联,便于在调试GUI中识别队列。
2、它包含调试器所需的信息来定位每个已注册的队列和信号量。
如果想使用内核调试器查看队列和信号量信息,必须先将这些队列和信号量进行注册。参见vQueueAddToRegistry()和vQueueUnregisterQueue()。
USE_APPLICATION_TASK_TAG0,11–vTaskSetApplicationTaskTag 函数有效。
仅用于高级用户。
可以为每个任务分配一个“tag”值。 此值仅用于应用程序,RTOS 内核本身并不以任何方式使用它。
ENABLE_BACKWARD_COMPATIBILITY0,1头文件 FreeRTOS.h 包含一系列 #define 宏定义,这些宏将 FreeRTOS 8.0.0 版本之前使用的数据类型的名称映射到版本 8.0.0 中使用的名称。
这些宏可以确保RTOS内核升级到V8.0.0版本时,之前的应用代码不用做任何修改。
0–会去掉这些宏定义,需要用户确认应用代码没有用到8.0.0版本之前的(原本需要映射的)名字。
USE_PORT_OPTIMISED_TASK_SELECTION0,1对于Cortex-M0 而言,只能是0
USE_TICKLESS_IDLE0,11–空闲任务抑制tick,处理器尽可能长时间停留在低功耗模式。
1-- 在 FreeRTOSConfig.h 中增加两个宏:configPRE_SLEEP_PROCESSING 和 configPOST_SLEEP_PROCESSING
1-- 在 freertos.c 中增加两个空函数,需要用户完成:PreSleepProcessing 和 PostSleepProcessing
USE_TASK_NOTIFICATIONS0,1每个RTOS任务都有32位的通知值。RTOS任务通知是直接发送到任务的事件,它可以解除对接收任务的阻塞,并且可以更新接收任务的通知值。
1–使能任务通知(缺省); 0–不使用任务通知,这样每个任务可以节省8字节。
  • 8
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值