摘 要:VxWorks是專門為實(shí)時(shí)嵌入式系統(tǒng)設(shè)計(jì)開發(fā)的操作系統(tǒng),為編程人員提供了高效的實(shí)時(shí)多任務(wù)調(diào)度、中斷管理、實(shí)時(shí)的系統(tǒng)資源以及實(shí)時(shí)的任務(wù)間通信。提出了一種以嵌入式微處理器為核心,移植VxWorks操作系統(tǒng)的方法。通過對VxWorks輸入/輸出系統(tǒng)的分析以及中斷處理和異常處理過程的研究,設(shè)計(jì)了相應(yīng)的外圍器件,成功實(shí)現(xiàn)了VxWorks操作系統(tǒng)的移植。
關(guān)鍵詞:VxWorks;嵌入式微處理器;實(shí)時(shí)
中圖分類號:TP303文獻(xiàn)標(biāo)志碼:A
文章編號:1001-3695(2007)06-0262-03
VxWorks是美國Wind River System公司(即WRS)開發(fā)的一個(gè)嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)。WRS 公司組建于1981年,是一個(gè)專門從事實(shí)時(shí)操作系統(tǒng)開發(fā)與生產(chǎn)的軟件公司,該公司在實(shí)時(shí)操作系統(tǒng)領(lǐng)域被世界公認(rèn)為是最具有領(lǐng)導(dǎo)地位的公司。VxWorks是一個(gè)運(yùn)行在目標(biāo)機(jī)上的高性能、可裁減的嵌入式實(shí)時(shí)操作系統(tǒng),以其良好的可靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中。主要商業(yè)用戶包括Cisco System、Bay Networks、3Com、Fore System、HP、Lucent、Qualcomm等著名公司,應(yīng)用實(shí)例包括著名的火星探測車、愛國者導(dǎo)彈等[1]。
西北工業(yè)大學(xué)航空微電子中心基于自主研發(fā)的32位RISC結(jié)構(gòu)高性能嵌入式微處理器,通過對VxWorks輸入輸出系統(tǒng)的分析以及中斷處理和異常處理過程的研究,設(shè)計(jì)了必要的外圍器件,實(shí)現(xiàn)了VxWorks操作系統(tǒng)的移植。
本文對VxWorks操作系統(tǒng)進(jìn)行了分析,對嵌入式微處理器及其外圍器件進(jìn)行了介紹,并分析了移植后的VxWorks操作系統(tǒng)的輸入輸出函數(shù),討論了移植后的VxWorks操作系統(tǒng)的中斷處理過程和異常處理過程。
1 嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks
VxWorks操作系統(tǒng)是一個(gè)具有可伸縮、可裁減、高可靠性,同時(shí)適用于所有流行CPU平臺的實(shí)時(shí)操作系統(tǒng)[2]。
根據(jù)面向嵌入式系統(tǒng)的需求,對VxWorks操作系統(tǒng)進(jìn)行了裁減,裁減后的主要組件包括BSP(Board Support Package)、微內(nèi)核Wind及輸入/輸出系統(tǒng)。
BSP:VxWorks采用模塊化設(shè)計(jì)方法,把依賴于硬件環(huán)境的函數(shù)和信息分離出來,放入稱為BSP的組件中,保證BSP可以向上層軟件提供一致的接口。BSP中包括硬件環(huán)境中CPU的初始化及系統(tǒng)各項(xiàng)硬件資源的安裝和配置,包括RAM、Clock、中斷控制器等。
Wind:微內(nèi)核Wind是WindRiver公司自行開發(fā)的一種嵌入式操作系統(tǒng)內(nèi)核,該內(nèi)核具有標(biāo)準(zhǔn)的嵌入式實(shí)時(shí)操作系統(tǒng)的基本特征,如可裁減性、搶占式任務(wù)調(diào)度、異步事件響應(yīng)等。
輸入/輸出:VxWorks的輸入/輸出系統(tǒng)提供了操作系統(tǒng)與各硬件設(shè)備的接口,主要包括字符設(shè)備、串行設(shè)備、塊設(shè)備、虛擬設(shè)備(管道、Socket)、監(jiān)控設(shè)備和網(wǎng)絡(luò)設(shè)備等。
在嵌入式系統(tǒng)中運(yùn)行VxWorks操作系統(tǒng)使用的是一種壓縮的ROM駐留型鏡像,編譯后生成的壓縮型的VxWorks鏡像文件被固化在一片F(xiàn)lash中。當(dāng)系統(tǒng)上電后,首先將VxWorks鏡像文件經(jīng)解壓后拷貝到內(nèi)存中,然后再運(yùn)行。這種啟動方式,在上電后的開始階段,程序由于需要解壓縮,系統(tǒng)的啟動時(shí)間較長,但是這種VxWorks的鏡像文件比非壓縮型的VxWorks鏡像文件占用的空間要少得多(接近一半)。
整個(gè)系統(tǒng)的啟動流程如圖1所示。
圖1 VxWorks 操作系統(tǒng)啟動流程
具體的執(zhí)行過程是:
在Usrinit函數(shù)中首先調(diào)用sysStart函數(shù),清除BSS(0填充),設(shè)置向量表基址。然后執(zhí)行cacheLibInit函數(shù),加入對Cache的支持。執(zhí)行excVecInit函數(shù)初始化異常處理向量。執(zhí)行sysHwInit函數(shù),進(jìn)行硬件初始化,調(diào)用sysSerialHwInit函數(shù)(它對串口進(jìn)行了初始化)。調(diào)用usrCacheEnable函數(shù),使用戶指令和數(shù)據(jù)高速緩存可用。調(diào)用usrKernelInit函數(shù),對操作系統(tǒng)的核進(jìn)行初始化,使usrroot函數(shù)為根任務(wù),并使之執(zhí)行。
在usrroot函數(shù)中首先調(diào)用usrKernelCoreInit函數(shù),進(jìn)行操作系統(tǒng)核的主要部分初始化(信號量、消息隊(duì)列、“看門狗”定時(shí)器、以及調(diào)用taskHookInit函數(shù)等)。然后調(diào)用memInit函數(shù),進(jìn)行內(nèi)存管理器的初始化。調(diào)用usrMmuInit函數(shù),初始化MMU。調(diào)用sysClkInit函數(shù),進(jìn)行系統(tǒng)時(shí)鐘的初始化。調(diào)用selectInit函數(shù)進(jìn)行select library的初始化。調(diào)用usrIosCoreInit函數(shù),對輸入/輸出系統(tǒng)的核心部分進(jìn)行初始化。調(diào)用usrBootLineParse函數(shù),解析Boot Device的配置信息,主要是與網(wǎng)絡(luò)相關(guān)的信息,如IP地址等。調(diào)用iosInit函數(shù),對輸入/輸出系統(tǒng)進(jìn)行初始化。調(diào)用ttyDrv函數(shù),初始化并安裝串行設(shè)備。調(diào)用usrSerialInit函數(shù),創(chuàng)建與串行通道對應(yīng)的tty設(shè)備。調(diào)用usrKernelExtraInit函數(shù),對操作系統(tǒng)的其他部分進(jìn)行初始化(如hash table、symbol table及signal(信號)。調(diào)用usrIosExtraIni函數(shù),對輸入/輸出其他部分進(jìn)行初始化。調(diào)用selTaskDeleteHookAdd函數(shù)支持對任務(wù)的管理。調(diào)用usrToolsInit函數(shù),對software development tools的初始化。調(diào)用cplusCtorsLink函數(shù)、usrCplusLibInit函數(shù)、cplusDemanglerInit函數(shù),它們是和支持C++編譯相關(guān)的函數(shù)。調(diào)用usrAppInit函數(shù),此函數(shù)存放于usrAppInit.c中,當(dāng)需要編寫應(yīng)用程序時(shí),有關(guān)啟動應(yīng)用程序的代碼放在usrAppInit函數(shù)中。
待usrroot函數(shù)中的所有函數(shù)執(zhí)行完后再將被掛起的Shell重新激活,進(jìn)入交互式的Shell中,等待用戶的命令輸入。
2 嵌入式微處理器及外圍器件
如圖2所示,根據(jù)面向嵌入式系統(tǒng)的需求,以嵌入式微處理器為核心,設(shè)計(jì)了包括控制外部SRAM、串行設(shè)備、Flash的存儲控制單元,用于中斷處理的中斷控制器,與微處理器連接的微處理器接口單元,用于總控的中央控制單元,保存配置信息的配置寄存器單元等[3]。
圖2 嵌入式系統(tǒng)總體結(jié)構(gòu)圖
3 VxWorks輸入/輸出系統(tǒng)
在嵌入式系統(tǒng)中主要通過串行口來進(jìn)行人機(jī)交互,所以使用的VxWorks操作系統(tǒng)的輸入/輸出系統(tǒng)就主要是指串行設(shè)備。
在VxWorks中,串行設(shè)備是一種特殊的設(shè)備,它既是VxWorks下的輸入/輸出系統(tǒng),同時(shí)又是目標(biāo)機(jī)的調(diào)試接口;它既可以工作在中斷模式,又可以工作在輪詢模式下。除此之外,串行設(shè)備驅(qū)動程序還要實(shí)現(xiàn)一些與設(shè)備無關(guān)的功能:將回車符輸出映射成回車換行輸出;提供命令行編輯能力;對輸入/輸出的數(shù)據(jù)進(jìn)行緩沖等。
串行設(shè)備的驅(qū)動程序不是安裝在驅(qū)動程序列表中,而是通過回調(diào)方式掛在終端虛擬設(shè)備上。由于驅(qū)動程序的安裝方式不同,系統(tǒng)也就不會將串行設(shè)備驅(qū)動程序掛在設(shè)備列表上,即輸入/輸出系統(tǒng)是看不到串行設(shè)備的。
在輸入/輸出系統(tǒng)方面,終端虛擬設(shè)備作為一個(gè)字符型設(shè)備存在,它將自身的入口點(diǎn)函數(shù)掛在輸入/輸出系統(tǒng)上,創(chuàng)建設(shè)備描述符并將其加入到設(shè)備列表中。當(dāng)用戶有輸入/輸出請求到達(dá)輸入/輸出系統(tǒng)時(shí),該系統(tǒng)會調(diào)用終端虛擬設(shè)備相應(yīng)的函數(shù)響應(yīng)請求。同時(shí),終端虛擬設(shè)備管理了緩沖區(qū)的互斥,提供了任務(wù)的同步操作。對于該系統(tǒng),與之打交道的設(shè)備是終端虛擬設(shè)備。
另一方面,終端虛擬設(shè)備負(fù)責(zé)與實(shí)際的設(shè)備驅(qū)動程序交換信息。通過設(shè)備驅(qū)動程序提供的回調(diào)函數(shù)及必要的數(shù)據(jù)結(jié)構(gòu),終端虛擬設(shè)備將系統(tǒng)的輸入/輸出請求做相應(yīng)的處理后,傳遞給設(shè)備驅(qū)動程序,由設(shè)備驅(qū)動程序來完成實(shí)際的輸入/輸出操作。
對于串行設(shè)備輸入,串行設(shè)備會發(fā)送一個(gè)輸入請求,等待讀中斷響應(yīng)后將數(shù)據(jù)寫入輸入緩沖區(qū),一旦緩沖區(qū)不為空時(shí),則用戶程序或者操作系統(tǒng)的讀函數(shù)(在數(shù)據(jù)準(zhǔn)備好以前已經(jīng)處于等待狀態(tài))會調(diào)用終端虛擬設(shè)備讀函數(shù),將數(shù)據(jù)從輸入緩沖區(qū)拷貝到用戶緩沖區(qū),對于用戶而言這是讀串行設(shè)備的過程。
對于串行設(shè)備輸出,用戶程序或者操作系統(tǒng)往串行設(shè)備寫數(shù)據(jù)時(shí)會調(diào)用寫函數(shù)而發(fā)出輸出請求, 輸入/輸出系統(tǒng)會調(diào)用終端虛擬設(shè)備相應(yīng)的終端虛擬設(shè)備的寫函數(shù)將數(shù)據(jù)寫到輸出環(huán)形緩沖區(qū),同時(shí)會啟動一次終端虛擬設(shè)備發(fā)送請求函數(shù),終端虛擬設(shè)備發(fā)送請求函數(shù)會調(diào)用真實(shí)的串行設(shè)備啟動函數(shù)引發(fā)寫中斷,然后調(diào)用中斷將數(shù)據(jù)送到串行設(shè)備,對于用戶而言這是寫串行設(shè)備的過程。
3.1 輸入系統(tǒng)
VxWorks的輸入/輸出系統(tǒng)輸入函數(shù)主要是通過調(diào)用終端虛擬設(shè)備層終端虛擬設(shè)備庫中的終端虛擬設(shè)備讀函數(shù),終端虛擬設(shè)備讀函數(shù)通過同步信號量與讀中斷通信來解決對讀緩沖區(qū)訪問沖突的問題。終端虛擬設(shè)備讀函數(shù)被輸入/輸出系統(tǒng)層iosLib庫中的iosRead函數(shù)調(diào)用,iosRead函數(shù)被應(yīng)用層ioLib庫中的read函數(shù)調(diào)用。開始read函數(shù)處于阻塞狀態(tài)等待輸入,設(shè)備會發(fā)中斷請求將數(shù)據(jù)寫入到輸入環(huán)形緩沖區(qū),當(dāng)輸入環(huán)形緩沖區(qū)不為空時(shí),終端虛擬設(shè)備讀函數(shù)就可以將輸入環(huán)形緩沖區(qū)的數(shù)據(jù)送入用戶緩沖區(qū)完成輸入。VxWorks系統(tǒng)運(yùn)行的過程中任何進(jìn)程要從外圍設(shè)備讀取數(shù)據(jù)必須調(diào)用read函數(shù)。下面就從iosRead函數(shù)開始分析VxWorks系統(tǒng)如何從讀緩沖區(qū)取出數(shù)據(jù)并傳遞給指定的變量。
iosRead函數(shù)是將read函數(shù)傳遞來的文件描述符參數(shù)fd,轉(zhuǎn)換成FD_ENTRY結(jié)構(gòu)體類型變量pFdEntry,根據(jù)pFdEntry結(jié)構(gòu)體中的值查找drvTable表中外圍設(shè)備驅(qū)動庫中的讀函數(shù)(如終端虛擬設(shè)備讀函數(shù))。調(diào)用終端虛擬設(shè)備讀函數(shù),并將設(shè)備的ID號和要讀的字符個(gè)數(shù)傳遞給終端虛擬設(shè)備讀函數(shù)。
read函數(shù)是接收fioRdString函數(shù)傳遞來的文件描述符fd(指向標(biāo)準(zhǔn)輸入設(shè)備)和讀取字符個(gè)數(shù),調(diào)用輸入/輸出系統(tǒng)庫函數(shù)iosRead。
fioRdString函數(shù)的功能是根據(jù)給定的文件描述符fd(指向標(biāo)準(zhǔn)輸入設(shè)備),調(diào)用read函數(shù)將字符讀到字符串?dāng)?shù)組string[]中,并返回讀取的字符個(gè)數(shù)。
3.2 輸出系統(tǒng)
VxWorks的輸入/輸出系統(tǒng)的輸出函數(shù)主要是通過調(diào)用write函數(shù),write函數(shù)調(diào)用iosWrite函數(shù),iosWrite調(diào)用終端虛擬設(shè)備寫函數(shù),并引發(fā)中斷來實(shí)現(xiàn)輸出。這里主要介紹打印函數(shù)printf。
printf函數(shù)是C語言的庫函數(shù),VxWorks包含它可以打印信息到顯示終端以方便調(diào)試或?qū)嵤┙换ァK且粋€(gè)變參數(shù)的函數(shù),它根據(jù)用戶寫的格式轉(zhuǎn)換字符串,輸出相應(yīng)格式的字符串到顯示終端,也可以直接將用戶寫字符串輸出到顯示終端。
printf的格式為printf(“格式轉(zhuǎn)換字符串”[,變量]),格式轉(zhuǎn)換字符串由普通字符和格式轉(zhuǎn)換符%,以及字符串結(jié)束符組成。變量的類型和格式轉(zhuǎn)換符后所跟的變量類型說明符一致,有幾個(gè)變量類型說明符,就跟幾個(gè)變量。由于printf是函數(shù),格式轉(zhuǎn)換字符串和后面的輸出列表實(shí)際上都是函數(shù)的參數(shù),可以表示為printf(參數(shù)1,參數(shù)2,參數(shù)3,…,參數(shù)n)。printf函數(shù)的功能是將參數(shù)2,…,參數(shù)n按參數(shù)1給定的格式輸出。
printf函數(shù)的參數(shù)是連續(xù)存放在數(shù)據(jù)區(qū)的,首先放入格式轉(zhuǎn)換字符串,接著放第一個(gè)變量的起始地址,然后放第二個(gè)變量的起始地址,依次類推(如果包含通配符*,在相應(yīng)的位置放代替通配符的整數(shù))。
printf執(zhí)行時(shí),首先使一個(gè)指針指向存放第一個(gè)變量的地址,并將格式轉(zhuǎn)換字符串拷貝內(nèi)存中,然后調(diào)用fioformatV函數(shù)。
fioformatV函數(shù)是printf的主體函數(shù),由它完成格式轉(zhuǎn)換的任務(wù),轉(zhuǎn)換完成后調(diào)用printfbuf函數(shù)寫入緩沖區(qū)。它先將fmt的首地址賦給cp(cp是一個(gè)字符串指針),然后從fmt的開頭逐個(gè)掃描字符,沒有遇到格式轉(zhuǎn)換符和字符結(jié)束符就一直向后掃描,一旦遇到了格式轉(zhuǎn)換符%和字符結(jié)束符,就將從cp開始到結(jié)束符或格式轉(zhuǎn)換符的所有字符打印到顯示終端;如果是結(jié)束符則程序執(zhí)行完畢,如果是格式轉(zhuǎn)換符%,則根據(jù)其后所跟的格式說明符進(jìn)行相應(yīng)的格式轉(zhuǎn)換,得到適當(dāng)?shù)妮敵龃{(diào)用printbuf()輸出到顯示終端。
簡而言之,fioformatV函數(shù)就是一個(gè)無限循環(huán),無限循環(huán)每次循環(huán)完成一種格式轉(zhuǎn)換和對應(yīng)格式的輸出,或普通字符輸出,直到格式轉(zhuǎn)換字符串掃描完畢;它有可能會多次調(diào)用printbuf函數(shù)。
printbuf函數(shù)有三個(gè)參數(shù),調(diào)用write函數(shù)將字符指針Buf所指向的Nbytes個(gè)字符寫入緩沖區(qū)。
write函數(shù)調(diào)用輸入/輸出系統(tǒng)寫函數(shù)iosWrite,iosWrite會調(diào)用終端虛擬設(shè)備寫函數(shù),將用戶緩沖區(qū)的數(shù)據(jù)即希望printf輸出的字符串拷貝到輸出環(huán)形緩沖區(qū),此時(shí)終端虛擬設(shè)備寫函數(shù)會發(fā)送一個(gè)寫請求,請求將數(shù)據(jù)寫入串口設(shè)備,通過串口送到顯示終端,它將引發(fā)中斷來完成寫過程。
4 中斷處理過程
中斷處理函數(shù)執(zhí)行的流程是將intEnt函數(shù)、sysIntHandler函數(shù)和intExit函數(shù)連接起來執(zhí)行的過程。
intEnt函數(shù)主要功能是保護(hù)現(xiàn)場并設(shè)置VxWorks系統(tǒng)運(yùn)行狀態(tài)。
sysIntHandler函數(shù)是一個(gè)中斷分離程序,該函數(shù)可以根據(jù)不同的中斷源信號判斷中斷類型,執(zhí)行相對應(yīng)的ISR。
intExit函數(shù)的功能是恢復(fù)現(xiàn)場并且設(shè)置VxWorks系統(tǒng)運(yùn)行狀態(tài),其流程與intEnt相反。
VxWorks讀寫中斷由串口控制器完成,每次中斷處理可以完成10 個(gè)以下(包括10個(gè))字符的接收或發(fā)送,中斷信號由串口控制器發(fā)送,進(jìn)入中斷后先讀取串口控制器的ISR寄存器的值,然后和IMRcopy進(jìn)行與操作,根據(jù)與的結(jié)果順序判斷是A信道讀,A信道寫,還是B信道讀,B信道寫。IMR寄存器是由操作系統(tǒng)寫的,在執(zhí)行讀操作之前會調(diào)用ioctl函數(shù)清空IMR在內(nèi)存中的副本IMRcopy,每次執(zhí)行寫操作前調(diào)用串口控制器啟動函數(shù)寫IMR在內(nèi)存中的副本IMRcopy。串口控制器發(fā)中斷的機(jī)制如下:
執(zhí)行完一次寫中斷后寫IMRcopy清寫中斷,并回寫IMR。發(fā)送完或接收完一個(gè)字符后,中斷服務(wù)程序會再一次查詢ISR和IMR的與判斷是否還有中斷,如果還有中斷信號,順序判斷是A信道讀,A信道寫,還是B信道讀,B信道寫處理下一個(gè)字符。如果已經(jīng)處理了10個(gè)字符,則退出中斷服務(wù)程序等待下一次中斷到來,處理余下的字符。如果一次中斷處理的字符少于10個(gè)(說明本次處理完后緩沖區(qū)就為空了)則中斷結(jié)束。讀寫中斷退出處理過程略有不同,對于寫中斷,處理完最后一個(gè)字符后,會再讀一次寫緩沖區(qū),這次沒讀到數(shù)據(jù),中斷程序會認(rèn)為緩沖區(qū)已空并修改IMR寄存器屏蔽寫中斷,然后退出中斷服務(wù)程序;而對于讀中斷,處理完最后一個(gè)字符后,讀緩沖區(qū)為空,串口控制器會立即修改ISR的值屏蔽讀中斷,然后退出中斷服務(wù)程序。
5 異常處理過程
在任務(wù)運(yùn)行過程中,會出現(xiàn)一些異常的情況,導(dǎo)致任務(wù)不能正常運(yùn)行或者對操作系統(tǒng)造成影響。在VxWorks中,當(dāng)任務(wù)的指令執(zhí)行中出現(xiàn)了非法指令、地址尋址錯(cuò)誤、總線錯(cuò)、除數(shù)為0等情況時(shí),就會出現(xiàn)CPU異常。
為了處理這些異常,VxWorks在usrInit函數(shù)中調(diào)用excVecInit函數(shù)初始化了異常向量表,共初始化了17個(gè)異常向量,每個(gè)異常都有一個(gè)默認(rèn)的處理程序。除了900(定時(shí)器到時(shí)異常)和500(外部中斷)兩個(gè)是異步異常,異常的處理程序是excIntHandle函數(shù)外,其余的15個(gè)異常的默認(rèn)處理程序都是excExcHandle函數(shù)。
用戶可以根據(jù)體系結(jié)構(gòu)和需要連接自己的異常處理程序代替默認(rèn)的異常處理程序。VXWorks在usrExcInit函數(shù)中調(diào)用excConnect函數(shù)連接了自己的異常處理程序usrMachExcHandler函數(shù)、usrDsiExcHandler函數(shù)、usrIsiExcHandler函數(shù)、usrAlignmentExcHandler函數(shù)、usrProgramExcHandler函數(shù);在sysHwInit函數(shù)里調(diào)用excIntConnect函數(shù)連接usrDecHandler函數(shù)到900異常,在sysHwInit函數(shù)里調(diào)用sysIntInit函數(shù),sysIntInit函數(shù)在調(diào)用excIntConnect函數(shù)連接sysIntHandler函數(shù)到500外部中斷。
VxWorks的異常處理機(jī)制是有優(yōu)先級的,其中System Reset異常優(yōu)先級最高,Machine Check次之,這兩個(gè)異常也是非屏蔽異常,500和900異常優(yōu)先級最低,也是可屏蔽的。
任何異常發(fā)生后,CPU要從用戶態(tài)切換到內(nèi)核態(tài),異常處理程序一般的處理過程如下:
首先,保存機(jī)器狀態(tài),包括機(jī)器狀態(tài)字MSR和當(dāng)前指令地址,即MSR→SRR1;PC→SRR0。然后,修改機(jī)器狀態(tài)寄存器,包括屏蔽外部中斷、標(biāo)記當(dāng)前狀態(tài)。最后,跳轉(zhuǎn)到對應(yīng)的異常處理向量表入口,開始執(zhí)行異常處理程序。
6 結(jié)束語
VxWorks是一種功能強(qiáng)大的嵌入式實(shí)時(shí)操作系統(tǒng),為編程人員提供了高效的實(shí)時(shí)多任務(wù)調(diào)度、中斷管理、實(shí)時(shí)的系統(tǒng)資源以及實(shí)時(shí)的任務(wù)間通信。本文通過對VxWorks操作系統(tǒng)啟動流程、輸入輸出系統(tǒng)的分析以及中斷處理和異常處理過程的研究,設(shè)計(jì)了相應(yīng)的外圍器件,成功實(shí)現(xiàn)了VxWorks操作系統(tǒng)的移植。
本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。