ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

FreeRTOS总结

FreeRTOS总结 1. 任务同步和通信使用两套API的原因1.1 临界段区分任务和中断的原因任务临界段和中断临界段区分开主要是因为两种临界段嵌套使用时会存在一些差异。(1)进入任务临界段和中断临界段类似,都是屏蔽除少数几个最高优先级之外的所有中断,保证紧急代码的执行不被打断。进入任务临界段会记录临界段嵌套计数,进入中断临界段会保存外层临界段屏蔽中断的优先级。(2)退出任务临界段时会检查临界段嵌套计数,只有在退出最外层临界段时才会取消中断屏蔽,并且是取消所有中断屏蔽,不再屏蔽任何中断,退出内层临界段并不会取消中断屏蔽。中断是用于执行紧急代码的,应该尽量不要屏蔽,除非必要。中断屏蔽是低优先级中断为了紧急代码的执行不被高优先级中断打断而设置的,任何中断的优先级都比任务高,能够进入任务临界段,说明进入任务临界段前没有中断产生,也即进入任务临界段前没有中断被屏蔽,所以退出任务临界段时可以直接取消所有中断屏蔽。(3)退出中断临界段时要恢复原来屏蔽的中断优先级。中断临界段主要用于保证低优先级中断中被临界段保护的部分代码段不被某些高优先级中断打断。不同优先级的中断进入临界段时可能会设置不同的屏蔽优先级。中断临界段嵌套使用时,内层临界段退出时,外层临界段可能尚未退出,若直接取消所有中断屏蔽,其保护的代码段有可能会被某些本应被屏蔽的高优先级中断打断。1.2 信号量、互斥量、消息队列等系统调用区分任务和中断的原因系统调用可能会导致高优先级任务进入就绪态,从而引起任务上下文切换,在中断代码中可能会因多次执行系统调用而导致多次切换任务上下文。在中断中多次切换任务上下文太浪费时间,在多次系统调用后只执行一次任务上下文切换可以减少中断执行时间。2. 任务之间同步和通信有几种方式?2.1 保护代码片段不被打断有几种方式?这几种方式有什么区别?三种方式:临界段、关任务调度器、挂起所有任务。临界段屏蔽部分低优先级中断,关闭调度器只关闭任务调度中断,挂起所有任务不关闭任何中断。(1)临界段屏蔽部分低优先级的中断,任务调度中断也被屏蔽了,所以任务和低优先级的中断不会打断被保护的代码片段。临界段屏蔽的中断优先级在配置FreeRTOS时确定,之后就固定不变。(2)关闭调度器通过关闭任务调度中断实现,不会再产生任务切换中断,调用关闭调度器系统调用的当前任务仍可继续运行。(3)挂起所有任务只是增加调度器挂起计数,并不关闭任何中断,依然会产生任务调度中断,但是因为调度器挂起计数大于0,任务调度器不工作。调用挂起所有任务系统调用的当前任务仍可继续运行。挂起所有任务后再恢复所有任务时调度器挂起次数减为0时才真正重新开启任务调度。挂起所有任务和挂起单个任务的区别,挂起所有任务是给任务调度器设置挂起计数,挂起单个任务是给单个任务设置挂起标志阻止调度器调度这个任务。(4)临界段保护代码片段与信号量等其它方式有什么区别?进入临界段是屏蔽部分中断,所以进入临界段一定能够成功,且不会阻塞。使用信号量等方式保护代码片段,获取信号量时可能会阻塞,且不一定能成功获取信号量,需要
返回列表