FreeRTOS学习---“定时器”篇

2023-11-16

总目录

FreeRTOS学习—“任务”篇
FreeRTOS学习—“消息队列”篇
FreeRTOS学习—“信号量”篇
FreeRTOS学习—“事件组”篇
FreeRTOS学习—“定时器”篇

FreeRTOS提供了一种软件定时器,用来快速实现一些周期性的操作,并且节约了硬件定时器。不过尽量还是不要做过多的操作,以免影响其他定时器的准度。
在这里插入图片描述

demo

演示了定时器定义,回调函数会每一秒进入一次,等到10次之后,定时器被销毁。

TimerHandle_t xTimerUser; // 定义句柄

// 定时器回调函数格式
void vTimerCallback( TimerHandle_t xTimer )
{
	// do something no block
	// 获取溢出次数
	static unsigned int ulCount =0;
	
	ulCount= ( unsigned int ) pvTimerGetTimerID( xTimer );
	// 累积溢出次数
	++ulCount; 
	// 更新溢出次数
	vTimerSetTimerID( xTimer, ( void * ) ulCount );
	printf("get timer ulCount:%d\n",ulCount);
	if(ulCount == 10) 
	{
		// 停止定时器
		xTimerStop( xTimer, 0 );
	}
}

void app_main()
{
	// 申请定时器, 配置
	xTimerUser = xTimerCreate("Timer's name",/*调试用, 系统不用*/
								1000 / portTICK_PERIOD_MS, /*定时溢出周期, 单位是任务节拍数*/  
								pdTRUE,/*是否自动重载, 此处设置周期性执行*/
								( void * ) 0,/*记录定时器溢出次数, 初始化零, 用户自己设置*/
								vTimerCallback);/*回调函数*/

	if( xTimerUser != NULL ) 
	{
		// 启动定时器, 0 表示不阻塞
		xTimerStart( xTimerUser, 0 );
	}
}

主要函数

定时器创建

TimerHandle_t xTimerCreate(	const char * const pcTimerName,	
								const TickType_t xTimerPeriodInTicks,
								const UBaseType_t uxAutoReload,
								void * const pvTimerID,
								TimerCallbackFunction_t pxCallbackFunction )
参数 含义
pcTimerName 定时器名称
xTimerPeriodInTicks 定时器触发周期,以tick为单位,可以通过使用portTICK_PERIOD_MS配置毫秒
uxAutoReload 定时器超时溢出后,自动重载
pvTimerID 定时器ID
pxCallbackFunction 定时器溢出后,执行的回调函数
返回值 NULL 表示没有足够的堆空间分配给定时器而导致创建失败。
非 NULL 值表示定时器创建成功。此返回值应当保存下来,以作为操作此定时器的句柄。

定时器启动

BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait )
参数 含义
xTimer 定时器句柄,由xTimerCreate创建。
xTicksToWait 阻塞时间,表示经过阻塞多久之后,定时器启动消息被发往定时器消息队列,如果在scheduler启动之前调用xTimerStart,该值会被忽略。
返回值 启动成功返回pdPASS;启动失败返回pdFAIL

定时器停止

BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait )
参数 含义
xTimer 定时器句柄,由xTimerCreate创建。
xTicksToWait 阻塞时间,表示经过阻塞多久之后,定时器停止消息被发往定时器消息队列,如果在scheduler启动之前调用xTimerStart,该值会被忽略。
返回值 停止成功返回pdPASS;停止失败返回pdFAIL

定时器删除

BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait )
参数 含义
xTimer 定时器句柄,由xTimerCreate创建。
xTicksToWait 阻塞时间,表示经过阻塞多久之后,定时器删除消息被发往定时器消息队列,如果在scheduler启动之前调用xTimerStart,该值会被忽略。
返回值 删除成功返回pdPASS;删除失败返回pdFAIL

定时器修改周期

BaseType_t xTimerChangePeriod( 	TimerHandle_t xTimer,
								TickType_t xNewPeriod,
								TickType_t xTicksToWait )
参数 含义
xTimer 定时器句柄,由xTimerCreate创建。
xNewPeriod 新的周期,以tick为单位,可以通过使用portTICK_PERIOD_MS配置毫秒
xTicksToWait 阻塞时间,表示经过阻塞多久之后,定时器修改消息被发往定时器消息队列,如果在scheduler启动之前调用xTimerStart,该值会被忽略。
返回值 修改成功返回pdPASS;修改失败返回pdFAIL

定时器重启

BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait )
参数 含义
xTimer 定时器句柄,由xTimerCreate创建。
xTicksToWait 阻塞时间,表示经过阻塞多久之后,定时器重启消息被发往定时器消息队列,如果在scheduler启动之前调用xTimerStart,该值会被忽略。
返回值 重启成功返回pdPASS;重启失败返回pdFAIL

还有一系列的中断中使用的函数
在这里插入图片描述
FreeRTOS学习—“任务”篇
FreeRTOS学习—“消息队列”篇
FreeRTOS学习—“信号量”篇
FreeRTOS学习—“事件组”篇
FreeRTOS学习—“定时器”篇

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS学习---“定时器”篇 的相关文章

  • 使用 Timer 在 C# 中更新 UI

    我正在努力使我的应用程序从串行端口读取数据并更新 UI 上的仪表更加高效 我想就处理 UI 更改的代码寻求一些建议 我设置了一个计时器来检查发送到 COM 端口的数据 另一个计时器则使用从 COM 端口接收到的变量更新 UI 基本上发生的事
  • JSP/Servlet 中的倒计时器

    我正在使用 servlet jsp 开发在线考试 我需要在问题页面添加一个倒计时 hh mm ss 计时器 该计时器将结束考试并重定向到结果页面 除了计时器功能之外 我已经完成了所有其他功能 有人可以为此提供一些帮助吗 Thanks 您是否
  • 使用时间戳计数器获取时间戳

    我使用下面的代码来获取处理器的时钟周期 unsigned long long rdtsc void unsigned hi lo asm volatile rdtsc a lo d hi return unsigned long long
  • 如何创建批处理文件计时器来全天执行/调用另一个批处理

    如何创建一个批处理文件计时器来在一天中执行 调用另一个批处理 也许在给定的时间运行但不在周末运行 必须在系统上运行也可以 cmd在xp server 2003上运行 对于脚本的计时器部分 我强烈建议使用 echo echo Waiting
  • Android:在调用函数之前实现 1 秒间隔定时器

    我试图在重置游戏 resetGame 之前引入 1 秒暂停 按下按钮后 bAnswer1 文本等于 ansewrArray 0 应用程序强制在 newQuestionTimer 中设置的 1 秒延迟后关闭 import java util
  • 如何在运行时更改android中睡眠/定时器线程的延迟?

    我试图做的是每次计数器变为 5 的倍数时减少计时器延迟 但是 一旦代码进入 if 块 它就停止递增计时器 我不明白发生了什么事 这是代码 thread new Thread public void run try if count 5 0
  • 当 Activity 不在前面时,暂停 Android 中的 CountDownTimer

    我有一个使用从 10 开始倒数的 CountDownTimer 的活动 当该活动不再处于焦点时 例如用户接到电话或其他情况 如何暂停该计时器 然后在用户返回时恢复计时器活动 这可能吗 我会向 onTick 处理程序添加一些内容 以保存类中计
  • Processing.js 定时器

    我正在使用Processing js 开发一个应用程序 在绘图循环的每一步 我都会将帧数增加一frame 我想知道已经过去了多少时间 目前为了获取时间 知道我的应用程序设置为以 60FPS 运行 我确实这样做 time frame 60 但
  • 定时器可以提早吗?

    显然 System Threading Timer 回调应该会延迟一点 然而 可以提前调用吗 例如 如果您启动秒表并安排计时器在 1000 毫秒内运行回调 那么秒表是否有可能在回调中显示 999 或者我们可以指望它必须显示 1000 或更多
  • 执行定期操作[重复]

    这个问题在这里已经有答案了 我正在 Windows 上工作 我想执行一个函数foo 每 10 秒一次 我该怎么做呢 在 的最后foo 创建一个Timer哪个调用foo 10 秒后自动 因为 Timer创建一个新的thread打电话foo 您
  • C 中的非阻塞睡眠定时器

    我正在为 Windows 寻找一个很好的 C 语言非阻塞睡眠定时器 目前我正在使用sleep 10 这当然是一个阻塞计时器 另外 我希望它不消耗系统资源 就像我的睡眠计时器一样 它不使用任何我满意的 CPU 或系统资源 那么 我可以使用的最
  • 如何清除ID未知的Interval?

    假设有人 邪恶 给我们设置了一个计时器setInterval 但我们不知道它的 ID 我们没有 setInterval 返回的对象的引用 也没有它的值 function setInterval function console log pw
  • JavaFX 的 Swing 计时器替代方案以及线程管理差异

    使用 JavaFX 的 Swing 计时器是否安全 或者 Swing 有特殊的替代方案吗 JavaFX 和 Swing 的线程管理有什么区别 事实上我很想知道相当于摇摆计时器 SwingUtilities invokeLater and i
  • 如果 TimerTask 的执行时间超过指定的时间间隔,会发生什么情况?

    使用时 Timer schedule TimerTask task long delay long period 即固定延迟执行 如果指定的情况会发生什么TimerTask s run 方法花费的时间长于period去完成 两个并发有可能吗
  • .Net 中的计时器和循环准确吗?

    在开发一个程序时 计算555定时器IC产生的脉冲的频率和脉冲宽度 通过PC并行端口传到PC 我注意到每次运行代码时它都会显示不同的值 因此我开始测试循环和计时器的准确性 我运行了以下代码 发现它们不准确 我可能是错的 如果我错了 请纠正我
  • Android 计时器/计时器任务导致我的应用程序崩溃?

    只是在我的 mainActivity 的 onCreate 中测试一个简单的代码块 Timer timer2 new Timer TimerTask testing new TimerTask public void run Toast m
  • Android:如何在触摸事件中手动实现长按?

    简短版本 我想要一种方法来在 onTouchEvent 上启动基于时间的计数器 并测试在响应之前是否已经过了一定的时间 作为手动 LongTouch 检测 解释 我有一个自定义 imageView 可以通过两根手指滑动滑入 滑出屏幕 我想向
  • 线程睡眠阻止我的 Swing 应用程序执行

    我的应用程序发生的事情是有道理的 但我不知道如何修复它 以下是我的应用程序功能的简要描述 计时器窗口应显示在屏幕右下角并显示实时时间 一小时后 它应该执行一些操作 我还没有决定该操作 我面临的问题是定时器 java当我刷新实时计时器的秒数时
  • C#,System.Timers.Timer,每 15 分钟运行一次,与系统时钟同步

    如何让 System Timers Timer 每 15 分钟触发一次与系统时钟同步的事件 换句话说 我希望它恰好在 xx 00 xx 15 xx 30 xx 45 触发 其中 xx 表示任何小时 您可以让它每秒流逝一次 并检查当前时间是否
  • 如何在我的 Lua 脚本中添加“睡眠”或“等待”?

    我正在尝试通过更改一天中的时间来为游戏制作一个简单的脚本 但我想快速完成 这就是我要说的 function disco hour minute setTime 1 0 SLEEP setTime 2 0 SLEEP setTime 3 0

随机推荐

  • 使用Cartool工具包分析EEG源成像

    使用Cartool工具包分析EEG源成像 1 基本要求 1 1 EEG预处理 EEG Pre processing 1 2 时间过滤 Temporal Filtering 1 3 下采样 降低采样率 Down Sampling 1 4 电极
  • MAC OS更新系统后IDEA中的SVN报错无法使用

    IntelliJ IDEA无法正常使用SVN 报Cannot run program svn in directory XXXX XXXX XXXX XXX error 2错误 使用Mac的小伙伴 在更新Mac系统的之后 通过idea操作s
  • 充电灯 低电灯共用一个 LED

    充电灯 低电灯共用一个 LED 电路 产品经理提出一个需求 因为结构只有一个灯孔 需要实现充电 低电指示灯共用一个LED 考虑到电源开关关闭时充电要亮 所以用电池正极作为 LED阳极 LED 阴极由两条线路控制 一个是充电IC的充电指示脚
  • 玩转 SpringBoot 监控统计(SQL监控、慢SQL记录、Spring监控、去广告)

    关注后回复 进群 拉你进程序员交流群 作者 架构师的小跟班 来源 blog csdn net weixin 44730681 article details 107944048 基本概念 Druid 是Java语言中最好的数据库连接池 虽然
  • NXP imx6ull uboot-imx-rel_imx_4.1.15无法从SD卡加载内核

    我imx6ull使用的是正点原子的alpha开发板 我将我的SD卡分成了两个分区 第一个分区格式化为fat 用来存放zImage和dtb 第二个分区格式化为EXT4格式 这个分区作为根文件系统 遇到的问题是 我编译好kernel后 尝试通过
  • PLC程序的基本组成和编程语言

    一般情况 PLC程序由主程序 多个子程序 多个中断服务程序等三部分组成 这三部分被组织在一起 经过编译可以下载到PLC中运行 如下图就是一个简单的例子 MAIN是主程序 SBR0是子程序 可以被MAIN调用 运行在一个循环中 中断服务程序独
  • 如何解决Visual Studio2019登录微软账户登录不上的问题

    试用期30天过了 这个问题困扰了我好几天 几乎把网络上所有的问题都搜索遍了 下面总结了网上常用的解决方案还有登录方式 登陆不上微软账户排除自己密码账户没有输入正确以外 是网络的问题 我没有用WiFi 用的是手机的热点连接的 方法1 如果挂V
  • IDEA技巧-快速编写一个String类型的JSON对象

    1 先编写一个String类型空值对象 String strJson 2 将光标放在 中间 3 Alt Enter调出Inject language or reference视图界面 回车选中Inject language or refer
  • 数据在OSI七层模型中的名字 数据帧、数据包、数据报以及数据段

    数据帧 数据包 数据报以及数据段 OSI参考模型的各层传输的数据和控制信息具有多种格式 常用的信息格式包括帧 数据包 数据报 段 消息 元素和数据单元 信息交换发生在对等OSI层之间 在源端机中每一层把控制信息附加到数据中 而目的机器的每一
  • 多种系统如何安装并启动Redis

    1 Windows 系统下安装 首先坏消息是reids官网没有提供windows版的redis 但好消息是微软的开源技术团队在gtihub上开发和维护了windows版的redis 具体如何使用参考下这片文章 windows系统本地安装re
  • Struts2 重点总结 (2)

    国际化 资源文件和资源包 要用Struts实现国际化和本地化 首先要定义资源文件的名称 这个文件会包含用默认语言编写的会在程序中出现的所有消息 这些消息以 键 值 对的形式存储 如下 error validation localtion T
  • 软测入门(十)Jmeter接口测试基础

    接口测试流程 接口测试的流程 分析接口文档和需求 编写接口测试计划 5W1H 编写接口测试用例 接口测试执行 输出接口测试报告 接口测试分类 Web接口测试 服务器接口测试 模块接口测试 单元测试 接口测试的要点 数据是否正常 参数类型错误
  • 人工智能基础部分16-神经网络与GPU加速训练的原理与应用

    大家好 我是微学AI 今天给大家介绍一下人工智能基础部分16 神经网络与GPU加速训练的原理与应用 在深度学习领域 神经网络已经成为了一种流行的 表现优秀的技术 然而 随着神经网络的规模越来越大 训练神经网络所需的时间和计算资源也在快速增长
  • Ajax传json对象(jQuery)

    Ajax传json对象 相信很多小伙伴想要通过Ajax传输json数据给后端 本来直接发送一个data JSON stringify obj 就可以了 但是发现后端的请求参数中有一个参数需要int类型 这个时候就需要用到对象了 封装对象 首
  • 知识蒸馏基础及Bert蒸馏模型

    为了提高模型准确率 我们习惯用复杂的模型 网络层次深 参数量大 甚至会选用多个模型集成的模型 这就导致我们需要大量的计算资源以及庞大的数据集去支撑这个 大 模型 但是 在部署服务时 就会发现这种 大 模型推理速度慢 耗费内存 显存高 这时候
  • 如何在pycharm中使用配置好的virtualenv环境

    使用pycharm自动建立虚拟环境 file gt setting gt interpreter 选择添加环境 添加虚拟环境 这里选择不勾选第一个选项框 之后 将 requirements txt 文件放到虚拟目录 venv 下 pycha
  • MODIS数据的简介和下载(一)——MODIS数据简介

    借最近上课实习上机内容 来介绍MODIS数据相关方面内容 本部分主要包括了MODIS数据的简介和下载的问题 本篇是第一部分 MODIS的简介 主要分为三个部分 1 MODIS传感器简介及参数 2 MODIS产品及命名规则 3 MODIS的典
  • 【马士兵】Python基础--19

    Python基础 19 文章目录 Python基础 19 with语句 os模块的常用函数 os path模块的常用方法 with语句 with open logo png rb as src file with open copy2log
  • JS组件Bootstrap实现弹出框和提示框效果代码

    前言 对于Web开发人员 弹出框和提示框的使用肯定不会陌生 比如常见的表格新增和编辑功能 一般常见的主要有两种处理方式 行内编辑和弹出框编辑 在增加用户体验方面 弹出框和提示框起着重要的作用 如果你的系统有一个友好的弹出提示框 自然能给用户
  • FreeRTOS学习---“定时器”篇

    总目录 FreeRTOS学习 任务 篇 FreeRTOS学习 消息队列 篇 FreeRTOS学习 信号量 篇 FreeRTOS学习 事件组 篇 FreeRTOS学习 定时器 篇 FreeRTOS提供了一种软件定时器 用来快速实现一些周期性的