摘 要:對實(shí)時(shí)嵌入式操作系統(tǒng)μC/OS-Ⅱ在TI公司的TMS320VC33芯片上的移植和應(yīng)用做了具體的討論和研究。在數(shù)字信號處理器(Digital Signal Processor,DSP)芯片上移植實(shí)時(shí)操作系統(tǒng),更加充分地發(fā)揮DSP的強(qiáng)大數(shù)字信號處理功能,并進(jìn)一步降低DSP軟件開發(fā)難度,提高了軟件的可靠性。介紹實(shí)時(shí)嵌入式操作系統(tǒng)μC/OS-Ⅱ,分析他在TMS320VC33上移植的具體步驟,詳細(xì)討論了任務(wù)的劃分、管理和同步,對DSP的操作系統(tǒng)移植有實(shí)際的指導(dǎo)作用和參考價(jià)值。
關(guān)鍵詞:μC/OS-Ⅱ;TMS320VC33;嵌入式系統(tǒng);導(dǎo)航
中圖分類號:TP368.1 文獻(xiàn)標(biāo)識碼:B 文章編號:1004-373X(2008)02-022-03
Application and Transplant of μC/OS-Ⅱ on TMS320VC33
HUANG Yangming,LI Tao,WU Meiping
(College of Mechatronics Engineering and Automation,National University of Defense Technology,Changsha,410073,China)
Abstract:This paper gives a detail introduction and research of the transplant of real-time embedded operation system μC/OS-Ⅱ on digital signal processor TMS320VC33 which is produced by TI Company.The transplant of real-time embedded operation system on DSP(Digital Signal Processor) enables more powerful ability on digital signal processing.Moreover,it makes the software developing easier andraises the reliablity of software.It makes an analysis on the procedure of transplant of μC/OS-II on VC33 in detail and has a discussion of partition,management and synchronization of the tasks.It is of practical instruction and reference.
Keywords:μC/OS-Ⅱ;TMS320VC33;embedded system;navigation
1 引 言
嵌入式實(shí)時(shí)操作系統(tǒng)改變了以往嵌入式編程的模式,從編寫完整的系統(tǒng)到具體的每個(gè)任務(wù),缺少實(shí)時(shí)操作系統(tǒng)支持的嵌入式編程是一種就事論事的行為,工作量繁雜且重復(fù)勞動多,可維護(hù)性差。嵌入式操作系統(tǒng)下的嵌入式軟件開發(fā)快速、高效、條理清晰,可靠性高。在這種模式下,編程人員編寫一個(gè)程序沒有必要訪問系統(tǒng)的硬件,實(shí)時(shí)嵌入式操作系統(tǒng)就像是Window操作系統(tǒng)一樣,對底層的硬件操作進(jìn)行了完好的封裝,這對于程序的設(shè)計(jì)與實(shí)現(xiàn)帶來很大的好處。在某些特殊的場合,這種模式往往還是必須的,特別是大型的軍用軟件,更應(yīng)該使用實(shí)時(shí)嵌入式操作系統(tǒng)下編程的模式。
2 μC/OS-Ⅱ介紹
μC/OS-Ⅱ是一個(gè)免費(fèi)的源碼開放的實(shí)時(shí)多任務(wù)嵌入式操作系統(tǒng),運(yùn)行在嵌入式硬件平臺上,對整個(gè)系統(tǒng)及其所操作的部件、裝置等資源進(jìn)行統(tǒng)一協(xié)調(diào)、指揮和控制。他的主要特點(diǎn)是微型化、可裁減性強(qiáng)、實(shí)時(shí)性強(qiáng)、可靠性高、移植性好。他能使嵌入式系統(tǒng)及時(shí)響應(yīng)外部事件的請求,并能及時(shí)控制所有實(shí)時(shí)設(shè)備與實(shí)時(shí)任務(wù)協(xié)調(diào)運(yùn)行,且能在一個(gè)規(guī)定的時(shí)間內(nèi)完成對事件的處理。每個(gè)任務(wù)都有對應(yīng)的惟一的優(yōu)先級來表示他獲得CPU的權(quán)力。
為了保證可靠的實(shí)時(shí)性,作為任務(wù)切換的調(diào)度器在進(jìn)行任務(wù)切換的時(shí)間是固定的,即調(diào)度器進(jìn)行任務(wù)切換所用的時(shí)間不能受應(yīng)用程序中其他因素的影響。
μC/OS-Ⅱ是用C語言和匯編語言編寫的,其中絕大部分代碼都是C語言編寫的,只有極少部分與處理器密切相關(guān)的代碼是用匯編語言編寫的。他構(gòu)思巧妙、結(jié)構(gòu)簡潔精煉、可讀性強(qiáng),同時(shí)具備了實(shí)時(shí)操作系統(tǒng)的全部功能。他的體系結(jié)構(gòu)為如圖1所示。
3 μC/OS-Ⅱ在VC33上的移植
采用TMS320VC33的高精度浮點(diǎn)DSP作為嵌入式導(dǎo)航系統(tǒng)的底層硬件能夠滿足導(dǎo)航任務(wù)的實(shí)時(shí)性,特別是實(shí)時(shí)的數(shù)據(jù)處理,大容量的數(shù)據(jù)輸入與輸出,參數(shù)解算和與外界的實(shí)時(shí)交互和通信。在移植的過程中需要修改與VC33處理器相關(guān)的操作系統(tǒng)文件代碼。
3.1 改寫文件OS_CPU.H
3.1.1 堆棧的增長方向
VC33的堆棧是從低地址向高地址增長的,所以堆棧增長方向的常數(shù)OS_STK_GROWTH應(yīng)該為1。
#define OS_STK_GROWTH1
3.1.2 臨界段宏
設(shè)置臨界區(qū)的2個(gè)宏使用VC33的開中斷和關(guān)中斷來實(shí)現(xiàn)。設(shè)置臨界段的目的是在進(jìn)入中斷程序之前的保護(hù)現(xiàn)場和退出中斷程序之后的恢復(fù)現(xiàn)場能夠安全可靠地進(jìn)行,不受其他中斷和陷阱的干擾。
#define OS_ENTER_CRITICAL() ST=2880
#define OS_EXIT_CRITICAL()ST=0880
3.1.3 定義任務(wù)切換宏
任務(wù)切換由匯編語言編寫的函數(shù)OSCtxSW()實(shí)現(xiàn),任務(wù)切換宏OS_TASK_SW()封裝了對任務(wù)切換函數(shù)OSCtxSw()的調(diào)用。
#define OS_TASK_SW()OSCtxSw()
3.1.4 定義數(shù)據(jù)類型
在VC33中,數(shù)據(jù)類型char,long,int,unsigned int,double,float都是32位數(shù)據(jù),用一個(gè)機(jī)器字表示,long double是40位擴(kuò)展精度的浮點(diǎn)數(shù),為了能夠屏蔽底層硬件,定義應(yīng)用程序中的數(shù)據(jù)類型。
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef signed char INT8S;
typedef unsigned int INT16U;
typedef signed int INT16S;
typedef unsigned long INT32U;
typedef signed long INT32S;
typedef float FLOAT
typedef double DOUBLE;
typedef long double LDOUBLE;
3.2 改寫文件OS_CPU.C
其主要是修改任務(wù)堆棧初始化程序OSTask-StkInit()。在函數(shù)中首先獲得堆棧的棧頂?shù)刂?,然后按順序壓入初始?shù)據(jù)值,任務(wù)的初始化參數(shù)值,任務(wù)的執(zhí)行代碼地址,所有的VC33處理器的寄存器壓棧。寄存器的壓棧和出棧順序必須嚴(yán)格按照相應(yīng)的順序。
void *OSTaskStkInit(
void(*task)(void*pd),void *pdata,
void *ptos,INT16U opt)
{
OS_STK *stk =(OS_STK *) ptos;
*stk = (OS_STK) pdata;
*++stk = (OS_STK) task;
*++stk = (OS_STK) 0x2000;
[XZ(90]…[XZ)]
}
3.3 任務(wù)設(shè)計(jì)
采用“分而治之”的方法,把大任務(wù)分成多個(gè)小任務(wù),充分利用微處理器的運(yùn)行時(shí)間,會大大提高系統(tǒng)的實(shí)時(shí)性,減少系統(tǒng)的等待時(shí)間。導(dǎo)航系統(tǒng)的任務(wù)可分為純慣導(dǎo)解算、組合導(dǎo)航解算、原始數(shù)據(jù)采集、衛(wèi)星數(shù)據(jù)接收、數(shù)據(jù)發(fā)送、粗對準(zhǔn)、精對準(zhǔn)等。劃分任務(wù)的同時(shí)也為任務(wù)設(shè)置合適的優(yōu)先級,關(guān)聯(lián)與任務(wù)相關(guān)的數(shù)據(jù)結(jié)構(gòu)。因?yàn)槿肿兞慷?,因此需要設(shè)置事件同步各個(gè)任務(wù)。μC/OS-Ⅱ支持最多64個(gè)任務(wù)。
3.3.1 任務(wù)創(chuàng)建
創(chuàng)建任務(wù)的工作實(shí)質(zhì)上是創(chuàng)建一個(gè)任務(wù)控制塊,創(chuàng)建的函數(shù)為OSTaskCreate()和OSTaskCreateExt(),但是必須保證在啟動任務(wù)函數(shù)OSStart()之前先創(chuàng)建一個(gè)任務(wù)。
3.3.2 任務(wù)管理
任務(wù)管理的主要工作是任務(wù)調(diào)度。根據(jù)任務(wù)就緒表中已經(jīng)就緒的任務(wù),查找出最高優(yōu)先級的任務(wù)并獲取他的任務(wù)控制塊,獲取任務(wù)控制塊后進(jìn)行舊任務(wù)堆棧保存和新任務(wù)堆棧初始化。為了正確可靠地切換任務(wù)需要把被中止任務(wù)的斷點(diǎn)指針保存到任務(wù)堆棧中,把通用寄存器的內(nèi)容保存到任務(wù)堆棧中,把被中止任務(wù)的任務(wù)堆棧指針當(dāng)前只保存到該任務(wù)的任務(wù)控制快的堆棧指針中,通過任務(wù)控制塊獲得待運(yùn)行任務(wù)的任務(wù)堆棧指針,把待運(yùn)行任務(wù)堆棧中通用寄存器的內(nèi)容恢復(fù)到CPU的通用寄存器中,使CPU獲得待運(yùn)行任務(wù)的斷點(diǎn)指針。
任務(wù)的刪除可以簡單地把要刪除的任務(wù)的任務(wù)控制塊返還給空任務(wù)控制塊列表。
3.4 任務(wù)間的同步
μC/OS-Ⅱ中任務(wù)的執(zhí)行代碼、任務(wù)堆棧和任務(wù)控制塊的關(guān)系如圖2所示:
當(dāng)前任務(wù)控制塊保存了任務(wù)的狀態(tài),記錄任務(wù)的執(zhí)行代碼地址和前后2個(gè)任務(wù)的執(zhí)行代碼地址,要實(shí)現(xiàn)任務(wù)間的同步需要使用任務(wù)間的同步機(jī)制,如信號量、消息郵箱、消息隊(duì)列和信號量集。信號量用于對共享資源使用的維護(hù),消息郵箱用于任務(wù)之間的數(shù)據(jù)傳送,消息隊(duì)列則是多個(gè)消息郵箱的集合,信號量集是多個(gè)信號量的與關(guān)系或者是或關(guān)系。在初始化階段,初始化定位完成后才執(zhí)行初始化調(diào)平及其他對準(zhǔn)工作,在初始化完成后才進(jìn)行導(dǎo)航解算工作。導(dǎo)航解算需要接收到原始采樣數(shù)據(jù)的消息郵箱,即原始的慣性傳感器數(shù)據(jù)。導(dǎo)航系統(tǒng)的任務(wù)劃分如圖3所示。
3.5 容易疏忽的細(xì)節(jié)及處理
(1) 必須使用小模式;
(2) 參數(shù)傳遞采用堆棧方式;
(3) 注意VC33的2級中斷向量模式;
(4) 系統(tǒng)時(shí)鐘可以由定時(shí)器完成,也可以外接高精度的時(shí)鐘芯片如AT-51(12.000 MHz,HC49/4H的封裝)。允許內(nèi)部鎖相環(huán)工作,系統(tǒng)時(shí)鐘為120 MHz,H1=60 MHz;
(5) μCOS-Ⅱ通過硬件中斷實(shí)現(xiàn)系統(tǒng)時(shí)鐘,并在時(shí)鐘中斷服務(wù)程序中處理與時(shí)間相關(guān)的問題。一般情況下使用硬件定時(shí)器作為時(shí)鐘中斷源,這個(gè)定時(shí)器可以是與微處理器集成的,也可以是分立的,定時(shí)中斷的頻率以10~100 Hz為宜。
4 VC33移植的步驟
如圖4所示,在VC33上的移植步驟為先在CCS4.1中建立VC33的工程,設(shè)置相關(guān)選項(xiàng),采用RAM初始化方式,匯編語言和C語言混合編程模式;然后編寫源代碼或把已有的代碼加入到工程中,編譯、仿真;然后把.OUT文件導(dǎo)入到VC33中運(yùn)行,確保程序正確無誤的前提下,執(zhí)行燒寫。
5 結(jié) 語
本文簡單介紹了嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-Ⅱ,分析了他的體系結(jié)構(gòu),對μCOS-Ⅱ在TI公司的TMS320VC33上的移植做了分析,對具體的問題做了概括。應(yīng)該指出對于TI公司6000系列的DSP產(chǎn)品,他有自帶的RTOS,則沒有必要使用μCOS-Ⅱ。而VC33是TI公司的主流浮點(diǎn)微處理器,在他上面移植實(shí)時(shí)操作系統(tǒng)有實(shí)際意義,對于軍事應(yīng)用的安全、可靠、保密、維護(hù)等都有很好的應(yīng)用前景。
參 考 文 獻(xiàn)
[1]Jean J.Labrosseu.μCOS-Ⅱ[CD2]源碼公開的實(shí)時(shí)嵌入式操作系統(tǒng)[M].北京:中國電力出版社,2001.
[2]TMS320C3x User′s Guide.ITexas Instruments,1997.
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。