络达开发---自定义Timer的实现

平台:AB1565M

SDK版本:V2.11.0

开发环境:windows10

络达SDK是在FreeRTOS的基础上进行构建的,因此我们可以使用该RTOS的机制来建设Timer任务。

需要在C文件中添加头文件:

#include “timers.h”
Timer的句柄为:TimerHandle_t,用来定义一个Timer对像;

相关接口函数有:

TimerHandle_t xTimerCreate( const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction );
用来建议一个Timer对象,参数xTimerPeriodInTicks在SDK中的单位为ms;uxAutoReload的参数表示超时后是否需要重新计时,否则Timer只会被触发一次;pvTimerID值可以为0,pxCallbackFunction为Timer超时后执行的回调函数,用户通常在该回调函数中处理一些周期性的任务。

#define xTimerStart( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) )
用来启动Timer;

#define xTimerStop( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP, 0U, NULL, ( xTicksToWait ) )
该函数用来停止Timer的计数,但并不会销毁timer,因此被Stop后还可以重新start。参数xTimer为执行xTimerCreate时的返回值。xTicksToWait的值通常为0。

可以发现,Timer的Start和Stop均是调用的另一个函数:xTimerGenericCommand,

函数原型为:

BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
Timer创建时,会传递一个回调函数的参数,用于当Timer超时时来触发该回调函数,其原型为:

void notify_timer_callback(TimerHandle_t expiredTimer)
参数expiredTimer为执行xTimerCreate函数的返回值,因此可以发现,该回调函数可以被多个不同的Timer同时使用,在回调函数中通过该expiredTimer可以来区分是哪个Timer超时,从而做出不同的处理。

下图为笔者创建的一个周期性的Timer,执行周期为1s:

void ble_xxx_main(void)
{

lgNotifyTimer = xTimerCreate(“notify timer”,
1000,//unit: ms
true,//uxAutoReload
NULL,
notify_timer_callback);

}

uint16_t lgTxVal=0;
static void notify_timer_callback(TimerHandle_t expiredTimer)
{
lgTxVal++;
LOG_MSGID_I(GHP,“[BLE_GHP]in timer callback function, tx:%d\r\n”, 1, lgTxVal);
//send notify
ble_ghp_write_data(g_ghp_cntx.conn_handle, &lgTxVal, 2);
}
执行的结果如下图所示:

在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值