FreeRTOS学习 -- 时间管理

news2024/11/24 14:28:12

在使用 FreeRTOS 的过程中通常会在一个任务函数中使用延时函数对这个任务延时,当执行延时函数的时候会进行任务切换,并且此任务就会进入阻塞态,直到延时完成,任务重新进入就绪态。

FreeRTOS 延时函数

1、函数 vTaskDelay()

在FreeRTOS 中延时函数也有相对模式和绝对模式,不过在FreeRTOS中不同的模式用的函数也不同,其中函数 vTaskDelay()是相对模式(相对延时函数),函数 vTaskDelayUntil()是绝对模式(绝对延时函数)。

函数 vTaskDelay()在文件 tasks.c 中有定义,要使用此函数的话宏 INCLUDE_vTaskDelay 必须为 1。
在这里插入图片描述
(1)延时时间由参数 xTicksToDelay 来确定,为了延时的时间节拍数,延时时间肯定要大于0。否则的话相当于直接调用函数 portYIELD()进行任务切换。
(2)调用函数 vTaskSuspendAll()挂起任务调度器。
(3)调用函数 prvAddCurrentTaskToDelayedList() 将要延时的任务添加到延时列表 pxDelayedTaskList 或 者 pxOverflowDelayedTaskList() 中 。
(4)调用函数 xTaskResumeAll()恢复任务调度器。
(5)如果函数 xTaskResumeAll()没有进行任务调度的话那么在这里就得进行任务调度。
(6)调用函数 portYIELD_WITHIN_API()进行一次任务调度。

2、函数 12.3vTaskDelayUntil()

函数 vTaskDelayUntil() 会阻塞任务,阻塞时间是一个绝对时间,那些需要按照一定的频率运行的任务可以使用。

使用方法:

void TestTask( void * pvParameters )
{
	TickType_t	PreviousWakeTime;
	//延时 50ms,但是函数 vTaskDelayUntil()的参数需要设置的是延时的节拍数,不能直接
	//设置延时时间,因此使用函数 pdMS_TO_TICKS 将时间转换为节拍数。
	const TickType_t TimeIncrement = pdMS_TO_TICKS( 50 );
	PreviousWakeTime = xTaskGetTickCount(); 
	for( ;; )
	{
	/******************************************************************/
	/*************************任务主体*********************************/
	/******************************************************************/
	
	//调用函数vTaskDelayUntil 进行延时
	vTaskDelayUntil( &PreviousWakeTime, TimeIncrement);
	```
	}
}

函数 vTaskDelayUntil() 延时的任务不一定就能周期性的运行,使用函数 vTaskDelayUntil() 只能保证按照一定的周期取消阻塞,进入就绪态。

FreeRTOS 系统时钟节拍

xTickCount 就是FreeRTOS的系统时钟节拍计数器。每个滴答定时器中断中 xTickCount 就会加1。

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

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

相关文章

Ubuntu下载QT5.8安装包-bestswinger课程

最近在看UP的QT开发课,真的找了巨久这个安装包,谁都不想在安装上花太多时间。。出一版小小教程吧~ 首先打开qt download官网,5.8好像在镜像网站上没有看到,所以我最后还是老老实实官网了,而且5.8会小一点 …

90%网络工程师还是搞不清三层交换机是啥?

6月29日,HCIA新开班啦什么是三层交换机? 首先,我们先来解释一下三层交换机是什么。简单来说,它就是网络中的一个小老板,负责管理数据的流动。与普通的网络设备不同,三层交换机不仅能认识「MAC地址」&#…

小程序使用接口wx.getLocation配置

开通时需详细描述业务,否则可能审核不通过 可能需要绑定腾讯位置服务,新建应该,绑定到小程序 配置 权限声明:在使用wx.getLocation前,需要在app.json的permission字段中声明对用户位置信息的使用权限,并提…

可编程非线性RCD负载原理与应用

可编程非线性RCD负载(Resistor-Capacitor-Diode)是一种电子元件,其电阻、电容和二极管的特性可以通过编程进行控制和调整。这种负载广泛应用于电力系统、通信设备、电子设备等领域,具有很高的实用价值。 RCD负载的基本原理是利用电…

【CT】LeetCode手撕—160. 相交链表

目录 题目1- 思路2- 实现⭐160. 相交链表——题解思路 3- ACM 实现 题目 原题连接:160. 相交链表 1- 思路 模式识别:相交链表 ——> 判断是否相交 思路 保证 headA 是最长的那个链表,之后对其开始依次遍历 2- 实现 ⭐160. 相交链表—…

大厂晋升学习方法一:海绵学习法

早晨 30 分钟 首先,我们可以把起床的闹钟提前 30 分钟,比如原来 07:30 的闹钟可以改为 07:00。不用担心提前 30 分钟起床会影响休息质量,习惯以后,早起 30 分钟不但不会影响一天的精力,甚至可能反而让人更有精神。早起…

leetcode 二分查找·系统掌握 猜数字大小

题目&#xff1a; 题解&#xff1a; 使用最经典普通二分即可 int guessNumber(int n) {long l0,rn,mid;while(l<r){mid(rl)>>1;if(guess(mid)0)return mid;else if(guess(mid)-1)rmid-1;else lmid1;}return 0;}

kylin v10 离线安装chrome centos离线安装chrome linux离线安装谷歌浏览器

1. 先用自己联网的计算机&#xff0c;下载离线安装包&#xff0c;浏览器输入链接下载安装包&#xff1a; https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 1.2. 信创环境不用执行下面&#xff0c;因为没网 1.3. 若为阿里云服务器&#xff0c;或服…

基于自主发明专利的杰林码哈希算法、对称加密算法和无损压缩算法的可文件追踪管控且支持linux和windows的文件压缩包工具SDK和JLM PACK软件介绍

基于自主发明专利的杰林码哈希算法、对称加密算法和无损压缩算法的可文件追踪管控且支持linux和windows的文件压缩包工具SDK1.0版发布&#xff0c;下载链接为&#xff1a; JLM PACK SDK和软件的官方网站 注意测试授权证书yesine_jlmpack_test.license的有效期到2024年12月&am…

【AI副业指南】用AI做心理测试图文号,单月稳赚7000+(附详细教程)

大家好&#xff0c;我是画画的小强 因为AI的出现&#xff0c;很多自媒体副业项目变得简单容易上手&#xff0c;也给予很多想要在业余时间变现的朋友更丰富的项目选择。 今天分享的赛道绝对颠覆大家的认知&#xff0c;本期将叫大家如何通过AI在自媒体平台上做心理测试账号。 …

湖南(焦点小组)源点咨询 用户座谈会现场访谈之一点心得

湖南源点调研认为&#xff1a;访谈前&#xff0c;务必先明确最核心的目的。 一些初学的同学都知道&#xff0c;访谈首先要准备一个提纲&#xff0c;的确这是一个基础工作。但我在实际情况更常见到的是&#xff1a; 访谈提纲看似全面&#xff0c;各种维度都去问&#xff0c;但…

防晒服饰「进化论」:从标准到当代人的OOTD

【潮汐商业评论/原创】 “我&#xff0c;我老公&#xff0c;我儿子&#xff0c;身上80%都被‘防晒’承包了。我怕光老化&#xff0c;我老公怕热&#xff0c;我儿子容易晒脱皮。买蕉下&#xff0c;是因为看重它的标准&#xff0c;而且此‘防晒’已非彼‘防晒’了。”宝妈Timy正…

使用VisualBox+Vagrant搭建Centos虚拟机环境

1.下载并安装VisualBox&#xff1b; 2.下载并安装Vagrant; 3.打开cmd窗口&#xff0c;执行命令vagrant init centos/7&#xff0c;初始化centos环境&#xff0c;该步骤受网络带宽影响&#xff0c;可能挂级30分钟到1个小时&#xff1b; 4.启动虚拟机&#xff1a;vagrant up&…

如何使用LiveTargetsFinder生成实时活动主机URL列表

关于LiveTargetsFinder LiveTargetsFinder是一款功能强大的实时活动主机生成工具&#xff0c;该工具可以为广大研究人员以自动化的形式生成可供分析和测试的实时活动主机URL列表&#xff0c;并通过MassDNS、Masscan和Nmap自动过滤出无法访问的主机。 我们只需要提供一个域名作…

使用mysql的binlog进行数据恢复

1.mysql安装环境 在你本地电脑windows上建一个和生产环境一样的mysql版本 我的是 mysql5.7.43 安装教程可以自行上网搜&#xff08;这里不做介绍&#xff09; 可参考&#xff1a; 1.1安装路径 我的mysql安装路径&#xff1a; D:\mysql\mysql-5.7.43-winx64\bin * 1.2my.in…

小型超声波清洗机真的有用吗?深入测评四款优质精品,亮点多多

超声波洗眼镜机能够彻底清洁眼镜&#xff0c;去除顽固污渍和灰尘&#xff0c;其次是操作简便&#xff0c;对比传统的清洗方式用时短、效率高&#xff0c;避免了手动的麻烦&#xff0c;于是有很多眼镜使用者都选择了超声波清洗机。但由于目前超声波清洗机型号众多&#xff0c;如…

Erpnext安装

Erpnext安装 环境要求 Ubuntu 23.04 x86_64 Python 3.10.12 pip 23.0.1 node v18.16.0 npm 9.5.1 yarn 1.22.22 MariaDB 10.11.2 Redis 7.0.8 wkhtmltox 0.12.6.1 bench 5.22.6环境安装 Reids 安装 // 安装7.0.8 也可不指定版本 直接执行 sudo apt install redis-server s…

AI创作在论文写作中扮演什么角色?

近年来&#xff0c;随着科技的快速发展&#xff0c;AI已经逐渐渗透到了生活中的方方面面&#xff0c;其中也包含着学术领域。 作为学生党&#xff0c;你是否还在为期末论文&#xff0c;大学生实践报告而发愁&#xff1f; 有了这些AI写作神器&#xff0c;大学生们再也不用在期…

ubuntu多版本cuda如何指定cuda版本

本文作者&#xff1a; slience_me ubuntu多版本cuda如何指定cuda版本 文章目录 ubuntu多版本cuda如何指定cuda版本1. 关于cuda设置1.1 查看当前安装的 CUDA 版本1.2 下载并安装所需的 CUDA 版本1.3 设置环境变量1.4 验证切换1.5 安装对应的 NVIDIA 驱动程序 2. 设置环境变量2.1…

Go-知识并发控制mutex

Go-知识并发控制mutex 1. 介绍2. 数据结构2.1 Mutex 结构体2.2 Mutex 方法 3. 加锁解锁过程3.1 简单加锁3.2 加锁被阻塞3.3 简单解锁3.4 解锁并唤醒协程 4. 自旋过程4.1 什么是自旋4.2 自旋条件4.3 自旋的优势4.4 自旋的问题 5. Mutex 模式5.1 Normal 模式5.2 Starving 模式(饥…