[FreeRTOS]CubeMX中的配置

📅 2026/8/10 9:36:56
[FreeRTOS]CubeMX中的配置
首先打开Middleware标签选中其中的FREERTOS选项进入FREERTOS的配置页面。在Mode页面下选择Interface 的版本这里选择CMSIS_V2。CMSIS是由Keil 提供的 一套特殊的函数接口他对freeRTOS的功能函数进行了封装使其变得更加易用在使用 freeRTOS 时不需要再去直接调用freeRTOS的函数只需要调用CMSIS为我们提供的 函数即可目前CMSIS有V1和V2两个版本。FreeRTOS中CMSIS V1与V2的主要区别CMSISV1主要面向早期的Cortex-M3和Cortex-M4内核芯片提供基本的寄存器定义、系统初始化函数如SystemInit()和中断控制接口。CMSISV2随着Cortex-M55、M85等新型内核的推出CMSIS V2引入了更丰富的设备抽象层如core_sc300.h、core_sc55.h等增强了对新一代处理器的支持。项目CMSIS-RTOS V1CMSIS_V1CMSIS-RTOS V2CMSIS_V2头文件#include cmsis_os.h#include cmsis_os2.h标准老旧一代标准ARM 逐步停止维护新一代标准CMSIS-RTOS2持续更新对象句柄类型osThreadId、osSemaphoreId指针类型osThreadId_t、osSemaphoreId_t独立不透明类型类型安全更强内核启动流程自动初始化内核main 可直接创建任务隐式启动调度器强制显式两步osKernelInitialize() → osKernelStart()创建任务风格宏定义静态声明 osThreadDef()支持动态创建 静态创建使用属性结构体 osThreadAttr_t后面见到的所有os开头的函数都是CMSISOS提供的配置一、Kernel settings 内核基础设置最重要参数当前配置含义使用建议USE_PREEMPTIONEnabled抢占式调度Enabled高优先级任务就绪立刻抢占低优先级Disabled协作式任务主动让出 CPU工程几乎全部保持 Enabled只有极简低功耗项目才关CPU_CLOCK_HZSystemCoreClock内核时钟自动绑定系统时钟永远默认不要手动修改TICK_RATE_HZ1000系统滴答时钟频率1000 1ms 一个 tick系统时间片、延时基准最常用 1000 (1ms)低频低功耗可改为 10010msMAX_PRIORITIES56任务最大优先级数量优先级范围0 ~ MAX_PRIORITIES-1注意CMSIS-RTOS 优先级映射有转换常规项目 8/16 足够你现在 56 富余不要设置过大浪费 RAMUSE_MINI_LIST_ITEM1使用精简链表结构减少内存占用默认不动MINIMAL_STACK_SIZE128 Words空闲任务栈大小字1word4 字节空闲任务是系统必备任务一般保持 128空闲任务里做复杂逻辑需要加大MAX_TASK_NAME_LEN16任务名称最大字符长度默认 16 够用极少修改USE_16_BIT_TICKSDisabledtick 计数使用 16 位 / 32 位Disable32 位延时上限更长默认关闭不要开启16 位 tick 最大延时很短IDLE_SHOULD_YIELDEnabled同等优先级任务空闲任务主动让出 CPU默认即可一般不改USE_MUTEXESEnabled启用互斥锁用到互斥锁就打开现代工程基本常开USE_RECURSIVE_MUTEXESEnabled递归互斥锁同一任务可多次加锁需要嵌套上锁开启不用可以关掉节省少量资源USE_COUNTING_SEMAPHORESEnabled计数信号量生产者消费者场景常用大部分工程开启QUEUE_REGISTRY_SIZE8队列 / 信号量注册表调试器查看内核对象用调试用正式工程可减小默认 8 够用USE_TASK_NOTIFICATIONSEnabled任务通知重点轻量化信号量代替很多队列、信号量效率更高强烈保持开启日常大量使用ENABLE_BACKWARD_COMPATIBILITYEnabled兼容老版本 FreeRTOSAPI默认开启避免旧代码报错二、Memory management settings 内存管理参数当前配置含义使用建议TOTAL_HEAP_SIZE15360 BytesFreeRTOS 堆总大小任务、队列、信号量动态内存全部从这里分配重点配置根据任务数量调整太小会创建任务失败Memory Management schemeheap_4内存分配算法heap_1/2/3/4/5 区别heap4支持合并空闲块推荐日常使用CubeMX 默认 heap4绝大多数工程不用更换heap4 特点动态分配、碎片整理heap5 需要你划分多个内存区域。三、Hook function 钩子函数回调调试 / 拓展功能全部当前 DisabledUSE_IDLE_HOOK空闲任务钩子空闲循环执行USE_TICK_HOOK每个 SysTick 中断回调USE_MALLOC_FAILED_HOOK内存分配失败钩子调试神器USE_DAEMON_TASK_STARTUP_HOOK定时器服务任务启动钩子CHECK_FOR_STACK_OVERFLOW栈溢出检测使用建议 正式产品默认关闭节省开销调试阶段打开栈溢出检测、malloc 失败钩子排查崩溃上线关闭。四、Run time and task stats 运行统计GENERATE_RUN_TIME_STATS任务 CPU 占用率统计使用CLion调试时开启USE_TRACE_FACILITY开启 Trace 调试RTT、SystemView默认关闭性能调试的时候临时开启发布关闭采集统计占用 CPU五、Co-routines 协程USE_CO_ROUTINES Disabled协程是老旧轻量级方案现在基本淘汰不要使用保持关闭六、Software timer definitions 软件定时器高频使用模块参数配置含义建议USE_TIMERSEnabled开启 FreeRTOS 软件定时器项目用到定时器必须开不用则关闭释放资源TIMER_TASK_PRIORITY2定时器服务任务优先级 重要定时器回调执行快慢取决于这个优先级一般设置高于普通业务任务注意不要低于需要定时响应的任务TIMER_QUEUE_LENGTH10定时器命令队列深度默认 10大量启停定时器可加大TIMER_TASK_STACK_DEPTH256 Words定时器任务栈大小如果定时器回调函数复杂必须加大栈溢出常见坑七、Interruptnesting behaviour 中断优先级最容易踩坑参数配置含义建议LIBRARY_LOWEST_INTERRUPT_PRIORITY15FreeRTOS 可以管理的最低中断优先级数字越大优先级越低Cortex-M 分组前提下默认不动LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY5阈值重中之重优先级高于 5数字更小 的中断禁止调用 FreeRTOS API优先级≤5可以调用 xxx_FromISR 中断版函数日常保持默认 5不要随意修改所有外部中断、串口中断优先级配置不要高于这个数值否则会引发 HardFault 死机八、CMSIS-RTOS V2 flags全部 Enabled选择接口为 CMSIS_V2osThreadNew、osMessageQueueNew这类 API这些宏开启对应 CMSIS 接口支持。 只要使用 CubeMX 生成的 CMSIS API保持全部开启不用改动。经常需要修改的核心配置USE_PREEMPTION 抢占调度TICK_RATE_HZ 系统节拍MAX_PRIORITIES 任务最大优先级MINIMAL_STACK_SIZE 空闲任务栈TOTAL_HEAP_SIZE 系统堆大小Memory Management scheme 堆模型 heap4USE_TIMERS 软件定时器开关 TIMER_TASK_PRIORITY、TIMER_TASK_STACK_DEPTHLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 中断访问 FreeRTOS 阈值USE_MUTEXES / USE_COUNTING_SEMAPHORES / USE_TASK_NOTIFICATIONS 内核组件开关本章结束keysking相关文章https://docs.keysking.com/docs/stm32/freertos/cubeConfig