FreeRTOS-系统时钟节拍和时间管理

一、前言

        任何操作系统都需要提供一个时钟节拍,以供系统处理诸如延时,超时等与时间相关的事件。时钟节拍是特定的周期性中断, 这个中断可以看做是系统心跳。 中断之间的时间间隔取决于不同的应用,一般是 1ms – 100ms。时钟的节拍中断使得内核可以将任务延迟若干个时钟节拍,以及当任务等待事件发生时,提供等待超时等依据。时钟节拍率越快,系统的额外开销就越大。
        对于 Cortex-M3 内核的 STM32F103 和 Cortex-M4 内核的 STM32F407 以及 F429,都是用滴答定时器来实现系统时钟节拍的。

宏定义配置表示系统时钟节拍是 1KHz,即 1ms
 

 二、FreeRTOS的时间管理

时间延迟函数主要由以下两个作用:

为周期性执行的任务提供延迟

 对于抢占式调度器,让高优先级任务可以通过时间延迟函数释放 CPU 使用权, 从而让低优先级任务可以得到执行

1、函数 vTaskDelay 用于任务的延迟

        void vTaskDelay(const TickType_t xTicksToDelay ); /* 延迟时间长度 */

参数 xTicksToDelay 用于设置延迟的时钟节拍个数,范围 1- 0xFFFFFFFF。

2、函数 vTaskDelayUntil 用于周期性延迟

void vTaskDelayUntil( TickType_t *pxPreviousWakeTime, /* 存储任务上次处于非阻塞状态时刻的变量地址 */
                      const TickType_t xTimeIncrement ); /* 周期性延迟时间 */

函数 vTaskDelay 和 vTaskDelayUntil 的区别:

函数 vTaskDelayUntil 实现的是周期性延迟,而函数 vTaskDelay 实现的是相对性延迟;

例如:有一个串口接收指令任务UsartRev,函数处理时间大概2ms,任务内分别Task1使用vTaskDelay延迟10ms或者Task2使用vTaskDelayUntil延迟10ms,不考虑任务被抢占而造成的影响。实际运行效果:

Task1: Tusartrev  + Tvtaskdelay :  2ms +  10ms = 12ms 一个周期

Task2: Tusartrev  + TvtaskDelayuntil :  10ms 一个周期(2ms 包含在10ms内)

3、函数 xTaskGetTickCount用于获取系统当前运行的时钟节拍数

TickType_t xTaskGetTickCount( void );任务里面调用

4、函数 xTaskGetTickCountFromISR用于获取系统当前运行的时钟节拍数

TickType_t xTaskGetTickCountFromISR( void );

此函数用于在中断服务程序里面调用,如果在任务里面调用的话,需要使用函数 xTaskGetTickCount,这两个函数切不可混用

三、测试例程

https://gitee.com/hutaooooooo/git_keil/tree/master/freetos_vTaskDelay

1、使用 vTaskDelayUntil  测试

2、使用vTaskDelay 实现 vTaskDelayUntil 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GQA分组注意力机制

一、目录 定义demo 二、实现 定义 grouped query attention(GQA) 1 GQA 原理与优点:将query 进行分组,每组query 参数共享一份key,value, 从而使key, value 矩阵变小。 2. 优点: 降低内存读取模型权重的时间开销&am…

无缝迁移:从阿里云WAF到AWS的成功转变之路

在当今数字化浪潮中,网络安全已经成为企业发展的重要组成部分。阿里云WAF(Web 应用防火墙)作为一种重要的网络安全解决方案,帮助企业保护其 Web 应用免受各种网络攻击。 然而,随着企业业务的扩展和需求的变化&#xf…

可替代IBM DOORS的现代化需求管理解决方案Jama Connect,支持数据迁移及重构、实时可追溯性、简化合规流程

作为一家快速发展的全球性公司,dSPACE一直致力于寻找保持领先和优化开发流程的方法。为推进其全球现代化计划,dSPACE开始寻找可以取代传统需求管理平台(IBM DOORS)的需求管理解决方案。 通过本次案例,您将了解dSPACE为…

数据结构-简单队列

1.简介 队列为一个有序列表,可以用数组或链表来实现。 先进先出原则。先存入队列的数据先取出,后存进队列的数据后取出。 这里对比一下,栈是后来者居上 下面使用数组来模拟队列,用数组的结构来存储队列的数据: Que…

Stable Diffusion教程:额外功能/后期处理/高清化

"额外功能"对应的英文单词是Extras,算是直译。但是部分版本中的翻译是“后期处理”或者“高清化”,这都是意译,因为它的主要功能是放大图片、去噪、修脸等对图片的后期处理。注意这里边对图片的处理不是 Stable Diffusion 本身的能…

微软开源了 MS-DOS 4.00

DOS的历史源远流长,很多现在的年轻人不知道DOS了。其实早期的windows可以看做是基于DOS的窗口界面的模拟器,系统的本质其实是DOS。后来DOS的漏洞还是太多了,微软重新写了windows的底层内核。DOS只是一个辅助终端的形式予以保留了。 微软是在…

FreeRTOS学习——FreeRTOS队列(上)

本篇文章记录我学习FreeRTOS队列的相关知识,主要包括队列简介、队列的结构体、队列创建等知识。 队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目。…

大白菜启动U盘想格式化但格式化不了

部分区域被修改分区表保护起来了。直接格式化的话,里面的文件夹都还在。根本格式化不了。特别是可用容量并未还原出来。 进入计算机管理》磁盘管理,看到U盘盘符。别搞错了。删除掉里面的已经分的区域和未分区区域,让它还原成一个整体。退出。…

分类预测 | Matlab实现POA-BP鹈鹕算法优化BP神经网络多特征分类预测

分类预测 | Matlab实现POA-BP鹈鹕算法优化BP神经网络多特征分类预测 目录 分类预测 | Matlab实现POA-BP鹈鹕算法优化BP神经网络多特征分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现POA-BP鹈鹕算法优化BP神经网络多特征分类预测(Matlab实…

javaweb学习week6

javaweb学习 九.登录认证 5.登录后下发令牌 生成令牌:引入JWT令牌操作工具类,登录完成后,调用工具类生成JWT令牌,并返回 代码实例: 6.Filter入门 概念:Filter过滤器,是Javaweb三大组件之一…

在STM32上实现无线传感器网络节点

引言 无线传感器网络(WSN)是物联网(IoT)技术的关键组成部分,广泛应用于环境监测、智能建筑、精密农业等领域。 本教程将介绍如何在STM32微控制器上设计和实现一个无线传感器网络节点,包括硬件选择、网络协…

企业计算机服务器中了helper勒索病毒怎么办?Helper勒索病毒解密处理流程

网络技术的不断发展与成熟,为企业的生产运营提供了极大便利,让企业的发展速度大大提升,但网络毕竟是虚拟服务系统,虽然可以为企业提供便利,但也会给企业数据安全带来严重威胁。近日,云天数据恢复中心接到山…

visionPro链接相机

搜索Cognex GigE Vision Configura… 修改子网掩码为255.255.255.0 配置驱动程序 更新驱动(如果能够选择9014Bytes,跳过此步骤) 更新更改 相机ip配置 打开visionPro 选择照相机 查看实时画面 运行保存图像

【论文】关于网页上能打开的文章下载PDF“显示无效或损坏的 PDF 文件”的解决办法

1. 遇到的问题 今天我在 dl.acm.org/doi 下载论文时发现下载后的pdf打开出现“显示无效或损坏的 PDF 文件” 可是在原网址是可以打开并显示的 2. 解决方案 这里我用到了和之前【论文】去除PDF论文行号的完美解决方案 的相似的解决办法 就是下载的时候不直接下载&#xf…

【java9】java9新特性之接口的私有方法

在Java 9中,接口可以包含私有方法(包括静态私有方法和实例私有方法)。这允许接口的设计者创建一些辅助方法,这些方法只能被接口中的其他方法所使用,而不能被实现该接口的类直接访问。 Java7 Java7及之前 &#xff0c…

文件缓冲区

为什么要有文件缓冲区的存在? 假设甲在云南,甲的朋友乙在北京,甲想给乙送个东西就需要跑到北京去:这时候有菜鸟驿站了,甲就不用跑了,直接把包裹交给菜鸟驿站就可以了。缓冲区就类似于菜鸟驿站,…

【vscode环境配置系列】vscode远程debug配置

VSCODE debug环境配置 插件安装配置文件debug 插件安装 安装C/C, C/C Runner 配置文件 在项目下建立.vscode文件夹,然后分别建立c_cpp_properties.json, launch.json,tasks.json,内容如下: c_cpp_properties.json:…

Dockerfile实战(SSH、Systemctl、Nginx、Tomcat)

目录 一、构建SSH镜像 1.1 dockerfile文件内容 1.2 生成镜像 1.3 启动容器并修改root密码 二、构建Systemctl镜像 2.1 编辑dockerfile文件 ​编辑2.2 生成镜像 2.3 启动容器,并挂载宿主机目录挂载到容器中,然后进行初始化 2.4 进入容器验证 三、…

进程的概念(2)

进程优先级 1.什么的优先级 概念:指定进程获取某种资源(CPU)的先后顺序 本质:优先级的本质是优先级数字的大小,Linux中优先级数字越小,优先级越高 task_struct 进程控制快-> struct -> 内部字段 -&g…

《从Paxos到Zookeeper》——第四、七章:基本概念及原理

目录 第四章 Zookeeper与Paxos 4.1 Zk是什么 4.1.1 Zk特性 4.1.2 Zk基本概念 4.1.2.1 集群角色(Follower, Leader, Observer) 4.1.2.2 数据模型 4.1.2.3 ZNode(数据节点) 4.1.2.4 Session(会话) 4.1.2.5 ACL(Access Control Lists) 4.1.2.6 Watcher(事件…