52Hz——FreeRTOS学习笔记——延时函数

主要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);
  }
}
相关推荐
一隅论数智4 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi20164 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本4 天前
离散数学第六课
学习·离散数学
AI职业加油站4 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
深圳老胡4 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
旖旎夜光4 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
奇思妙想聪明勤奋的小羊4 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
Because_of_Her14 天前
并查集-听课笔记
笔记·算法·并查集
霍霍的袁4 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio