以下内容转载自安富莱电子: http://forum.armfly.com/forum.php

本章节为大家讲解 RTX 支持的定时器组,或者叫软件定时器,或者叫用户定时器均可。软件定时器的
功能比较简单,也容易掌握。 被称为定时器组是因为用户可以创建多个定时器,创建的个数是可配置的。

定时器组介绍
RTX 提供的定时器功能仅支持单次定时器,也就是用户创建了定时器并启动了定时器后,定时时间到
将不再重新执行,此定时器会被删除掉并且就执行一次,下次使用要重新的创建,这个就是单次定时器的
含义。 另外就是单次定时时间到后会调用定时器的回调函数,用户可以回调函数中加入需要执行的工程代
码。
使用此定时器组注意以下问题:
 定时器回调函数 os_tmr_call 在文件 RTX_Conf_CM.c 文件中。
 定时器回调函数 os_tmr_call 中仅支持 isr_开头的系统函数,os_开头的不支持,因为回调函数是在滴
答定时器中断中执行的。
 RTX 的定时器仅支持单次,不支持周期性执行,如果需要周期执行,需要重复创建。
 可以创建的定时器个数可以在 RTX 配置向导中设置:

定时器组 API 函数
使用如下 3 个函数可以实现 RTX 的定时器组:
 os_tmr_create
 os_tmr_kill
 os_tmr_call

函数 os_tmr_create
函数原型:
OS_ID os_tmr_create (
U16 tcnt, /* 定时器的时钟节拍个数 */
U16 info ); /* 定时器回调函数的参数,可用于区分不同的定时器 */
函数描述:
函数 os_tmr_create 用于创建定时器组并启动定时器,定时时间到后调用回调函数 os_tmr_call。函数
os_tmr_create 的第二个参数也会传递给回调函数 os_tmr_call 用于区分不同的定时器。
 第 1 个参数填写定时器的时钟节拍个数。 范围 0-0xFFFF。
 第 2 个参数填写回调函数的参数,可用于区分不同的定时器。
 定时器创建成功的话会返回定时器的 ID 标识,失败的话返回 NULL。

函数 os_tmr_call
函数原型:
void os_tmr_call (
U16 info ); /*定时器回调函数的参数,可用于区分不同的定时器*/
函数描述:
当函数 os_tmr_create 设置的定时时间到后调用回调函数 os_tmr_call。函数 os_tmr_create 的第二个参
数也会传递给回调函数 os_tmr_call 用于区分不同的定时器。此函数执行完毕后,通过函数 os_tmr_create
创建的定时器会被删除,下次使用需要重新创建。
 此函数的参数不需要用户去添加,系统会自动将函数 os_tmr_create 第二个参数赋值给这个参数。

代码练兵场:

先说一下代码的整体设计思路:

首先, 通过按键1设置定时器1,定时5s,按键2设置定时器2,定时1s。由于RTX的软件定时器不支持周期性定时,所以需要周期性定时就需要重复创建。

然后在回调函数中,如果是定时器1,就发送消息,有其他任务接收的,如果是定时器2,就打印定时器2这个字符串。

注意回调函数在(我们创建的信号量初始化为0,你就应该猜测到肯定有一个地方需要发送消息的,注意回调函数中使用RTX系统函数必须是isr开头的不能是os开头的,因为回调函数是在滴答定时器中断中执行的 ):

串口输出如下:

题外话:这样来看,还是freertos和ucos更强大一点,居然连周期性定时器都不支持。

RTX——第17章 定时器组的更多相关文章

  1. RTX——第13章 事件标志组

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 前面的章节我们已经讲解了任务管理和时间管理,从本章节开始讲解任务间的通信和同步机制.首先讲解任务间的通信 ...

  2. 【RL-TCPnet网络教程】第17章 RL-TCPnet之UDP通信

    第17章      RL-TCPnet之UDP通信 本章节为大家讲解RL-TCPnet的UDP通信实现,学习本章节前,务必要优先学习第16章UDP用户数据报协议基础知识.有了这些基础知识之后,再搞本章 ...

  3. 第17章 EXTI—外部中断/事件控制器

    第17章     EXTI—外部中断/事件控制器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

  4. 第17章 EXTI—外部中断/事件控制器—零死角玩转STM32-F429系列

    第17章     EXTI—外部中断/事件控制器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

  5. CSS3秘笈第三版涵盖HTML5学习笔记13~17章

    第13章,构建基于浮动的布局 使用的是float(浮动)属性 注:float:none值将取消所有浮动,通常只用来取消元素中已经应用的浮动. 切记:不需要给正文的div设计宽度,即使设计成固定宽度也不 ...

  6. C#高级编程9 第17章 使用VS2013-C#特性

    C#高级编程9 第17章 使用VS2013 编辑定位到 如果默认勾选了这项,请去掉勾选,因为勾选之后解决方案的目录会根据当前文件选中. 可以设置项目并行生成数 版本控制软件设置 所有文本编辑器行号显示 ...

  7. MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案

    第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...

  8. 《深入Java虚拟机学习笔记》- 第17章 异常

    <深入Java虚拟机学习笔记>- 第17章 异常

  9. JavaScript高级程序设计(第三版)学习笔记11、12、17章

    章, DOM扩展 选择符 API Selector API Level1核心方法querySelector .querySelectorAll,兼容的浏览器可以使用 Document,Element  ...

随机推荐

  1. LoadRunner脚本关联动态数据的最简单方法

    为什么要关联动态数据呢?举个例子,在对我们平台的工作流性能测试时, 在待办任务里面选择一条记录执行发送操作,LoadRunner VuGen会详细记录下来流程发送操作的细节,但在回放脚本的时候会有问题 ...

  2. Systemd 基础(转)

    Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置. 原文链接:http://www.ruanyifeng.com/blog/2016/03/systemd-tu ...

  3. Web Service-WSDL详解

    WSDL指网络服务描述语言 (Web Services Description Language), 是一种用XML编写的文档, 用于描述Web Service和函数.参数以及返回值等; 文档内规定了 ...

  4. mybatis映射文件(转)

    以下内容为转载, 格式未调整,略丑,可直接空降至: [Mybatis框架]输出映射-resultType与resultMap 有时间或看: Mybatis 3.1中 Mapper XML 文件 的学习 ...

  5. HDUOJ-----(1329)Calling Extraterrestrial Intelligence Again

    Calling Extraterrestrial Intelligence Again Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: ...

  6. supervisor+gunicorn部署python web项目

    有了Nginx,对于Tomcat没有必要详细了解. 有了supervisor,再也没有必要把一个程序设置成服务.驻留进程,supervisor真是一个相见恨晚的好工具. 在Tomcat中,所有的web ...

  7. 使用自定义模板来弥补eclipse没有新建Filter的功能

    http://yufei.iteye.com/blog/125012 eclipse插件,并没有为我们提供Filter的新建功能,为此我们不得不每次都去新建个类,然后输入那繁琐的重复代码,这完全就是浪 ...

  8. Squid调试和故障处理

    http://blog.zhdata.com/tag/squid第16章 调试和故障处理 16.1 一些通用问题 在讨论通用debug前,我先提起一些经常发生的问题. 16.1.1 “Failed t ...

  9. HDU 2604 Queuing (矩阵乘法)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  10. jQuery+ajax中,让window.open不被拦截(转)

    方法1:<input type="button" class="preview" value="预览"/>$('.preview ...