摘要
用 STM32CubeMX 建立了一个带有FreeRTOS的项目后,在 Configuration 标签页中,点击右侧窗口中的 FREERTOS 按钮,弹出 FREERTOS Configuration 窗口,内有很多设置参数,本篇重点学习其中 Config parameters 标签下的内核参数。
参考文献
软件版本
在 Versions 一栏下有2个参数(我选择的器件是STM32F0):
参数 | 值 | 说明 |
---|---|---|
FreeRTOS version | 9.0.0 | STM32CubeMX下载的FreeRTOS 版本 |
CMSIS-RTOS version | 1.02 | STM32CubeMX下载的CMSIS-RTOS版本 |
内核参数
- 参数值中的 Enabled 代表 1;Disabled 代表 0。
- 设置值将生成在项目文件夹中的Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOSConfig.h 中。
- 在 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字节。 |