大家好,今天小白给大家介绍一下,关于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,欢迎一起交流学习。