FreeRTOS学习 -- 时间管理

在使用 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.mzph.cn/diannao/31420.shtml

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

相关文章

用Nuitka打包 Python,效果竟如此惊人!

目录 为什么选择Nuitka? Nuitka的工作原理 Nuitka的工作流程大致如下: 安装Nuitka 实战案例 示例代码 打包程序 运行可执行文件 进阶技巧 优化选项 多文件项目 打包第三方库 使用Python开发一个程序后,将Python脚本打包成独立可执…

深度神经网络——决策树的实现与剪枝

概述 决策树 是一种有用的机器学习算法,用于回归和分类任务。 “决策树”这个名字来源于这样一个事实:算法不断地将数据集划分为越来越小的部分,直到数据被划分为单个实例,然后对实例进行分类。如果您要可视化算法的结果&#xf…

Web开发的未来:深入Symfony框架的全方位指南

Symfony是一款强大的PHP框架,用于开发高性能的Web应用。它提供了一套完整的工具和API,帮助开发者构建从简单的博客到复杂的企业级应用。本文将全面介绍Symfony框架的基本概念、使用方法、主要作用以及注意事项。 一、Symfony框架简介 1. Symfony的起源 …

数据结构5---矩阵和广义表

一、矩阵的压缩存储 特殊矩阵:矩阵中很多值相同的元素并且它们的分布有一定的规律。 稀疏矩阵:矩阵中有很多零元素。压缩存储的基本思想是: (1)为多个值相同的元素只分配一个存储空间; (2)对零元素不分配存储空间。 1、特殊矩阵的压缩存储 (1)对称矩…

【机器学习】必会降维算法之:随机投影(Random Projection)

随机投影(Random Projection) 1、引言2、随机投影(Random Projection)2.1 定义2.2 核心原理2.3 应用场景2.4 实现方式2.5 算法公式2.6 代码示例 3、总结 1、引言 小屌丝:鱼哥,降维算法还没讲完呢。 小鱼&a…

浙江保融科技2025实习生校招校招笔试分享

笔试算法题一共是有4道,第一道是手搓模拟实现一个ArrayList,第二道是判断字符串是否回文,第三道是用代码实现1到2种设计模式。 目录 一.模拟实现ArrayList 二.判断字符串是否回文 ▐ 解法一 ▐ 解法二 ▐ 解法三 三.代码实现设计模式 一…

网络协议安全:TCP/IP协议栈的安全问题和解决方案

「作者简介」:北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖Web安全、系统安全等12个知识域的一百多个知识点,持续更新。 这一章节我们需要知道TCP/IP每…

大模型扫盲系列——大模型实用技术介绍_大模型底层技术是哪些

Gemma模型架构和参数计算 近期,大模型相关的技术和应用层出不穷,各个方向的论文百花齐放,底层的核心技术是大家公认的精华部分。本文从技术的角度聚焦大模型的实战经验,总结大模型从业者关注的具体方向以及相关发展,帮…

干货 | 如何进行群体DNA甲基化分析

目前,针对群体的研究基本上还是以重测序为主,基于对遗传多样性丰富的自然群体中的个体进行全基因组重测序,研究物种遗传进化多样性,结合准确的目标性状的表型数据及统计方法进行全基因组关联分析,可对动植物复杂农艺性…

MEME使用-motif分析(生物信息学工具-24)

01 背景 Motif分析是一种在生物信息学和计算生物学中广泛应用的技术,用于识别DNA、RNA或蛋白质序列中具有生物学功能的短保守序列模式(motif)。这些motif通常与特定的生物学功能相关,如DNA中的转录因子结合位点、RNA中的剪接位点…

最新Springboot小程序医院核酸检测服务系统

采用技术 最新Springboot小程序医院核酸检测服务系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员页面 医护人员管理 普通管理员管理 接种进…

稳定安全生产设备日志采集工具

免费试用下载: Gitee下载 最新版本 优势: A. 开箱即用. 解压直接运行.不需额外安装. B. 批管理设备. 设备配置均在后台管理. C. 无人值守 客户端自启动,自更新. D. 稳定安全. 架构简单,内存占用小,通过授权访问.

vector oj题 和 位运算

知识点1: lowbit(x) 简介:众所周知,lowbit()操作是算法竞赛中的高级技巧,特别是高级数据结构,线段树的核心,还有什么二进制与位运算题目,而本文就用最通俗易懂的话,来教会大家lowbi…

【MySQL系列】MySQL 字符集的演变与选择

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

[信号与系统]有关滤波器的一些知识背景

前言 最近在看FIR和IIR,本文作为前置,需要在理解这两种滤波器之前阅读。 本文内容会详细讲述一下有关滤波器的技术要求。 选频滤波器的频率响应 选频滤波器(Selective Frequency Filter)的频率响应是描述该滤波器在不同频率下…

中国企业数字化转型现状、趋势和挑战

一、来自不同行业、不同所有制的145家企业的调查 为了了解中国企业数字化转型的现状、趋势和挑战,2022年我们完成了一次在线问卷调查。 受访企业达145家,国内企业111家,占比77%(其中央企占总比例51%),民营…

【数据结构与算法(C语言)】离散事件模拟- 单链表和队列的混合实际应用

目录 1. 前言2. 流程图3. 数据结构3.1 单链表3.2 链式队列 4. 核心函数4.1 银行业务模拟 void BankSimulation()4.2 初始化 void OpenForDay()4.3 客户到达 void CustomerArrived(Event en)4.4 客户离开 void CustomerArrived(Event en) 5. 非核心函数5.1 新建客户 NewCustomer…

Redis精要

一、什么是缓存击穿、缓存穿透、缓存雪崩? 缓存穿透 【针对大量非法访问的请求,缓存中没有,直接访问DB】 缓存穿透指的查询缓存和数据库中都不存在的数据,这样每次请求直接打到数据库,就好像缓存不存在 一样。 对于系…

JVM-GC-常用调优命令和GC参数

定位问题常用命令 top:查看内存/CPU占用情况top -Hp pid: 查看进程内线程情况jsp:查看java进程情况jstack 线程pid:查看进程内线程信息,一般查看线程状态,判断是否死锁。重点观察:WAITING、BLOCKED的线程,另外查看wait…

全面的WAS存储权限管理方案,了解一下

WAS存储权限管理通常指的是对Windows Azure Storage(WAS)的存储设备进行权限控制和管理。在企业中,随着数据量的飞速增长,对存储设备的安全性、效率和成本的关注也日益增加。有效的WAS存储权限管理可以确保数据的安全性&#xff0…