vTaskDelay()对应 FreeRTOS 原生任务,osDelay()对应 CMSIS-RTOS 任务
os:
1、声明新任务的句柄和属性
osThreadId_t ledTaskHandle; const osThreadAttr_t ledTask_attributes = { .name = "ledTask", .stack_size = 128 * 4, .priority = (osPriority_t) osPriorityLow, // 优先级比默认任务低 osPriorityNormal };为新任务定义 标识符(句柄)和属性(名称、栈大小、优先级)。
2、声明任务函数原型
void StartLedTask(void *argument); // 声明任务函数在使用函数前进行声明,符合 C 语言规范。
3、创建任务
ledTaskHandle = osThreadNew(StartLedTask, NULL, &ledTask_attributes);这是创建任务的核心步骤,调用
osThreadNew()函数来创建并启动任务。
4、实现 LED 任务函数
void StartLedTask(void *argument) { for(;;) { HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); // 这里放任务 osDelay(LED_TASK_DELAY); // 延时500ms } }任务函数包含任务的具体执行逻辑,必须是一个无限循环,并包含适当的延时。
5、任务调度
FreeRTOS 内核会根据任务优先级自动进行调度,
osDelay()函数是任务主动让出 CPU 的关键。


被折叠的 条评论
为什么被折叠?



