☰
[FreeRTOS]创建第一个任务(CubeMX详细配置+报错解决办法)
2026/9/25 6:32:56 网站建设 项目流程

CubeMX 中创建任务

首先在 freeRTOS 的配置页面中的 Configuration 下,选中 Tasks and Queues 标签页,存在一个已经创建的默认任务为 “defaultTask”,点击进入配置选项修改为如下图所示。

如果需要增加一个新任务,点击 Add,就可以创建一个新的任务。

在弹出的页面中,可以配置任务名称,优先级,栈大小,入口函数等。各个参数的具体功能 见下表:

选项当前值含义 & 注意事项
Task NameLED_Task任务名称字符串,调试器内核查看时显示,字符串名称,不影响变量名
PriorityosPriorityLowCMSIS-V2 优先级枚举CMSIS 优先级映射底层 FreeRTOS;数值越高优先级越高常用:osPriorityLow < osPriorityNormal < osPriorityHigh
Stack Size (Words)128重点:任务栈大小,单位 Words(32 位 MCU:1Word=4 字节)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 Block
Buffer 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中代码含义

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询