董延軍,曹 原,項(xiàng) 濤
(航空工業(yè)西安航空計(jì)算技術(shù)研究所,陜西 西安 710065)
早期的數(shù)字信號(hào)處理(Digital Signal Processing,DSP)資源少、功能單一、運(yùn)行的應(yīng)用程序規(guī)模小,不足以支撐也不需要運(yùn)行操作系統(tǒng),簡(jiǎn)單的控制程序就可以實(shí)現(xiàn)相應(yīng)的功能。隨著DSP硬件的功能越來越多,性能越來越強(qiáng),應(yīng)用軟件功能變得復(fù)雜、規(guī)模變大、跨DSP移植性需求變強(qiáng)烈,構(gòu)建DSP的操作系統(tǒng)就有了實(shí)際價(jià)值。Ti6678 DSP是德州儀器公司基于其KeyStone架構(gòu)的8核浮點(diǎn)型處理器,單核運(yùn)行頻率達(dá)1.2 GHz,是當(dāng)前最為先進(jìn)的DSP芯片。操作系統(tǒng)是系統(tǒng)資源的管理者,隔離了底層的硬件差異,向應(yīng)用提供了統(tǒng)一的與硬件無(wú)關(guān)的功能接口。最基本的操作系統(tǒng)應(yīng)該具有多任務(wù)、任務(wù)間通信、存儲(chǔ)管理、Cache管理等,在這之下需要基本硬件驅(qū)動(dòng)的支持,下面將從這些方面逐層介紹。
操作系統(tǒng)對(duì)于底層硬件的依賴,通過稱為板級(jí)支持包(Board Support Package,BSP)的軟件進(jìn)行了屏蔽,BSP對(duì)下實(shí)現(xiàn)各種不同硬件的具體操作,對(duì)上為操作系統(tǒng)提供統(tǒng)一的不變的操作接口,保持了操作系統(tǒng)的獨(dú)立性。一般的BSP至少包含了串口、網(wǎng)卡、時(shí)鐘、中斷控制器、Flash幾類基本驅(qū)動(dòng),串口實(shí)現(xiàn)了打印輸出,網(wǎng)卡實(shí)現(xiàn)了調(diào)試通信通路,時(shí)鐘是基本內(nèi)核定時(shí)和切換的時(shí)間基準(zhǔn)來源,中斷控制器實(shí)現(xiàn)多種中斷的管理,F(xiàn)lash實(shí)現(xiàn)程序的固化運(yùn)行。
Ti6678 DSP上實(shí)現(xiàn)最小運(yùn)行的操作系統(tǒng)(Operating system,OS),可在這個(gè)基礎(chǔ)上進(jìn)一步簡(jiǎn)化,調(diào)試環(huán)境借助Ti公司提供的控制及計(jì)算系統(tǒng)(Control and Computation System,CCS),該集成開發(fā)環(huán)境可以實(shí)現(xiàn)編輯、編譯、調(diào)試、運(yùn)行等功能,具體嵌入式操作系統(tǒng)配套的開發(fā)環(huán)境和編譯器可以暫不實(shí)現(xiàn)集成;調(diào)試輸出顯示借助CCS的虛擬終端、串口驅(qū)動(dòng)可以暫不實(shí)現(xiàn);調(diào)試使用USB接口的仿真器,網(wǎng)絡(luò)驅(qū)動(dòng)可以暫不實(shí)現(xiàn);固化借助CCS自帶的燒寫方式,F(xiàn)lash驅(qū)動(dòng)可以暫不實(shí)現(xiàn)。所以只剩下中斷控制器和時(shí)鐘兩種驅(qū)動(dòng)的實(shí)現(xiàn)。以Ti公司提供的庫(kù)函數(shù)(Chip Support Library,CSL)庫(kù)為基礎(chǔ)進(jìn)行改造,封裝為符合具體操作系統(tǒng)要求的操作接口,進(jìn)行中斷控制器的初始化,中斷線使能、時(shí)鐘初始化、時(shí)鐘中斷處理等,為最小化OS的運(yùn)行提供基本運(yùn)行環(huán)境支持,并提供維持運(yùn)行的基準(zhǔn)時(shí)鐘來源。
完整的嵌入式操作系統(tǒng)在基本內(nèi)核的基礎(chǔ)上,具有任務(wù)管理、任務(wù)間通信、內(nèi)存管理、中斷/異常管理、定時(shí)器管理以及調(diào)試代理、通信管理、加載程序管理等功能,還可能包括多核間通信組件[1],如圖1所示。
圖1 操作系統(tǒng)基本功能模塊
在完整的操作系統(tǒng)功能上進(jìn)行裁剪,定義出最小操作系統(tǒng)的功能,主要實(shí)現(xiàn)包括圖1中陰影部分所示的5個(gè)基本單元任務(wù)管理、任務(wù)間通信、內(nèi)存管理、時(shí)鐘/定時(shí)器管理、運(yùn)行時(shí)庫(kù)。這些模塊包含了以下主要功能:
(1)多任務(wù)支持,支持多任務(wù)并發(fā)執(zhí)行,實(shí)現(xiàn)對(duì)任務(wù)的創(chuàng)建、啟動(dòng)、掛起、刪除等操作。(2)任務(wù)調(diào)度,通過優(yōu)先級(jí)可搶占調(diào)度機(jī)制實(shí)現(xiàn)系統(tǒng)的強(qiáng)實(shí)時(shí)性;對(duì)同等優(yōu)先級(jí)任務(wù)可通過時(shí)間片輪轉(zhuǎn)實(shí)現(xiàn)均衡調(diào)度。(3)任務(wù)通信,提供機(jī)制實(shí)現(xiàn)任務(wù)間基本的通信、同步和互斥操作,包括信號(hào)量、環(huán)形緩沖。(4)內(nèi)存管理,DSP的內(nèi)存本身較小,整個(gè)系統(tǒng)運(yùn)行在實(shí)地址模式,所以內(nèi)存管理主要是管理有限的堆棧資源,使得應(yīng)用可以使用標(biāo)準(zhǔn)C接口申請(qǐng)、釋放內(nèi)存。(5)服務(wù)接口,是應(yīng)用感知操作系統(tǒng)存在媒介,提供覆蓋操作系統(tǒng)各類功能的服務(wù)接口,使得應(yīng)用程序保持獨(dú)立性,方便維護(hù)及跨平臺(tái)移植。
任務(wù)切換上下文是操作系統(tǒng)適配特定硬件平臺(tái)重要的方面,也是最小系統(tǒng)運(yùn)行最為關(guān)鍵的工作。任務(wù)上下文的結(jié)構(gòu)該如何設(shè)計(jì)、切換的時(shí)候應(yīng)該切換哪些內(nèi)容,都是跟硬件設(shè)計(jì)密切相關(guān)的問題。在Ti6678中,一共包含了A,B兩組各32個(gè)32位的通用寄存器,可以作為64個(gè)32位寄存器,也可以作為32個(gè)64位寄存器,還可以作為16個(gè)128位的寄存器,在文章設(shè)計(jì)的最小系統(tǒng)中將把寄存器看作是64個(gè)獨(dú)立的32位寄存器使用。根據(jù)TiC6000的EABI手冊(cè),其中A4,A5作為函數(shù)調(diào)用時(shí)的第一個(gè)參數(shù)寄存器,同時(shí)作為函數(shù)返回值寄存器,B4,B5為第二個(gè)參數(shù)寄存器,依次類推,最多可以有傳遞10個(gè)參數(shù)。B15作為棧指針SP,據(jù)此設(shè)計(jì)出任務(wù)上下文切換結(jié)構(gòu),如下所示:
將所有的通用寄存器在上下文切換的時(shí)候都將進(jìn)行保存和恢復(fù),保存前驅(qū)任務(wù)上下文到任務(wù)棧中,恢復(fù)后繼任務(wù)的上下文到當(dāng)前的運(yùn)行棧。
嵌入式系統(tǒng)最終總是要固化運(yùn)行的,也是最小化OS適配設(shè)計(jì)的最后一步。為了最小化設(shè)計(jì)和具體工作,采用CCS環(huán)境中的norwriter6678燒寫工程,將最終的操作系統(tǒng)及應(yīng)用為一體的映像文件燒寫到外部存儲(chǔ)器接口(External Memory Interface,EMIF)的SPI Flash中,然后撥動(dòng)跳線至SPI啟動(dòng),重新上電完成啟動(dòng)。要特別注意,CCS中編譯生成的.out文件是不能直接燒寫的,必須進(jìn)行一系列的轉(zhuǎn)化生成符合要求的.dat文件[2],才可以燒寫到SPI Flash中。映像文件轉(zhuǎn)換過程如圖2所示。
圖2 映像文件的轉(zhuǎn)換過程
按照上述最小化系統(tǒng)的設(shè)計(jì),以μC/OS-II操作系統(tǒng)[3]為例,進(jìn)行功能裁剪和上下文切換的實(shí)現(xiàn)。在CCS6.1.3的環(huán)境下,將CSL、裁剪后的操作系統(tǒng)源碼編譯成靜態(tài)庫(kù)。然后創(chuàng)建main工程,構(gòu)建TASK1,TASK2兩個(gè)測(cè)試任務(wù),進(jìn)行編譯、鏈接,形成可下載運(yùn)行的main.out,使用Ti官方的6678EVM開發(fā)板,Blackhawk XDS560v2-USB仿真器進(jìn)行加載調(diào)試,在CCS的模擬終端循環(huán)打印信息,運(yùn)行結(jié)果如圖3所示,在固化方式運(yùn)行時(shí)借助LED點(diǎn)燈的方式表明兩個(gè)任務(wù)運(yùn)行正常。
圖3 測(cè)試運(yùn)行結(jié)果
Ti6678是當(dāng)前性能最高、使用最為廣泛的DSP,也是能夠較好支撐操作系統(tǒng)運(yùn)行的主流DSP?,F(xiàn)在已經(jīng)出現(xiàn)多款DSP操作系統(tǒng),包括SYS/BIOS,Oseck等,要么比較龐大,要么價(jià)格昂貴,文章所述的最小化OS的設(shè)計(jì)與實(shí)現(xiàn),可實(shí)現(xiàn)調(diào)試和固化運(yùn)行,是一個(gè)完整的過程,適合于小型系統(tǒng)構(gòu)建者和DSP學(xué)習(xí)人員參考和實(shí)踐,規(guī)模小,運(yùn)行穩(wěn)定,出現(xiàn)問題易排查。