RTT时钟管理篇——阻塞延时和时基更新函数

阻塞延时和时基更新函数
阻塞延时单位是tick。

阻塞延时处理过程:将线程移除线程就绪表、置挂起状态,将线程的定时器先移除系统定时器列表,再给线程赋tick值,再将线程定时器插入到系统定时器列表中,按照升序算法进行插入,然后进行系统调度(获取最高优先级的线程切换到最高优先级线程中去)。

时基更新函数:
在systick中断中:
(1)更新全局变量时基计数值
(2)当前线程时间片检查:当前线程时间片耗尽,若有同优先级的其他线程则把当前线程放到同优先级就绪表相应位置的链表的尾部(步骤:删除当前线程,将当前线程插入到同优先级链表的尾部),注意不能清除就绪优先级组的标志位,否则一个老鼠屎就坏了一锅粥了!然后执行调度。
(3)定时器检查:检查系统定时器列表的第一个节点的延时时间是否到,没到就退出。超时了,移除挂起的链表,插入就绪链表,置就绪优先级组相应的标志位。执行调度。
所以时基更新函数不是每次进来都会切换线程的,其切换线程的条件:(1)最高优先级有多个线程,那么当前线程时间片耗尽就会切换下个平级的线程(2)线程超时函数执行恢复的线程比当前线程优先级高就切换。
不是一进时基函数就会切换线程的!!!不是一进时基函数就会切换线程的!!!不是一进时基函数就会切换线程的!!!不是一进时基函数就会切换线程的!!!不是一进时基函数就会切换线程的!!!
SYSTICk时基中断中,干两件事:(1)检查时间片:时间片耗尽,若有同优先级线程则让出CPU使用权给同优先级线程,若没有则不切换(2)超时函数处理:有2类,一类是执行用户自定义的定时器超时函数,另一类是执行线程超时函数——使线程切换到就绪状态。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值