基于mdm9206 threadx_os的timer操作相关API介绍

大家好,今天小白给大家介绍一下,关于mdm9206 threadx_os的timer操作相关的api,希望能和大家一起交流学习。

一 . 概述

本篇介绍的接口是实现高级时间服务(ATS)计时器服务。 此计时器服务与RTOS计时器服务不同。 此计时器服务将在SOM模式下可用。这些例程是完全可重入的。 为了防止内存泄漏,无论何时完成计时器使用,都应使用qapi_Timer_Undef()API来定义计时器。 定时器回调应该做最少的处理。 时间回调实现不应包含任何互斥或RPC。

二. 相关枚举常量

enum qapi_TIMER_notify_t;                              //定时器通知类型, 定时器到期时可用通知的枚举。

enum qapi_TIMER_unit_type;                           //定时器单元类型, 可以指定定时器持续时间的单位.

.....

三. timer相关接口定义

1. qapi_Status_t qapi_Timer_Def ( qapi_TIMER_handle_t ∗ timer_handle, qapi_TIMER_define_attr_t ∗ timer_attr )

功能:在定时器模块中分配内部存储器。 然后使用timer_def_attr变量中提供的参数格式化内部存储器。 timer_handle返回给客户端,此句柄必须用于任何后续的计时器操作。

参数:

in     timer_handle               // 定时器回调函数。
in     timer_attr                    // 用于定义定时器的属性。

关于类型:

qapi_TIMER_handle_t

typedef void ∗ qapi_TIMER_handle_t                       //计时器模块提供给客户端的句柄。 客户端必须将此句柄作为令牌传递,并随后进行计时器调用。 请注意,客户端应缓存句柄。 丢失后,无法从模块中查询。

typedef struct
{
  qbool_t                   deferrable;      
  qapi_TIMER_notify_t       cb_type;        //要接收的通知类型
  void*                     sigs_func_ptr;           //指定信号对象或回调函数。
  uint32_t                  sigs_mask_data;     //指定信号掩码或回调数据
}qapi_TIMER_define_attr_t;

返回值:类型:qapi_Status_t, 返回QAPI_OK  - 调用成功,其他表示调用出错。

2. qapi_Status_t qapi_Timer_Set ( qapi_TIMER_handle_t timer_handle, qapi_TIMER_set_attr_t ∗ timer_attr )

功能:在定时器模块中分配内部存储器。 然后使用timer_def_attr变量中提供的参数格式化内部存储器。 timer_handle返回给客户端,此句柄必须用于任何后续的计时器操作。

参数:

in     timer_handle                                   // 定时器回调函数。
in     timer_attr                                        // 用于定义定时器的属性。

关于类型:

typedef struct

{

   uint64_t time;                                        //定时持续时间

   uint64_t reload;                                     //重新加载时间

   qapi_TIMER_unit_type unit;                 //指定计时器持续时间的单位

}qapi_TIMER_set_attr_t;

返回值同上。

3. qapi_Status_t qapi_Timer_Sleep ( uint64_t timeout, qapi_TIMER_unit_type unit, qbool_t non_deferrable )

功能:定时等待。 在指定时间内阻塞线程。

参数:

in : timeout                                               // 指定阻止线程的持续时间。

in : unit                                                     // 指定持续时间的单位。

in : non_deferrable                                   // TRUE =处理器(如果处于深度睡眠或电源崩溃状态)将在超时时被唤醒。
                                                                 // FALSE =处理器不会因深度睡眠或超时时断电而被唤醒。

返回值:同上。

4. qapi_Status_t qapi_Timer_Undef ( qapi_TIMER_handle_t timer_handle )

功能:取消定义的计时器。 只要计时器使用完成,就必须调用此API。 调用此API会释放定义计时器时分配的内部计时器内存。

参数:

in : timer_hanlde                                        //定时器手柄,用于取消定时器。

返回值:同上。

四. 用法示例

void timer1_handler(uint32_t data)                                                              //中断处理函数

{

     // 中断处理

}

qapi_Status_t timer_init(void)  
{
    qapi_Status_t status = QAPI_OK;
 
    memset(&timer_def_attr, 0, sizeof(timer_def_attr));
    timer_def_attr.cb_type    = QAPI_TIMER_FUNC1_CB_TYPE;                //timer_deef_attr参数初始化
    timer_def_attr.deferrable = false;
    timer_def_attr.sigs_func_ptr = timer1_handler;                                         //中断处理函数的函数指针
    timer_def_attr.sigs_mask_data = 0x11;
    status = qapi_Timer_Def(&timer_handle, &timer_def_attr);                      //为定时器资源分配内存并为后续操作返回句柄;
 
    return status;
}

qapi_Status_t timer_start(void)
{
    qapi_Status_t status = QAPI_OK;
 
    memset(&timer_set_attr, 0, sizeof(timer_set_attr));                                //timer_set_attr参数初始化
    timer_set_attr.reload = 100;
    timer_set_attr.time = 10;
    timer_set_attr.unit = QAPI_TIMER_UNIT_MSEC;
    status = qapi_Timer_Set(timer_handle, &timer_set_attr);                      //启动计时器
 
    return status;
}

int main()

{

    qapi_TIMER_handle_t timer_handle;

     .....

    while(1)

    {

       timer_init();                                                                                         //初始化定时器                                                     

       timer_start();                                                                                      //开启定时器

    }

    qapi_Timer_Undef(timer_handle);                                                        //取消定时器

}

五. 总结

本篇主要介绍了基于mdm9206平台的threadx_os的timer操作相关的api,欢迎一起交流学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值