51822代码篇3

来源:互联网 发布:网络使用公约 编辑:程序博客网 时间:2024/05/16 13:45

51822的用户函数全部注册在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)


uint32_t app_timer_start(app_timer_id_t timer_id, uint32_t timeout_ticks, void * p_context)

在开始定时器任务的时候,有一个轮询的时间,51822用到一个调度函数,每次调度都会将所有

任务按照任务期望的时间(即还有多久任务就要执行了)排列。

我们能用到的大概就是creat , start ,stop这几个函数就可以了。

51822的调度函数,每次在创建新的任务,rtc中断时会被执行,调度函数timer_list_handler_sched()

获取计时器的tick值,判断是否有任务插入删除,根据任务期望值调整顺序等。程序太长就不说了。

下面有些程序技巧

1. 任务链接成链表,按照期望值排序。

2. 任务已开始参数查询按照循环队列查询。

3.#define CEIL_DIV(A, B)      \
    /*lint -save -e573 */   \
    ((((A) - 1) / (B)) + 1) \     先-1在除,然后再+1,省去if判断。

4.((p_timer->ticks_at_start - m_ticks_latest) & MAX_RTC_COUNTER_VAL)
                 <
                 (MAX_RTC_COUNTER_VAL / 2)

两数相减,结果最高位为1,代表负数,省去判断。

5. 声明指针P,将P赋值一个数组地址,P[1]即可代表数组1。

6.活用函数指针,保证程序良好的结构。


0 0
原创粉丝点击