新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用協(xié)處理器提高μC/OS-II的實(shí)時(shí)性回到頂部

用協(xié)處理器提高μC/OS-II的實(shí)時(shí)性回到頂部

作者: 時(shí)間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

XGATE的共享內(nèi)存。這8 KB RAM在S12X CPU中的地址為0x2000~0x3FFF;而在XGATE中的地址為0xE000~0xFFFF,地址偏差為0xC000。因此,在XGATE使用S12X CPU的指針變量時(shí),將指針變量的值加偏移量0xC000,就可以在XGATE程序中正常使用。

下面是XGATE程序中一個(gè)指針變量變換的代碼:

在XGATE協(xié)處理器中有8個(gè)寄存器,編譯器使用其中的R1來傳遞參數(shù),上面程序中的R2、R3是8個(gè)寄存器中的另外2個(gè)。

2.4 XGATE與S12X CPU的通信

XGATE處理RTI中斷時(shí)先完成指針變換,然后遍歷μC/OS-II的所有任務(wù)控制塊鏈表,對(duì)需要延時(shí)的任務(wù)進(jìn)行延時(shí)計(jì)數(shù)器減1操作。若無需任務(wù)調(diào)度,則XGATE回到休眠態(tài),直到響應(yīng)下一次中斷。僅當(dāng)某任務(wù)延時(shí)計(jì)數(shù)器遞減到零時(shí),該任務(wù)進(jìn)入就緒態(tài),需要任務(wù)調(diào)度時(shí)才通知S12X CPU進(jìn)行任務(wù)切換。

在XGATE的中斷服務(wù)子程序中,中斷標(biāo)志指令SIF用于向S12X CPU發(fā)出中斷請(qǐng)求。該指令置位中斷標(biāo)志位,請(qǐng)求S12X CPU繼續(xù)響應(yīng)本次RTI中斷。在XGATE的中斷服務(wù)子程序中使用SIF 指令的代碼如下(其中R5是協(xié)處理器XGATE的8個(gè)寄存器之一):

由于遍歷任務(wù)控制塊鏈表和各任務(wù)延時(shí)計(jì)數(shù)器減1的操作,以及無需任務(wù)調(diào)度的RTI中斷響應(yīng)都由XGATE完成了,S12X CPU只需要響應(yīng)確實(shí)需要進(jìn)行任務(wù)調(diào)度的RTI中斷,使其中斷服務(wù)子程序大大簡(jiǎn)化:

這樣,CPU的RTI中斷服務(wù)子程序所要執(zhí)行的代碼是固定的,每次的運(yùn)行時(shí)間也是固定值,因而μC/OS-II的實(shí)時(shí)性得到了確切的保證。

S12X CPU和XGATE的程序流程如圖2所示。

2.5 設(shè)置XGATE向量表

為了使XGATE正常響應(yīng)中斷,需要把XGATE的RTI中斷服務(wù)子程序地址寫到XGATE的中斷向量表中。XGATE的中斷向量表的寫法與CPU的中斷向量寫法類似,只是XGATE的中斷子程序可代入一個(gè)參數(shù),需要將這個(gè)參數(shù)也寫入中斷向量表。

在XGATE中斷向量表的確定位置,寫入RTI中斷服務(wù)子程序地址和參數(shù)變量,就可以使XGATE在響應(yīng)RTI中斷時(shí)進(jìn)入RTI中斷服務(wù)子程序。

XGATE的中斷向量表的寫法如下:

其中,OSTCBList是XGATE響應(yīng)RTI中斷時(shí)需要帶入的參數(shù),這里這個(gè)參數(shù)是μC/OS-II任務(wù)控制塊鏈表的首地址;XGATE_TableEntry是一個(gè)編譯器自定義的結(jié)構(gòu)體變量類型;XGATE_VectorTable[]是XGATE的中斷向量表。寫好XGATE的中斷向量表后,使用XGATE實(shí)現(xiàn)μC/OS-II時(shí)鐘節(jié)拍的設(shè)置過程就完成了。

3 效果測(cè)試與分析

為了驗(yàn)證用協(xié)處理器處理時(shí)鐘節(jié)拍中斷的效果,進(jìn)行如下測(cè)試:在同-S12x單片機(jī)上,分別使用和不使用XGATE處理μC/OS-II的時(shí)鐘節(jié)拍中斷。在兩種情況下,建立同樣的10個(gè)任務(wù),時(shí)鐘節(jié)拍中斷服務(wù)子程序中同樣只進(jìn)行任務(wù)控制塊鏈表遍歷和延時(shí)計(jì)數(shù)器減1,不做任務(wù)調(diào)度。這樣,μC/OS-II中會(huì)有一個(gè)任務(wù)總處于就緒態(tài)并一直運(yùn)行,這個(gè)一直運(yùn)行的任務(wù)會(huì)通過循環(huán)計(jì)數(shù)的方法在一個(gè)I/O端口上輸出一個(gè)方波。在同樣的總線時(shí)鐘和同樣頻率的時(shí)鐘節(jié)拍下,比較兩種μC/OS-II輸出的方波周期的差別。

測(cè)試的目的是,觀察μC/OS-II的時(shí)鐘節(jié)拍中斷服務(wù)子程序的加載,對(duì)正在系統(tǒng)中運(yùn)行的任務(wù)的影響。為了與XGATE處理任務(wù)控制塊鏈表遍歷和延時(shí)計(jì)數(shù)器減1進(jìn)行對(duì)比,未使用XGATE的μC/OS-II中,S12X CPU的時(shí)鐘節(jié)拍中斷服務(wù)子程序只保留與XGATE同樣的操作。沒有任務(wù)調(diào)度,也方便對(duì)系統(tǒng)中正在運(yùn)行的任務(wù)輸出的方波進(jìn)行觀察。

在不使用的XGATE的μC/OS-II中,S12X CPU的RTI中斷的中斷服務(wù)子程序代碼如下:

以上S12X CPU中斷服務(wù)子程序共有220條指令,需運(yùn)行538個(gè)周期。測(cè)試中采用了16 MHz的總線時(shí)鐘和16 kHz的μC/OS-II時(shí)鐘節(jié)拍??梢怨浪愠觯看沃袛喾?wù)子程序在S12X CPU中的運(yùn)行時(shí)間為33.6 μs,約相當(dāng)于62.5μs時(shí)鐘節(jié)拍的53%,即S12X CPU需要用一多半的時(shí)間響應(yīng)時(shí)鐘節(jié)拍中斷,這顯然是不可取的。

在μC/OS-II中用XGATE處理時(shí)鐘節(jié)拍中斷時(shí),當(dāng)無需做任務(wù)調(diào)度時(shí),XGATE遍歷10個(gè)任務(wù)的控制塊鏈表,執(zhí)行延時(shí)計(jì)數(shù)器減1操作,共需要148條指令。由于XGATE是RISC結(jié)構(gòu)的處理器,指令執(zhí)行時(shí)間多為1~2個(gè)周期,故執(zhí)行148條指令共需要218個(gè)周期。在32MHz時(shí)鐘頻率下,執(zhí)行時(shí)間大約7μs,僅相當(dāng)于62.5 μs時(shí)鐘節(jié)拍的11%。這說明,即使使用短至62.5μs的時(shí)鐘

節(jié)拍,對(duì)XGATE的占用率也并不高。

通過以上測(cè)試可看出,由單一CPU運(yùn)行μC/OS-II,16 kHz的時(shí)鐘節(jié)拍導(dǎo)致S12X CPU頻繁地加載中斷服務(wù)子程序,占用超過了50%,嚴(yán)重地影響了任務(wù)的實(shí)時(shí)運(yùn)行。故對(duì)于單一CPU,一般采用的時(shí)鐘節(jié)拍頻率不高于100 Hz,此時(shí)計(jì)時(shí)精度為±10 ms,以避免時(shí)鐘節(jié)拍中斷占用大量CPU運(yùn)行時(shí)間。

在用XGATE處理μC/OS-II的時(shí)鐘節(jié)拍時(shí),16 kHz的時(shí)鐘節(jié)拍并未對(duì)S12X CPU的任務(wù)運(yùn)行產(chǎn)生影響,這個(gè)頻率的時(shí)鐘節(jié)拍使μC/OS-II的定時(shí)精度高于±62.5 μs。利用協(xié)處理器XGATE來處理μC/OS-II的時(shí)鐘節(jié)拍,使主CPU的執(zhí)行時(shí)間為固定值,因而保證了任務(wù)的實(shí)時(shí)運(yùn)行,提升了系統(tǒng)實(shí)時(shí)性,高頻率的時(shí)鐘節(jié)拍也提高了計(jì)時(shí)精度。

4 結(jié) 論



關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉