主要API
vTaskDelay
xTaskDelayUntil
区别
1.
vTaskDelay
- 相对延时工作原理 :从函数调用时刻开始,延时指定的时间。
2.
xTaskDelayUntil
- 绝对延时工作原理 :基于一个固定的基准时间点,确保任务以精确的间隔执行。
案例
objectivec
#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 128
void LED2_Task(void *pvParameters);
TaskHandle_t led2_task_handle;
#define LED2_TASK_NAME "LED2_Task"
#define LED2_TASK_STACK_DEPTH 128
void LED3_Task(void *pvParameters);
TaskHandle_t led3_task_handle;
#define LED3_TASK_NAME "LED3_Task"
#define LED3_TASK_STACK_DEPTH 128
void Print_Task(void *pvParameters);
TaskHandle_t Print_task_handle;
#define Print_TASK_NAME "Print_Task"
#define Print_TASK_STACK_DEPTH 128
void 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. 开启调度4
vTaskStartScheduler();
}
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);
}
}