freertos 低优先级任务创建高优先级任务
时间: 2023-11-19 12:04:53 浏览: 145
FreeRTOS-任务管理
在FreeRTOS中,可以通过创建高优先级任务来实现低优先级任务创建高优先级任务的需求。具体步骤如下:
1. 首先,需要定义高优先级任务的任务句柄和任务函数。
```c
TaskHandle_t xHighPriorityTaskHandle = NULL;
void vHighPriorityTask(void *pvParameters)
{
// 高优先级任务的代码
}
```
2. 在低优先级任务中,使用xTaskCreate()函数创建高优先级任务。
```c
xTaskCreate(vHighPriorityTask, "HighPriorityTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, &xHighPriorityTaskHandle);
```
在这里,第5个参数tskIDLE_PRIORITY + 1表示高优先级任务的优先级比空闲任务的优先级高1。
3. 在低优先级任务中,使用vTaskDelete()函数删除自身任务。
```c
vTaskDelete(NULL);
```
完整的代码如下:
```c
TaskHandle_t xHighPriorityTaskHandle = NULL;
void vHighPriorityTask(void *pvParameters)
{
// 高优先级任务的代码
}
void vLowPriorityTask(void *pvParameters)
{
// 低优先级任务创建高优先级任务
xTaskCreate(vHighPriorityTask, "HighPriorityTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, &xHighPriorityTaskHandle);
// 删除自身任务
vTaskDelete(NULL);
}
void setup()
{
// 创建低优先级任务
xTaskCreate(vLowPriorityTask, "LowPriorityTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
// 启动调度器
vTaskStartScheduler();
}
void loop()
{
// 空函数
}
```
阅读全文