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);
  }
}
相关推荐
克里斯蒂亚诺更新3 小时前
ruoyi角色权限的对应关系
笔记
a1117765 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao6 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
破碎的南瓜7 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql
你想知道什么?7 小时前
线性回归-学习笔记
笔记·学习·线性回归
鱼毓屿御7 小时前
从「只会聊」到「边想边做」的跃迁
前端·学习·react.js
谙弆悕博士7 小时前
系统集成项目管理工程师教程(第3版)笔记——第17章:法律法规和标准规范
笔记·职场和发展·学习方法·业界资讯·软考·法律·法规
AOwhisky9 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
谙弆悕博士9 小时前
系统集成项目管理工程师教程(第3版)笔记——第4章:信息系统架构
笔记·系统架构·项目管理·创业创新·学习方法·业界资讯·物理
minglie110 小时前
zynq中linux系统的自动登录和免密登录
学习