zoukankan      html  css  js  c++  java
  • RTX——第17章 定时器组

    以下内容转载自安富莱电子: 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更强大一点,居然连周期性定时器都不支持。

     

  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/7347994.html
Copyright © 2011-2022 走看看