3-1RT-Thread时钟管理

作者 : admin 本文共888个字,预计阅读时间需要3分钟 发布时间: 2024-06-10 共5人阅读

这里写自定义目录标题

3-1RT-Thread时钟管理插图

3-1RT-Thread时钟管理插图(1)
时钟节拍是RT thread操作系统的最小时间单位。

3-1RT-Thread时钟管理插图(2)
3-1RT-Thread时钟管理插图(3)
3-1RT-Thread时钟管理插图(4)
第一个功能,rt tick值自动加1,在RT thread当中通过RT_USING_SMP定义了多核和单核的场景。第二个功能,检查当前线程的时间片,首先获取当前线程,将当前线程的剩余thread值自动减1。如果线程的剩余thread值等于0,说明当前线程时间片已经超时。此时修改线程的状态为RT_THREAD_STAT_YIELD。
此状态下会使线程让出处理器的使用,然后将thread in need tick重新复制给remaining tick,同时将当前线程设置为已有的状态,然后执行后续的线程调度。最后一个功能是检查定时器的链表。

3-1RT-Thread时钟管理插图(5)
3-1RT-Thread时钟管理插图(6)
3-1RT-Thread时钟管理插图(7)

3-1RT-Thread时钟管理插图(8)
3-1RT-Thread时钟管理插图(9)
3-1RT-Thread时钟管理插图(10)
这三个定时器分别加上系统当前的时间20,从小到大排序链接到RT_time_list链表中,形成如图所示的定时器链表结构。每次时钟节拍中断时,RT_tick会自动+1并和链表中的定时器超时时间进行比较。如果rt_timer ≥ time_eout,则说明该定时器超时处理对应的回调函数。

如果创建了新的定时器,如在上图链表的基础上新创建了一个定时器timer#4,它的超时时间是330,则timer#4会根据超时时间放置在tim#2和tim#3之间。而周期性的定时器会在它再次启动时被加入定时器列表。
3-1RT-Thread时钟管理插图(11)
定时器在启动时会按超时时间排序插入到链表中,如果从头开始遍历链表效率会很低。当使用定时器数量比较大时,每次新创建了一个定时器并启动时会有很大的开销。

内核使用跳表算法来加速遍历速度,在rtdef.h头文件当中,通过artie mer skip list level来配置跳表的层数默认为一定时器原始有序单链表如下,如果想要查找39原始链表,需要遍历3、7、13、18、39,经过五次跳转后可以查找到结果。

那么从列表中将某些元素抽取出来加一级索引,一级索引指向了原始链表。同样查找39跳表中只需先遍历3、18、39就可以找到最终。

3-1RT-Thread时钟管理插图(12)

3-1RT-Thread时钟管理插图(13)
即定时器的类型可以是(0x0)一次性的,也可以是(0x2)周期性的。同时可以或上硬件定时器模式或软件定时器模式。

3-1RT-Thread时钟管理插图(14)
3-1RT-Thread时钟管理插图(15)
3-1RT-Thread时钟管理插图(16)
RT thread当中常用的两个延时函数,其精度都为毫秒级。
3-1RT-Thread时钟管理插图(17)

本站无任何商业行为
个人在线分享 » 3-1RT-Thread时钟管理
E-->