lwip中定时器工作原理

1、数据结构表示

        超时定时器是按单链表结构进行组织的,链表按超时的时间从小到大进行排序,list的头指向超时时间最小的节点

2、数据结构的维护(增删改查)

2.1新定时器的插入(生产者调用该接口)

通过下面接口向队列中插入新的定时器

void sys_timeout(u32_t msecs, sys_timeout_handler handler, void *arg);

2.2 超时的检测(消费者调用该接口)

通过sys_check_timeouts()接口检测是否有超时的定时器,裸机应用程序在外部周期性调用该函数,每次进来检查定时器链表上定时最短的定时器是否到期,因为链表是有序的,头指针指向的节点即为时间最短的定时器。如果没有到期的定时器,直接退出该函数,否则,执行该定时器回调函数,并从链表上删除该定时器,然后继续检查下一个定时器,直到没有一个定时器到期退出

2.3 队列的初始化

周期定时器节点表示

周期定时器数组

调用void sys_timeouts_init(void)接口初始化lwip_cyclic_timers数组,这里需要注意的是超时处理函数lwip_cyclic_timer,该接口在定时器超时的时候会被调用,而且它通过调用自身(第258行)将新的超时定时器加入链表,从而实现周期定时器功能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容