第04章 任务的创建和删除
约 410 字大约 1 分钟
2026-01-19
案例需求
分别使用动态和静态的方法创建三个任务:
task1:实现LED1每500ms闪烁一次。
task2:实现LED2每500ms闪烁一次。
task3:判断按键SW5是否按下,按下则删掉task1。相关宏
configSUPPORT_DYNAMIC_ALLOCATION 是否允许RTOS内核通过动态内存分配方式创建系统对象
configSUPPORT_STATIC_ALLOCATION 是否允许RTOS内核通过静态内存分配方式创建系统对象相关类型:
TaskHandle_t 是一个指向任务控制块(TCB)的指针类型,用于唯一标识一个任务实例
StaticTask_t 是静态任务控制块(TCB)的数据类型,用于存储任务的管理信息(如优先级、栈指针、状态等)
StackType_t 是任务栈内存的基本单元类型,其大小由处理器架构决定(32 位系统为 32 位)相关函数
xTaskCreate() 动态方式创建任务
xTaskCreateStatic() 静态方式创建任务
vTaskDelete() 删除任务
vTaskStartScheduler(); 启动 RTOS 调度器
vTaskDelay() 阻塞延时
taskENTER_CRITICAL() 进入临界区
taskEXIT_CRITICAL() 退出临界区动态和静态方式创建任务对比:
| 静态分配 | 动态分配 | |
|---|---|---|
| 内存来源 | 用户预分配的全局/静态变量 | FreeRTOS 堆栈 |
| 实时性 | 高(无运行时分配延迟) | 较低(依赖堆分配时间) |
| 内存碎片风险 | 无 | 可能(频繁创建/删除任务时) |
| 调试难度 | 易追踪(内存地址固定) | 需工具检测泄漏/碎片 |
| 典型用例 | 医疗设备、工业控制器 | 物联网网关、临时任务调试 |
