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 version 9.0.0 STM32CubeMX下载的FreeRTOS 版本
CMSIS-RTOS version 1.02 STM32CubeMX下载的CMSIS-RTOS版本

内核参数

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

你可能感兴趣的:(ARM)