SPARC結(jié)構(gòu)與實時內(nèi)核的移植
4.系統(tǒng)中斷
時鐘節(jié)拍
對于一個多任務(wù)系統(tǒng),時鐘節(jié)拍是必不可少的。ERC32CPU提供2個定時器,根據(jù)系統(tǒng)硬件采用的晶振源頻率,可通過設(shè)置對應(yīng)定時器控制寄存器的計數(shù)值,通過產(chǎn)生一定周期的系統(tǒng)中斷來實現(xiàn)時鐘節(jié)拍。對于時鐘節(jié)拍的處理子程序,所選內(nèi)核不同,其自帶子程序也不同。在定時中斷到來,只需將子程序入口地址添加到中斷服務(wù)子程序中即可。
中斷嵌套
當在系統(tǒng)開發(fā)中需要不同優(yōu)先級中斷,并可能發(fā)生中斷嵌套的情況時,需要在進入中斷服務(wù)子程序之前設(shè)置中斷優(yōu)先級,然后打開Trap,以允許在較長的中斷服務(wù)子程序中響應(yīng)更高優(yōu)先級的中斷。在退出中斷服務(wù)子程序后,關(guān)閉Trap,將該中斷優(yōu)先級屏蔽掉,然后退出中斷。
堆棧段
在堆棧的管理上存在堆棧幀的概念,并且每個幀的分配與產(chǎn)生都對應(yīng)一個新的窗口和一個新的線程或者中斷。根據(jù)中斷的棧結(jié)構(gòu)和線程棧結(jié)構(gòu)的不同,可在程序初始化部分分配兩個堆棧段。一個堆棧段對應(yīng)普通線程的堆棧分配和管理,一個對應(yīng)中斷棧的分配和管理。這樣在每個段中各幀的大小一致,不會在 Overflow Trap和Underflow Trap時讀寫內(nèi)存出錯??梢酝ㄟ^增加兩個變量LEVEL,SKP來協(xié)調(diào)兩個堆棧段的使用。使用兩個堆棧的中斷嵌套服務(wù)子程序流程圖如圖4。
5.總結(jié)
SPARC結(jié)構(gòu)中比較復(fù)雜的部分就是寄存器窗口的概念,但在使用中,效率也高很多。如果能了解寄存器窗口的工作原理,并能正確使用Window flush操作,在軟件設(shè)計上將會得到高的可靠性。
本文作者的創(chuàng)新點為,將能實現(xiàn)自動控制需求的小型uC/OS內(nèi)核移植到具有高可靠性SPARC結(jié)構(gòu)的ERC32 CPU。ERC32 CPU是專門針對航天應(yīng)用而設(shè)計的CPU,采用SPARC V7指令集。航天工程的控制不像消費電子的控制那么復(fù)雜,但在可靠性和實時性方面要求比較苛刻,能夠移植滿足需求的小型內(nèi)核,如uC/OS到ERC32,在工程上有很大的應(yīng)用價值。
參考文獻:
1.The SPARC Architecture Manual Version 8,SPARC International,Inc.1998.
2.Jean J.Labrosse,邵貝貝,嵌入式實時操作系統(tǒng)uC/OS-II(第二版),北京航空航天大學出版社
3.Rad.Hard 32-bit SPARC Embedded Processor User Guide, Atmel Inc.2004
4.陳繼榮,Linux操作系統(tǒng)實時性分析及改進策略,微計算機信息,2005,11期,67頁
評論