[FreeRTOS]创建第一个任务(CubeMX详细配置+报错解决办法)

发布时间:2026/8/26 18:36:15
[FreeRTOS]创建第一个任务(CubeMX详细配置+报错解决办法) CubeMX 中创建任务首先在 freeRTOS 的配置页面中的 Configuration 下选中 Tasks and Queues 标签页存在一个已经创建的默认任务为 “defaultTask”点击进入配置选项修改为如下图所示。如果需要增加一个新任务点击 Add就可以创建一个新的任务。在弹出的页面中可以配置任务名称优先级栈大小入口函数等。各个参数的具体功能 见下表选项当前值含义 注意事项Task NameLED_Task任务名称字符串调试器内核查看时显示字符串名称不影响变量名PriorityosPriorityLowCMSIS-V2 优先级枚举CMSIS 优先级映射底层 FreeRTOS数值越高优先级越高常用osPriorityLow osPriorityNormal osPriorityHighStack Size (Words)128重点任务栈大小单位 Words32 位 MCU1Word4 字节128 Words 512 字节LED 简单循环任务够用函数嵌套多、调用 printf、浮点运算时需要加大Entry FunctionStartTask02任务入口函数名CubeMX 自动生成这个函数模板任务死循环写在此函数内 函数原型固定void StartTask02(void *argument)Code Generation OptionDefault任务函数代码生成方式 设置为 Default 则会产生一个普通的 任务函数 As weak产生一个用__weak 修饰符修饰的任务函数 As external产生一个外部引用的任务函数用户需要自 己实现该函数 Default产生一个默认格式的任务函数用户需要在该函 数实现功能。ParameterNULL创建任务时传递给入口函数的入参 argument可以传递变量指针AllocationDynamic分配模式・Dynamic动态任务 TCB、栈内存从 FreeRTOS 堆 TOTAL_HEAP_SIZE 分配・Static静态使用全局数组不占用堆内存需要填写下方 Buffer/Control BlockBuffer NameNULL仅静态分配有效填写栈数组名称Control Block NameNULL仅静态分配有效填写任务控制块 TCB 结构体数组名称设置完毕之后点击 OK就可以看到列表中多出了自己创建的任务生成代码点击生成代码的时候可以看到这里会弹出一个警示警告当使用RTOS实时操作系统时强烈建议HAL时基源使用除了SysTick之外的时基源。HAL时基源可以在“Pinout Configuration”标签页下的“SYS”部分进行更改。为什么会有这个警告当RTOS运行时它通常需要一个自己的独立时钟源通常也称为“时基”或“系统节拍”来进行任务调度、延时管理等。如果RTOS和HAL库都使用同一个SysTick作为时基源可能会导致以下问题冲突和不稳定性 RTOS可能会修改SysTick的配置或者其自身的节拍中断与HAL库对SysTick的使用发生冲突导致RTOS或HAL库的时间功能出现异常甚至系统崩溃。为了确保RTOS和HAL库都能稳定、正确地运行STM32CubeMX建议你将HAL库的时基源从默认的SysTick切换到微控制器上的其他通用定时器如TIM6、TIM7等让SysTick专门供RTOS使用。这样可以避免它们之间对SysTick的争用和冲突。本章结束下一章解释创建的freertos.c中代码含义