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学习---“定时器”篇 的相关文章

  • 执行定期操作[重复]

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

    我已经在许多论坛上搜索了几天可能的解决方案 但没有运气 我在这里发布我的问题 非常感谢您的回复 主意 使用脚本控制灯光 Linux下C语言 应用场景 我有三盏灯 红 蓝 绿 脚本有控制它们的时间表 例如 从现在起10秒后 亮红灯2秒 从现在
  • 部署Java EE应用程序后执行任务

    我有一个 Java EE 应用程序 它应该在部署后启动与外部系统的同步过程 我怎样才能实现这个要求呢 下面列出了在 JavaEE 应用程序中获取生命周期回调的几种流行方法 创建 javax servlet ServletContextLis
  • Silverlight 中的计时器

    除了System Threading Timer对象之外 还有其他可以在Silverlight中使用的Timer对象吗 查看 DispatcherTimer http msdn microsoft com en us library sys
  • JavaFX 的 Swing 计时器替代方案以及线程管理差异

    使用 JavaFX 的 Swing 计时器是否安全 或者 Swing 有特殊的替代方案吗 JavaFX 和 Swing 的线程管理有什么区别 事实上我很想知道相当于摇摆计时器 SwingUtilities invokeLater and i
  • .Net 中的计时器和循环准确吗?

    在开发一个程序时 计算555定时器IC产生的脉冲的频率和脉冲宽度 通过PC并行端口传到PC 我注意到每次运行代码时它都会显示不同的值 因此我开始测试循环和计时器的准确性 我运行了以下代码 发现它们不准确 我可能是错的 如果我错了 请纠正我
  • Android:如何在触摸事件中手动实现长按?

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

    自从加入这个社区以来 我在技能和进步方面取得了突飞猛进的进步 你们都是一个巨大的帮助 我无法提供一个计时器 该计时器已在启动和停止时实现了某些参数 我要么收到错误消息 局部变量计时器可能尚未初始化 要么没有收到错误消息 但什么也没有发生 也
  • 如何使用 Python 3 正确显示倒计时日期

    我正在尝试获取将显示的倒计时 基本上就像一个世界末日时钟哈哈 有人可以帮忙吗 import os import sys import time import datetime def timer endTime datetime datet
  • Android相当于javascript的setTimeout和clearTimeout?

    setTimeout 有一个答案https stackoverflow com a 18381353 433570 https stackoverflow com a 18381353 433570 它没有提供我们是否可以像在 JavaSc
  • 如何停止抖动中的计时器?

    我在 flutter 中创建了一个计时器 一切正常 现在我不知道如何在启动计时器后关闭它 文档说你可以通过调用取消它void cancel 但我不明白其实现 我该怎么称呼它 这是正确的方法吗 static const timeout con
  • Javascript 函数与 php 一样吗?

    我在网站上使用 WebIM 提供聊天支持 我希望能够在客户端启动聊天会话时设置一个计时器 如果操作员 技术人员在 x 秒内没有响应 我希望页面重定向到客户端可以留言的另一个页面 有点像 请稍等 我们尝试联系您 这样 如果所有技术人员都太忙或
  • Fortran 内部计时例程,哪个更好? cpu_time 或 system_clock

    当对 FORTRAN 程序进行计时时 我通常只使用命令call cpu time t 然后我偶然发现call system clock count count rate count max 这似乎做了同样的事情 然而 在更加困难的庄园里 我
  • 有没有比 setTimeout 更准确的方法来创建 Javascript 计时器?

    一直困扰我的是事情的不可预测性setTimeout Javascript 中的方法是 根据我的经验 计时器在很多情况下都非常不准确 我所说的不准确是指实际延迟时间似乎或多或少有 250 500 毫秒的差异 尽管这并不是一个很长的时间 但当使
  • CakePHP 1.3:测量页面执行时间

    想要弄清楚如何测量 CakePHP 站点的总 PHP 执行时间 看起来在 1 2 中 它在调试模式下作为 HTML 注释包含在渲染的 HTML 中 但这在我的 1 3 网站上没有发生 无论如何我希望它作为一个可以输出给用户的元素 而不是一个
  • 制作一个“任意键”可中断的 Python 定时器

    我正在尝试制作一个简单的计时器 它会一直计时 直到被键盘输入中断 现在我正在使用 CTRL C 来停止计时器 但我想做一些更简单的事情 例如按空格或 Enter 或 任意键 我听说这可以通过线程模块来完成 但经过几次尝试后 我显然不知道我在
  • Tulpep PopupNotifier 无法与计时器一起使用

    using System using System Data SQLite using System Drawing using System Timers using System Windows Forms using Tulpep N
  • 如何同时订阅引发的事件和打印?

    我一直在开发一个程序 该程序有 3 个类 其中 2 个类具有以不同间隔重复的计时器 一旦计时器的一个 周期 完成 它就会引发一个带有字符串作为返回的事件 第三类订阅来自其他两个计时器类的事件并将它们打印到屏幕上 效果很好 但我的问题是它是分
  • 使用 System.Windows.Forms.Timer.Start()/Stop() 与 Enabled = true/false

    假设我们在 Net 应用程序中使用 System Windows Forms Timer 在计时器上使用 Start 和 Stop 方法与使用 Enabled 属性之间有什么有意义的区别吗 例如 如果我们希望在进行某些处理时暂停计时器 我们
  • Python:threading.timer不尊重间隔

    这是后续另一个问题 https stackoverflow com questions 32286049 python accept input while waiting 我现在有了一个解决方案 但由于不相关的原因 实现似乎没有正常运行

随机推荐

  • 使用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提供了一种软件定时器 用来快速实现一些周期性的