章节列表

软定时器的启动与停止

2018-09-11 05:38:32 +0000 李述铜

前面介绍了软定时器模块的设计方案和思路,这节课时学习的就是具体实现这个模块。

在课程中,我们会创建一个定时器任务,两个定时器链表,同时还会借助信号量、开关中断对链表访问进行保护。

整个代码设计,感觉有点像设计一个应用,并没有深入到内核里的数据结构。

主要内容

通过前面的课程,我们了解到所有的定时器列表组织如下:

整体设计包含两部分:

  • 硬定时器列表处理。在系统时钟节拍中断处理函数中,直接对硬定时器列表进行扫描处理;
  • 软定时器列表处理。在系统时钟节拍中断处理函数中,向定时器任务发送信号(通过信号量),然后由任务对软定时器列表进行扫描和处理;

重点难点

资源保护

在该设计中,涉及两个方面的资源保护。其它任务可能调用定时器API启动/关闭定时器,这些接口会访问软/硬定时器列表。

  • 在系统节拍中断处理函数中,由于会直接访问硬定时器列表,所以需要借助开关中断对列表进行保护,防止读写冲突;
  • 对于软定时器列表,中断并不访问,但其它任务和定时器扫描任务可能会同时访问,所以可以借助信号量(或者互斥信号量)。 任务与任务之间共享资源,没有必要使用开关中断。

注意事项

常见问题