nrf 软件定时器

       52810的软件定时器建立在一个rtc的基础上,使用一个rtc计时。rtc作为一个发动机一直在跑。rtc以tick为单位进行中断触发,每增加一个tick就来一次中断,中断到来之后就和队列预期的tick值比较,如果一样就执行时钟handler。所有的时钟都是按照压入一个钟队列内进行处理。当create一个时钟时程序只是创建了一个时钟队列的结点,保存handler等信息,此时并没有入队。当start时钟的时候,先计算出用户预期时钟执行的tick值。方法就是start是获取当前rtc的tick值加上预期执行间隔时间tick值,然后根据这个和将新建立的队列结点插入到时钟队列中。时钟队列结点的排列顺序是依照需要执行的时钟的前后时间顺序进行排列的。离执行时间约近就越靠近队列头,当前下一个需要执行的时钟结点就是队头。而stop时钟也是将某个特定的时钟结点删除。

参考http://blog.sina.com.cn/s/blog_9b2d2eb50102v8s4.html

        52810软件层面技术含量最高的地方就是调度器和定时器的写法了,nrf的调度器和定时器的写法都是使用队列开来做的。思想都是一样。队列通过app_sched_event_put函数将各种中断产生的需要处理的事件压入对中,有序压入。我们可以看到app_timer.c中有nrf 软件定时器_第1张图片

这样的宏定义处理,实际上就是如果使用调度器,那么定时产生的需要处理的事件在定时队列里触发后再放在队列中有序处理。

这样就能实现各个事件的有序处理,不会产生错乱。

你可能感兴趣的:(Nordic52810,C语言)