当前位置: 首页 > news >正文

11,FreeRTOS延时函数

 一、实验目标


创建三个动态任务,栈空间大小均为128字。startTask、Task1、Task2。startTask仅运行一次,负责task1、task2任务的创建,startTask任务的删除。Task1负责相对延时函数展示。Task2负责绝对演示函数展示。

注:本实验基于正点原子FreeRTOS教程的学习总结。

 二、实验准备

1.FreeRTOS的Keil动态任务创建与删除程序

2.STM3F407开发板

3.宏定义开启

        将INCLUDE_vTaskDelayUntil、INCLUDE_vTaskDelay置一 。

#define INCLUDE_vTaskDelayUntil                         1                       /* 任务绝对延时 */
#define INCLUDE_vTaskDelay                              1                       /* 任务延时 */

   4.所需API函数介绍

        相对延时函数vTaskDelay。任务运行到vTaskDelay()函数时会被挂起到阻塞列表,等待相对延时完成,在重新进入就绪列表中,延时时间从vTaskDelay()函数运行起计算

        输入值xTicksToDelay 为延时时间,单位为ms。

void vTaskDelay( const TickType_t xTicksToDelay );

        绝对延时函数vTaskDelayUntil。任务运行到vTaskDelayUntil()函数时也会被挂起到阻塞列表,但延时时间从进入该任务起计算

        输入值pxPreviousWakeTime为任务进入时间,从滴答定时器获取。输入值xTimeIncrement 为延时时间,单位为ms。

void vTaskDelayUntil( TickType_t *pxPreviousWakeTime,const TickType_t xTimeIncrement );

 三、代码编写

3.1修改Task1的任务函数内容

        Task1实现相对延时函数。

void task1(void *pvParameters)
{while(1){LED0_TOGGLE();vTaskDelay(500);//相对延时}
}

 3.2修改Task2的任务函数内容

        Task2实现绝对延时函数。

void task2(void *pvParameters)
{TickType_t xLastWakeTime;xLastWakeTime = xTaskGetTickCount();//获取进入任务时间while(1){LED1_TOGGLE();vTaskDelayUntil(&xLastWakeTime,500);//绝对延时}
}

四、实验现象

        实验现象如下所示。可以看到脉冲的时间为指定500ms翻转一次。

http://www.dtcms.com/a/344940.html

相关文章:

  • 微算法科技(NASDAQ:MLGO)基于人工智能优化构建混合ARIMA模型,提高比特币价格预测准确性
  • 日志的配置
  • nvm 更新到最新版本
  • C++ 数组:从底层原理到实战应用的深度解析
  • UE5 将纯蓝图项目转为 C++ 项目
  • 探索Thompson Shell:Unix初代Shell的智慧
  • 线性回归入门学习:从原理到代码实现
  • 南溪智融双碳示范基地建筑设备管理系统 + 智能照明系统调试完成:筑牢 “绿色智能” 运营基石
  • 2025年9月5090工作站、
  • APP Usage『安卓』:比系统自带强10倍!手机应用使用时长精确到秒
  • 无穿戴AI动捕实训室:多专业融合实训的创新实践
  • KWDB 分布式架构探究——数据分布与特性
  • 机器学习在量化中的应用
  • 自动驾驶感知——BEV感知(学习笔记)
  • osgEarth 图像融合正片叠底
  • 爬楼梯变式
  • 24小时变2小时:RFQ系统如何重构电子元器件询价生态链
  • 在飞牛 NAS 上部署 PanSou:图文指南
  • Java后端学习路线
  • Java RESTful API 构建从入门到精通:一步步打造高效后端服务
  • DataStream实现WordCount
  • 世界模型一种能够对现实世界环境进行仿真,并基于文本、图像、视频和运动等输入数据来生成视频、预测未来状态的生成式 AI 模型
  • LeetCode第1695题 - 删除子数组的最大得分
  • 数字经济浪潮下的刑事法律风险与辩护新路径
  • k8s 简介及部署方法以及各方面应用
  • STM32F1 GPIO介绍及应用
  • Vue2.x核心技术与实战(三)
  • 掌握DRF的serializer_class:高效API开发
  • [激光原理与应用-318]:光学设计 - Solidworks - 草图中常见的操作
  • PCIe 5.0 SSD的发热量到底有多大?如何避免?