十三、FreeRTOS之FreeRTOS时间管理

news2024/11/27 21:03:37

本节主要介绍以下内容:

1,延时函数介绍(了解)

2,延时函数解析(熟悉)

3,延时函数演示实验(掌握)

4,课堂总结(掌握)

 一、延时函数介绍(了解)      

函数

描述

vTaskDelay()

相对延时

xTaskDelayUntil()

绝对延时

相对延时:指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束 

举个例子:从vTaskDelay()的前一句到vTaskDelay()执行结束,延迟100ms。

绝对延时:指将整个任务的运行周期看成一个整体,适用于需要按照一定频率运行的任务

举个例子:任务从开始执行到结束共100ms。

可以看下面这张图,xTimeIncrement就是绝对延时的时间,这三部分加起来就是绝对延时时间。

这个函数在官网里面也有说明:必须任务主体小于延迟时间

 (1)为任务主体,也就是任务真正要做的工作

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

(3)为其他任务在运行

,延时函数解析(熟悉)

又开始了我们对源码进行解读的时间了,大家有没有觉得解读源码是一件很有成就感的事情呢?

#if ( INCLUDE_vTaskDelay == 1 )

    void vTaskDelay( const TickType_t xTicksToDelay )
    {
        /* 只有在延时时间大于0的时候, 
         * 才需要进行任务阻塞, 
         * 否则相当于强制进行任务切换,而不阻塞任务 */
        BaseType_t xAlreadyYielded = pdFALSE;

        /* A delay time of zero just forces a reschedule. */
        if( xTicksToDelay > ( TickType_t ) 0U )
        {
            configASSERT( uxSchedulerSuspended == 0 );
            /* 挂起任务调度器 */
            vTaskSuspendAll();
            {
                /* 用于调试,不用理会 */
                traceTASK_DELAY();

                /* A task that is removed from the event list while the
                 * scheduler is suspended will not get placed in the ready
                 * list or removed from the blocked list until the scheduler
                 * is resumed.
                 *
                 * This task cannot be in an event list as it is the currently
                 * executing task. */
                /* 将任务添加到阻塞态任务列表中 */
                prvAddCurrentTaskToDelayedList( xTicksToDelay, pdFALSE );
            }
            /* 恢复任务调度器运行, 
             * 调用此函数会返回是否需要进行任务切换 */
            xAlreadyYielded = xTaskResumeAll();
        }
        else
        {
            mtCOVERAGE_TEST_MARKER();
        }

        /* Force a reschedule if xTaskResumeAll has not already done so, we may
         * have put ourselves to sleep. */
        /* 根据标志进行任务切换 */
        if( xAlreadyYielded == pdFALSE )
        {
            portYIELD_WITHIN_API();
        }
        else
        {
            mtCOVERAGE_TEST_MARKER();
        }
    }

#endif /* INCLUDE_vTaskDelay */
/*-----------------------------------------------------------*/

注意:

1. 使用函数 vTaskDelay()进行任务延时时,被延时的任务为调用该函数的任务,及调用该
函数时,系统中正在运行的任务,此函数无法指定将其他任务进行任务延时。

2. 函数 vTaskDelay()传入的参数 xTicksToDelay是任务被延时的具体延时时间,时间的单
位为系统时钟节拍,这里要特别注意,很多 FreeRTOS的初学者可能会一会 此函数延时的时间
单位为微妙、毫秒、秒等物理时间单位,
FreeRTOS是以系统时钟节拍作为计量的时间单
位的 ,而系统时钟节拍对应的物理时间长短于 FreeRTOSConfig.h文件中的配置项ConfigTICK_RATE_HZ有关,配置项 configTICK_RATE_HZ是用于配置系统时钟节拍的频率的,

3. 在使用此函数进行任务延时时,如果传入的参数为 0,那表明不进行任务延时,而是强
制进行一次任务切换。

三,延时函数演示实验(掌握)

2.1、实验目的:

学习 FreeRTOS 相对延时和绝对延时 API 函数的使用

2.2、实验设计:

将设计三个任务:start_task、task1、task2

三个任务的功能如下:

  • start_task:用来创建task1和task2任务
  • task1:用于展示相对延时函数vTaskDelay ( )的使用
  • task2:用于展示绝对延时函数vTaskDelayUntil( )的使用

为了直观显示两个延时函数的区别,将使用LED0(PB1) LED1(PB0) 的翻转波形来表示

2.3 实验代码

demo.c

代码明天更新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1286811.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Transformer论文精读系列】(一)如何理解Transformer里的注意力机制?

论文:Attention Is All You Need 参考李沐老师的讲解视频: Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili 其他参考: 超强动画,一步一步深入浅出解释Transformer原理!_哔哩哔哩_bilibili Transformer论文逐段…

2023年【A特种设备相关管理(锅炉压力容器压力管道)】考试内容及A特种设备相关管理(锅炉压力容器压力管道)复审考试

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理(锅炉压力容器压力管道)考试内容根据新A特种设备相关管理(锅炉压力容器压力管道)考试大纲要求,安全生产模拟考试一点通将A特种设备相关管理…

1970-2022年中国省级国家级开发区数据集

1970-2022年Z国省级国家级开发区数据集 1、时间:1970-2022年 2、指标:单位名称、所属区域、所属省份、所属级别、开发区类型、关注热度、成立时间、核准面积、主导产业、地址、联系电话、经纬度 3、范围:2781个开发区 4、来源&#xff1a…

机器学习---朴素贝叶斯分类器的实现(对文本进行侮辱性言论和非侮辱性言论的分类)

1. loadDataSet函数 import numpy as np# 构造loadDataSet函数用于生成实验样本 def loadDataSet(): postingList[[my, dog, has, flea, problems, help, please],[maybe, not, take, him, to, dog, park, stupid],[my, dalmation, is, so, cute, I, love, him],[stop, postin…

2005-2021年地级市绿色发展注意力数据(根据政府报告文本词频统计)

2005-2021年地级市绿色发展注意力数据(根据政府报告文本词频统计) 1、时间:2005-2021年 2、指标:省、市、年份、一级指标、关键词、关键词词频、总词频 3、范围:270个地级市 4、来源:地级市政府工作报告…

卡通渲染总结《二》

关于技术的方面,一方面就是其轮廓边缘检测: 主要的方法可以被分为基于图片空间和对象空间,对象空间比图片空间会多一些立体坐标位置的信息。 轮廓类型分类 首先我们顶一下轮廓是什么,从一个视角看去如果一条边相邻的两个面其恰…

python自动化测试之破解滑动验证码

在Web自动化测试的过程中,经常会被登录的验证码给卡住,不知道如何去通过验证码的验证。 一般的情况下遇到验证码我们可以都可以找开发去帮忙解决,关闭验证码,或者给一个万能的验证码! 那么如果开发不提供帮助的话&…

金蝶云星空单据编辑界面,不允许批量填充操作

文章目录 金蝶云星空单据编辑界面,不允许批量填充操作案例演示开发设计测试 金蝶云星空单据编辑界面,不允许批量填充操作 案例演示 售后单,明细信息单据体,物料编码字段禁止批量填充。 开发设计 编写表单插件,在Be…

【C++】POCO学习总结(九):网络

【C】郭老二博文之:C目录 1、Poco::Net::IPAddress IP地址 Poco::Net::IPAddress类存储IPv4或IPv6主机地址。 Poco::Net::IPAddress可以从字符串解析,也可以格式化为字符串。支持IPv4格式(d.d.d.d)和IPv6格式(x: x: x: x: x: x: x: x)。 常用函数&…

行业内卷严重到什么程度了?

一.内卷现状 最近大家都吐槽找工作难,确实很难。 不得不说,现在找工作的难度是以前的很多倍。甚至可以说地狱级都不为过。 以前只要简历一挂到网上,就有很多电话打过来。特别是在一线城市,各种类型企业的HR都来找,希…

《opencv实用探索·十》opencv双边滤波的简单理解

1、引言 OpenCV中的双边滤波(Bilateral Filtering)是一种保持边缘清晰的滤波方法,它考虑像素的空间关系和像素值之间的差异。双边滤波对于去除噪声的同时保持图像的边缘非常有效,它也是一种非线性滤波。 双边滤波采用了两个高斯滤…

获取网络ppt资源

背景: ​ 某度上有很多优质的PPT资源和文档资源,但是大多数需要付费才能获取。对于一些经济有限的用户来说,这无疑是个遗憾,因为我们更倾向于以免费的方式获取所需资源。 解决方案: ​ 然而,幸运的是&am…

vivado如何进行增量编译

情况1 如果是根据 placement 或者 routing 进行增量编译,直接右键点击要跑的 implement,,选择set incremental implement , 然后选第二项,指定 要参考的 routing.dcp 或者 placement.dcp 的路径即可 情况2 如果只参考 synthesis …

西工大计算机学院计算机系统基础实验一(环境配置)

首先,不要焦虑,稳住心态慢慢来,一点一点做,跟着作者把基础打好,比什么都重要。作者曾经经历过这份痛苦,知道它有多么不好受。当初的作者高中之前甚至都没有自己的一台笔记本,上了大学以后学C语言…

设计模式:装饰者模式

目录 一、定义 二、场景 三、例子 四、优缺点 优点: 缺点: 一、定义 在不改变已有对象结构的情况下,动态添加新的功能到对象上,是继承的一种替代方案。属于结构型模式。 二、场景 1.扩展一个类的功能,添加附加职责…

Python如何传递任意数量的实参及什么是返回值

Python如何传递任意数量的实参 传递任意数量的实参 形参前加一个 * ,Python会创建一个已形参为名的空元组,将所有收到的值都放到这个元组中: def make_pizza(*toppings):print("\nMaking a pizza with the following toppings: "…

【部署】预处理和后处理加速方案:CVCuda

预处理 和 后处理加速方案大概可以包括以下几种 (1)nvidia开源的CVCuda (2)使用opencv4的cuda加速模块 (3)手写cuda算子 这一章我们先从CVCuda开始 一.基本要求 1.1 何时可以使用CVcuda库 在模型的 预…

SpringBoot_02

Web后端开发_07 SpringBoot_02 SpringBoot原理 1.配置优先级 1.1配置 SpringBoot中支持三种格式的配置文件: application.propertiesapplication.ymlapplication.yaml properties、yaml、yml三种配置文件,优先级最高的是properties 配置文件优先级…

【前端开发】每一位高级Web工程师都应该掌握的10个Web API!

Photo by Hisu lee on Unsplash JavaScript中的某些API的使用率可能相对较低。下面我们将逐一介绍它们的使用和使用场景。 Blob API Blob API用于处理二进制数据,可以轻松地将数据转换为Blob对象或从Blob对象读取数据。 // Create a Blob object const myBlob …

【Vulnhub 靶场】【hacksudo: FOG】【简单 - 中等】【20210514】

1、环境介绍 靶场介绍:https://www.vulnhub.com/entry/hacksudo-fog,697/ 靶场下载:https://download.vulnhub.com/hacksudo/hacksudo-FOG.zip 靶场难度:简单 - 中等 发布日期:2021年05月14日 文件大小:1.3 GB 靶场作…