zoukankan      html  css  js  c++  java
  • nordic 51822 sdk. timer 的使用

    它的源代码和头文件分别为app_timer.c/app_timer.h。这是Nordic为我们提供的虚拟定时器,这个定时器不同于硬件上的TIMER,而是基于RTC1实现的一种虚拟定时器,其将定时功能作为了一个资源进行管理,所以会有初始化、创建等过程。
        nrf51822的SDK采用封装思想,需要暴露给用户的信息都在相关模块的头文件中;为了提醒用户不去看具体实现细节,我们可以发现相关的API,比如app_timer_create()的源码部分都是没有接口描述信息的,相关使用方法需要看app_timer.h或者翻阅SDK目录下的Documentation index.html。

    1、参数宏APP_TIMER_INIT()
    这个宏用于初始化app_timer模块,这是一个参数宏,接口定义如下:
    APP_TIMER_INIT(PRESCALER, MAX_TIMERS, OP_QUEUES_SIZE, USE_SCHEDULER)
    其中PRESCALE     分频比例,填入0的话,每秒就产生32768次tick,定时最大长度为0xFFFFFF次tick,也就是说500多秒定时。
       与ucos提供的时基tick不同,本SDK的主要在定时到达的时候进入RTC中断,而不是每个TICK都进入。因此就算每秒就产生32768次tick,也不会拖慢系统性能。
    MAX_TIMERS       必须大于等于工程中创建的timer数量。
    OP_QUEUES_SIZE   操作队列的大小,具体意思看第三节。如果不作死,选择等于MAX_TIMERS就行了。
    USE_SCHEDULER    是否使用任务调度器,当前不使用

    2、参数宏APP_TIMER_TICKS()
    这个宏用于计算特定毫秒数相当于多少个tick。接口定义如下:
    APP_TIMER_TICKS(MS, PRESCALER)
    其中MS是单位为毫秒的定时时间,PRESCALER是分频比例。

    3、函数app_timer_create()
    用于创建一个timer,并获取生成timer的控制句柄。接口定义如下:
    uint32_t app_timer_create(app_timer_id_t *            p_timer_id,
                                               app_timer_mode_t            mode,
                                              app_timer_timeout_handler_t timeout_handler)
    p_timer_id   读取到创建的timer的句柄
    mode           timer的类型,其中
                        APP_TIMER_MODE_SINGLE_SHOT是单次执行
                        APP_TIMER_MODE_REPEATED是循环执行
    timeout_handler    被注册到内核的回调函数,当timer超时后就会执行。

    4、函数app_timer_start()
    设置一个timer的定时间隔和上下文参数,并启动这个timer。接口定义如下:
    uint32_t app_timer_start(app_timer_id_t timer_id, uint32_t timeout_ticks, void * p_context)
    timer_id           app_timer_create()里创建的timer句柄
    timeout_ticks       定时的tick数量,一般用APP_TIMER_TICKS()计算。
    p_context          传递给超时回调函数的参数,不能指向局部的自动变量。

    5、app_timer_stop()
    停止一个timer的运行。接口定义如下:
    uint32_t app_timer_stop(app_timer_id_t timer_id)
    timer_id           app_timer_create()里创建的timer句柄


    使用流程:
     app_timer_create();----> app_timer_start() ; ------->服务函数代码 -------->app_timer_stop()
    先初始化将Timer创建         开始Timer使之计时          计时到后执行对应服务函数                     计时停止结束

    如果是APP_TIMER_MODE_SINGLE_SHOT单次执行 ,那么服务函数执行一次后就结束了,当然了可以在服务函数中再次app_timer_start() 使之再次执行一次,当然也可再次执行N次,以便灵活使用
    如果是APP_TIMER_MODE_REPEATED循环执行,那么当app_timer_start()之后,时间到后会执行服务函数,计时再次重新开始,周而复始


    ---------------------
    作者:FreeBelieve
    来源:CSDN
    原文:https://blog.csdn.net/AA0210AA/article/details/49760565
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    CodeForces 710CMagic Odd Square(经典-奇数个奇数&偶数个偶数)
    CodeForces 710A King Moves(水题-越界问题)
    CodeForces 701C They Are Everywhere (滑动窗口)
    CodeForces 701B Cells Not Under Attack
    [补档]happiness
    [补档]王者之剑
    [补档]士兵占领
    [补档]搭配飞行员
    [补档]暑假集训D6总结
    [补档][Lydsy2017年4月月赛]抵制克苏恩
  • 原文地址:https://www.cnblogs.com/jack-hzm/p/10179062.html
Copyright © 2011-2022 走看看