Telink BLE 软定时器设置

Timer 初始化

void blt_soft_timer_init(void);

Timer 的查询处理

void blt_soft_timer_process(int type);

添加定时器任务

typedef int (*blt_timer_callback_t)(void);
int blt_soft_timer_add(blt_timer_callback_t func, u32 interval_us);
  1. func 为定期执⾏的任务函数;
  2. interval_us 为定时时间,单位为 us。

定时任务 func 的 int 返回值三种处理⽅法为:

  1. 返回值⼩于 0,则该任务执⾏后被⾃动删除。可以使⽤这个特性来控制定时器执⾏的次数。
  2. 返回 0,则⼀直使⽤之前的 interval_us 来定时。
  3. 返回值⼤于 0,则使⽤该返回值做为新的定时周期,单位 us。

代码实现中,当定时器数量超过最⼤值时,添加失败。每添加⼀个新的 timer 任务,必须重新做⼀下 排序,以确保定时器任务在任何时候都是按照时间排序的,时间上最近的那个 timer 任务对应的 index 为 0。

删除定时器任务

除了使⽤上⾯返回值⼩于 0 来⾃动删除定时器任务,还可以使⽤下⾯ API 来指定要删除的定时器任务。

int blt_soft_timer_delete(blt_timer_callback_t func);

Demo

int gpio_test0(void)
{
    DBG_CHN3_TOGGLE;
    return 0;
}

int gpio_test1(void)
{
    DBG_CHN4_TOGGLE;
    static u8 flg = 0;
    flg = !flg;
    if(flg){
        return 7000;
    }
    else{
        return 17000;
    }
}

int gpio_test2(void)
{
    DBG_CHN5_TOGGLE;
    if(clock_time_exceed(0, 5000000)){
        //return -1;
        blt_soft_timer_delete(&gpio_test2);
    }
    return 0;
}

int gpio_test3(void)
{
    DBG_CHN6_TOGGLE;
    return 0;
}

初始化

blt_soft_timer_init();
blt_soft_timer_add(&gpio_test0, 23000);
blt_soft_timer_add(&gpio_test1, 7000);
blt_soft_timer_add(&gpio_test2, 13000);
blt_soft_timer_add(&gpio_test3, 27000);

定义了 4 个任务,这 4 个定时任务各有特点:

  1. gpio_test0 每 23ms toggle ⼀次。
  2. gpio_test1 使⽤了 7ms/17ms 两个时间的切换定时。
  3. gpio_test2 在 5s 后将⾃⼰删掉。代码中有两种⽅式都可以实现这个功能:⼀是调⽤ blt_soft_timer_delete (&gpio_test2);⼆是 return -1。
  4. gpio_test3 每 27ms toggle ⼀次。

总结:

从上面的demo可以看出,定时器的一次性周期性的决定性因素是回调函数的返回值

  • 返回值为0,是周期性的定时器
  • 返回值为大于0,是周期性的T(返回值的大小)的定时器
  • 返回值为小于0,是一次性的定时器,并同时删除定时器

厂商的定义:

我们预定:blt soft timer 的使⽤场景为定时时间⼤于 5ms、且对于时间误差要求不是特别⾼的情况。

⽬前设计上最多同时⽀持 4 个 timer 运⾏,实际 user 可以修改下⾯的宏来实现更多的或者更少的 timer:

#define MAX_TIMER_NUM 4 //timer max number

参考文档:

泰凌 B85m BLE Single Connection

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值