有些操作系统在“心跳”中断(systick中断)里进行线程切换,如果处理器正在执行一个isr,此时systick异常到来,且systick优先级高,抢占了正在运行的用户isr,systick isr是不能进行线程切换的,因为systick isr运行完后要返回上一层用户isr,此时仍然处于异常模式,不能进入线程模式,强行进入线程模式会导致fault异常。如下图,延时到了第二个systick isr才线程切换,实时性降低。在这种情况下,systick isr中切换任务,这会导致任务切换延后。
极端的情况下,systick中断和用户中断步调一致,会导致任务切换严重滞后。如下图所示:
有朋友说了,既然systick中断抢占了用户中断不能调度线程,那么在用户isr即将退出时进行调度就好了呀,确实比上面的情况要好一些,但这就需要在所有中断的末尾都要检查是否需要切换,增加用户中断程序复杂度。
也有朋友说了,把systick中断优先级调到最低是不是也可以呢,当然可以,调低了优先级,避免了嵌套,就算用户中断期间产生systick中断,但是systick中断不能运行,用户中断结束后,systick中断“咬尾”,这样是没问题的,可是有一点systick的优先级就无法提高了。
鉴于上述原因,我们想到了pendsv异常,这个异常比较特殊,可以理解为一个软中断(软异常),代码中操作寄存器就可以触发此中断,我们把它的优先级调整到最低,当systick isr抢占了用户中断后,发现需要任务调度,就设置寄存器触发pendsv异常,因为它优先级最低,不能响应,等到用户中断执行完立即自动响应,进行任务切换,如下图所示。
一般情况下:
1、pendsv中断优先级设置为最低,用于线程调度。
2、systick中断优先级根据自己需求设置,如果想让心跳更准确就调高一些,如果想让用户中断相应更迅速就调低一些。
3、可以和pendsv一样都设置为最低。
ETC优势实现分析
1月手机热销榜,vivX9颜值与速度相当!
开关电源厂家-开关电源是什么?
PXMA声发射信号调理装置
超声波传感器助力自动化灌装包装线提速增效
RTOS为什么用PendSV进行线程调度?
RAM在单片机中用途是什么?
获取Telegram的用户IP地址
百度飞桨与华为麒麟芯片正式达成深度合作
美盛科技推出25.5W以太网络PD模块AHPD-12
高端家电下一步该如何持续发展,卡萨帝给出新方向
亚威股份:携手韩国LIS 开展精密激光业务战略合作
华为Freebuds 3耳机评测 音质效果在同品类产品中是佼佼者
努比亚Z20搭载骁龙855 Plus平台屏占比超过了100%
“高清灯泡”了解一下?
依托移动云的工业云市场,利用云计算的算力提升工业应用的价值
三星平板S7骁龙865加持_配置性能抢先看
亚马逊发明了一项手部识别支付的专利
智能汽车除了无人驾驶,还有你不知道的黑科技
分布式设备数据云平台通过组态监控实现智能管理