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

【FreeRTOS-时间管理】

一、延时函数介绍

1、FreeRTOS的延时函数

答:FreeRTOS有两种延时函数:相对延时函数 和 绝对延时函数。
在这里插入图片描述

  • 相对延时:指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束。
  • 绝对延时:指将整个任务的运行周期看成一个整体,适用于需要按照一定频率运行的任务。

注意:一般来说,绝对延时中的主体任务运行所需时间必须比绝对延时时间小。

2、相对延时和绝对延时的区别

答:

相对延时
在这里插入图片描述
绝对延时
在这里插入图片描述
(1)为任务主体,也就是任务真正要做的工作

(2)是任务函数中调用vTaskDelayUntil()对任务进行延时

(3)为其他任务在运行


二、延时函数解析

1、相对延时函数内部解析

答:

  1. 判断延时时间是否大于0,大于0才有效。
  2. 挂起调度器。
  3. 将当前正在运行的任务从就绪列表移除,添加到阻塞列表prvAddCurrentTaskToDelayedList( )。
    1. 将该任务从就绪列表中移除。
    2. 如果使能挂起操作,并且延时时间为0XFFFF FFFF,并且xCanBlockIndefinitely等于pdTRUE,就代表此时是一直等,相当于挂起,所以添加到挂起列表。
    3. 如果延时时间小于0XFFFF FFF。
      • 记录阻塞超时时间,并记录在列表项值里(通过该值确定插入阻塞列表的位置)。
      • 如果阻塞超时时间溢出,将该任务状态列表项添加到溢出阻塞列表。
      • 如果没溢出,则将该任务状态列表项添加到阻塞列表,并判断阻塞超时时间是否小于下一个阻塞超时时间,是的话就更新当前这个时间为下一个阻塞超时时间
  4. 恢复任务调度器。
  5. 进行一次任务切换。
  6. 2、延时函数的流程

答:

  • 正在运行的任务。
  • 调用延时函数。
  • 此时将该任务移除就绪列表,并添加到阻塞列表中。
  • 滴答中断里边进行计时。
  • 判断阻塞时间是否到达,如果到达将从阻塞列表移除,添加到就绪列表。

为什么调用了延时函数就进入阻塞状态

将当前任务移动到阻塞列表

在这里插入图片描述
具体见该函数的源码分析。


三、延时函数演示实验

实验简介

在这里插入图片描述

实验现象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

总结

在这里插入图片描述

相关文章:

  • **集合**实验**
  • 《Python星球日记》第29天:Flask进阶
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(八)
  • JobHistory Server的配置和启动
  • 字符串哈希专题
  • 36、C#中的⽅法声明参数关键字params,ref,out的意义及⽤法
  • Vue3响应式原理那些事
  • Python10天冲刺《Pydantic 是一个用于数据验证和设置管理的 Python 库》
  • 从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 5 |地图匹配与轻量 SLAM:HMM/Viterbi 与简化图优化
  • 常用对称加密算法的Python实现及详解
  • Javascript学习笔记2——基本引用类型
  • PriorityQueue
  • GESP2024年3月认证C++八级( 第二部分判断题(1-5))
  • kdump详解
  • 使用 NGINX 实现 HTTP Basic 认证ngx_http_auth_basic_module 模块
  • python函数复习(形参实参,收集参数,关键字参数)
  • 《OmniMeetProTrack 全维会议链智能追录系统 软件说明书》
  • 【NLP】33. Pinecone + OpenAI :构建自定义语义搜索系统
  • E-R图作业
  • 《人件》第四章 高效团队养成
  • 俄军击落多架企图攻击莫斯科的无人机
  • 新闻1+1丨多地政府食堂开放“舌尖上的服务”,反映出怎样的理念转变?
  • 观察|“离境退税”撬动上海“五一”假期入境消费
  • 台湾花莲县海域发生5.7级地震,震源深度15公里
  • 特朗普关税风暴中的“稳”与“变”:新加坡国会选举观察
  • 魔都眼|上海环球马术冠军赛收官,英国骑手夺冠