用協處理器提高μC/OS-II的實時性回到頂部
XGATE的共享內存。這8 KB RAM在S12X CPU中的地址為0x2000~0x3FFF;而在XGATE中的地址為0xE000~0xFFFF,地址偏差為0xC000。因此,在XGATE使用S12X CPU的指針變量時,將指針變量的值加偏移量0xC000,就可以在XGATE程序中正常使用。
下面是XGATE程序中一個指針變量變換的代碼:

在XGATE協處理器中有8個寄存器,編譯器使用其中的R1來傳遞參數,上面程序中的R2、R3是8個寄存器中的另外2個。
2.4 XGATE與S12X CPU的通信
XGATE處理RTI中斷時先完成指針變換,然后遍歷μC/OS-II的所有任務控制塊鏈表,對需要延時的任務進行延時計數器減1操作。若無需任務調度,則XGATE回到休眠態,直到響應下一次中斷。僅當某任務延時計數器遞減到零時,該任務進入就緒態,需要任務調度時才通知S12X CPU進行任務切換。
在XGATE的中斷服務子程序中,中斷標志指令SIF用于向S12X CPU發出中斷請求。該指令置位中斷標志位,請求S12X CPU繼續響應本次RTI中斷。在XGATE的中斷服務子程序中使用SIF 指令的代碼如下(其中R5是協處理器XGATE的8個寄存器之一):

由于遍歷任務控制塊鏈表和各任務延時計數器減1的操作,以及無需任務調度的RTI中斷響應都由XGATE完成了,S12X CPU只需要響應確實需要進行任務調度的RTI中斷,使其中斷服務子程序大大簡化:

這樣,CPU的RTI中斷服務子程序所要執行的代碼是固定的,每次的運行時間也是固定值,因而μC/OS-II的實時性得到了確切的保證。
S12X CPU和XGATE的程序流程如圖2所示。

2.5 設置XGATE向量表
為了使XGATE正常響應中斷,需要把XGATE的RTI中斷服務子程序地址寫到XGATE的中斷向量表中。XGATE的中斷向量表的寫法與CPU的中斷向量寫法類似,只是XGATE的中斷子程序可代入一個參數,需要將這個參數也寫入中斷向量表。
在XGATE中斷向量表的確定位置,寫入RTI中斷服務子程序地址和參數變量,就可以使XGATE在響應RTI中斷時進入RTI中斷服務子程序。
XGATE的中斷向量表的寫法如下:

其中,OSTCBList是XGATE響應RTI中斷時需要帶入的參數,這里這個參數是μC/OS-II任務控制塊鏈表的首地址;XGATE_TableEntry是一個編譯器自定義的結構體變量類型;XGATE_VectorTable[]是XGATE的中斷向量表。寫好XGATE的中斷向量表后,使用XGATE實現μC/OS-II時鐘節拍的設置過程就完成了。
3 效果測試與分析
為了驗證用協處理器處理時鐘節拍中斷的效果,進行如下測試:在同-S12x單片機上,分別使用和不使用XGATE處理μC/OS-II的時鐘節拍中斷。在兩種情況下,建立同樣的10個任務,時鐘節拍中斷服務子程序中同樣只進行任務控制塊鏈表遍歷和延時計數器減1,不做任務調度。這樣,μC/OS-II中會有一個任務總處于就緒態并一直運行,這個一直運行的任務會通過循環計數的方法在一個I/O端口上輸出一個方波。在同樣的總線時鐘和同樣頻率的時鐘節拍下,比較兩種μC/OS-II輸出的方波周期的差別。
測試的目的是,觀察μC/OS-II的時鐘節拍中斷服務子程序的加載,對正在系統中運行的任務的影響。為了與XGATE處理任務控制塊鏈表遍歷和延時計數器減1進行對比,未使用XGATE的μC/OS-II中,S12X CPU的時鐘節拍中斷服務子程序只保留與XGATE同樣的操作。沒有任務調度,也方便對系統中正在運行的任務輸出的方波進行觀察。
在不使用的XGATE的μC/OS-II中,S12X CPU的RTI中斷的中斷服務子程序代碼如下:

以上S12X CPU中斷服務子程序共有220條指令,需運行538個周期。測試中采用了16 MHz的總線時鐘和16 kHz的μC/OS-II時鐘節拍。可以估算出,每次中斷服務子程序在S12X CPU中的運行時間為33.6 μs,約相當于62.5μs時鐘節拍的53%,即S12X CPU需要用一多半的時間響應時鐘節拍中斷,這顯然是不可取的。
在μC/OS-II中用XGATE處理時鐘節拍中斷時,當無需做任務調度時,XGATE遍歷10個任務的控制塊鏈表,執行延時計數器減1操作,共需要148條指令。由于XGATE是RISC結構的處理器,指令執行時間多為1~2個周期,故執行148條指令共需要218個周期。在32MHz時鐘頻率下,執行時間大約7μs,僅相當于62.5 μs時鐘節拍的11%。這說明,即使使用短至62.5μs的時鐘
節拍,對XGATE的占用率也并不高。
通過以上測試可看出,由單一CPU運行μC/OS-II,16 kHz的時鐘節拍導致S12X CPU頻繁地加載中斷服務子程序,占用超過了50%,嚴重地影響了任務的實時運行。故對于單一CPU,一般采用的時鐘節拍頻率不高于100 Hz,此時計時精度為±10 ms,以避免時鐘節拍中斷占用大量CPU運行時間。
在用XGATE處理μC/OS-II的時鐘節拍時,16 kHz的時鐘節拍并未對S12X CPU的任務運行產生影響,這個頻率的時鐘節拍使μC/OS-II的定時精度高于±62.5 μs。利用協處理器XGATE來處理μC/OS-II的時鐘節拍,使主CPU的執行時間為固定值,因而保證了任務的實時運行,提升了系統實時性,高頻率的時鐘節拍也提高了計時精度。
4 結 論
評論