52Hz——FreeRTOS学习笔记——延时函数
主要API
vTaskDelay
xTaskDelayUntil
区别
1.
vTaskDelay
- 相对延时工作原理:从函数调用时刻开始,延时指定的时间。
2.
xTaskDelayUntil
- 绝对延时工作原理:基于一个固定的基准时间点,确保任务以精确的间隔执行。
案例
#include "MyTask.h"typedef enum
{TASK_PRIORITY_0,TASK_PRIORITY_1,TASK_PRIORITY_2,TASK_PRIORITY_3,TASK_PRIORITY_4
} Task_Priority_t;void LED1_Task(void *pvParameters);
TaskHandle_t led1_task_handle;
#define LED1_TASK_NAME "LED1_Task"
#define LED1_TASK_STACK_DEPTH 128void LED2_Task(void *pvParameters);
TaskHandle_t led2_task_handle;
#define LED2_TASK_NAME "LED2_Task"
#define LED2_TASK_STACK_DEPTH 128void LED3_Task(void *pvParameters);
TaskHandle_t led3_task_handle;
#define LED3_TASK_NAME "LED3_Task"
#define LED3_TASK_STACK_DEPTH 128void Print_Task(void *pvParameters);
TaskHandle_t Print_task_handle;
#define Print_TASK_NAME "Print_Task"
#define Print_TASK_STACK_DEPTH 128void MyTask_Start_Work(void)
{// 1. 创建任务xTaskCreate(LED1_Task, LED1_TASK_NAME, LED1_TASK_STACK_DEPTH, NULL, TASK_PRIORITY_4, &led1_task_handle);xTaskCreate(LED2_Task, LED2_TASK_NAME, LED2_TASK_STACK_DEPTH, NULL, TASK_PRIORITY_4, &led2_task_handle);// xTaskCreate(LED3_Task, LED3_TASK_NAME, LED3_TASK_STACK_DEPTH, NULL, TASK_PRIORITY_4, &led3_task_handle);// xTaskCreate(Print_Task, Print_TASK_NAME, Print_TASK_STACK_DEPTH, NULL, TASK_PRIORITY_4, &Print_task_handle);// 2. 开启调度4vTaskStartScheduler();
}void LED1_Task(void *pvParameters)
{while (1){Int_LED_Toggle(LED1_GPIO_Port, LED1_Pin);vTaskDelay(1000);}
}void LED2_Task(void *pvParameters)
{// 获取任务上一下唤醒时间TickType_t tickCount = xTaskGetTickCount();while (1){Int_LED_Toggle(LED2_GPIO_Port, LED2_Pin);// vTaskDelay(1000);vTaskDelayUntil(&tickCount, 1000);}
}void LED3_Task(void *pvParameters)
{while (1){Int_LED_Toggle(LED3_GPIO_Port, LED3_Pin);vTaskDelay(1000);}
}uint8_t run_time_buff[200] = {0};
uint8_t task_list[200] = {0};
void Print_Task(void *pvParameters)
{while (1){led1_status.uxCurrentPriority, led1_status.usStackHighWaterMark, led1_status.ulRunTimeCounter);// 5. 获取任务列表vTaskList((char *)task_list);printf("\n %s \r\n", task_list);vTaskDelay(500);}
}