SysTick的優(yōu)先級配置,常見的有兩種說法,這兩種說法完全相反,依次說一下各自特點。
第一種:
SysTick中斷優(yōu)先級應該設置為高。
在使用實時操作系統(tǒng)時,把內核“心跳”定時器的優(yōu)先級調高一些。持這種觀點的人認為優(yōu)先級調高了,使SysTick的ISR能搶占其它ISR,保證系統(tǒng)心跳的準確性,心跳準確了,才能保證實時性,SysTick的ISR一般都很短小精悍,對被搶占的ISR影響較小。
我們來看一下優(yōu)先級高了會怎么樣,如下圖所示,SysTick ISR能夠搶占用戶ISR,SysTick依然按照設定值規(guī)律性中斷。這種情況下對于線程時間片輪轉的方式比較準確,輪轉實時性好,基于SysTick的軟定時器也比較精準。但是如果用戶中斷有很多種,而且很頻繁,那么SysTick會不停的打斷用戶中斷,不斷的出棧入棧,影響用戶中斷的實時性。所以說SysTick中斷優(yōu)先級調高了有好處也有壞處。
第二種:
SysTick中斷優(yōu)先級應該設置為低。
持這種觀點的人認為優(yōu)先級設置為低了,用戶中斷能夠搶占SysTick,用戶中斷更準確,能快速響應內外部中斷。我們來看一下優(yōu)先級調低了有什么現(xiàn)象。
如下圖所示,在執(zhí)行用戶ISR的時候,SysTick中斷到來,由于優(yōu)先級低,只能掛起等待,用戶ISR結束后立即運行,最終導致兩次“心跳”間隔大,比如軟定時器等。從圖中可以看出,由于于SysTick有自動裝載功能,沒有影響下一次中斷。
上圖中雖然某次心跳間隔大了,但是沒有“丟步”。如果用戶中斷種類多且很頻繁,如下圖所示,SysTick少進入一次中斷,這種情況不準確了。SysTick中斷不準了,線程時間片輪轉就不準了,基于SysTick的軟定時器也不準了。很多人人認為那可是系統(tǒng)時鐘呀,怎么能夠不準確,那還能叫實時操作系統(tǒng)嗎?仔細想一下就知道了,優(yōu)先級調低了,用戶中斷不受SysTick中斷影響,保障了用戶中斷,就是保障實時性!
總結:
前面的文章中分析了(參見下面擴展閱讀),在實時操作系統(tǒng)中,實時性最高的是中斷程序,要及時的處理內外部中斷,線程內執(zhí)行的代碼因為需要任務調度等,實時性差一些。
如果SysTick優(yōu)先級調高,影響了用戶中斷,再加上線程調度本身也不準確,那么整個操作系統(tǒng)沒有準確的地方了。因此我個人同意第二種說法,SysTick優(yōu)先級降低,保障用戶中斷的實時性,線程的實時性放到第二位,這樣才能體現(xiàn)出實時特性。
-
操作系統(tǒng)
+關注
關注
37文章
6738瀏覽量
123190 -
中斷
+關注
關注
5文章
895瀏覽量
41394 -
ISR
+關注
關注
0文章
38瀏覽量
14405 -
線程
+關注
關注
0文章
504瀏覽量
19651 -
Systick
+關注
關注
0文章
62瀏覽量
13043
發(fā)布評論請先 登錄
相關推薦
評論