在MC68HC908GP32上移植μC/OS-II
發(fā)布時(shí)間:2007/8/28 0:00:00 訪問(wèn)次數(shù):975
在前幾講中,介紹了μC/OS-II的概念、工作機(jī)制,還介紹了μC/OS-II在Intel 80X86CPU上的移植,相信讀者通信學(xué)習(xí),已經(jīng)對(duì)移植的過(guò)程和步驟有了一定的了解。ΜC/OS-II最初是為摩托羅拉68HC11系列單片機(jī)設(shè)計(jì)的。68HC11系列單片機(jī)有外部總線,可以外接RAM和ROM;而沒(méi)有外部總線8位MCU。由于RAM容量的限制,移植就存在一定的困難;但對(duì)于有些8位的MCU,將μC/OS-II移植到MOTOROLA MC68H908GP32(以下簡(jiǎn)稱(chēng)GP32)上。
一、在GP32上移植μC/OS-11的主要問(wèn)題
在第(4)講中,介紹過(guò)要移植μC/OS-11,目標(biāo)處理必須滿足以下要求:
(1)處理器的C編譯器能產(chǎn)生可重入代碼;
(2)用C語(yǔ)言就可以打開(kāi)和關(guān)閉中斷;
(3)處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常在10~100Hz之間);
(4)處理器支持足夠的RAM,保存全局變量和作為多任務(wù)環(huán)境下的任務(wù)堆棧。
(5)處理器有將堆棧指針和其他CPU寄存器讀出和存儲(chǔ)到堆棧或內(nèi)存中的指令。
編譯后的μC/OS-II的內(nèi)核大約有6~10KB;如果只保留最核心的代碼,則最小可壓縮到2KB。RAM的占用與系統(tǒng)中的任務(wù)數(shù)有關(guān),任務(wù)堆棧要占用大量的RAM空間,堆棧的大小取決于任務(wù)的局部變量、緩沖區(qū)大小及可能的中斷嵌套的層數(shù)。所以,所要移植的系統(tǒng)中必須有足夠的RAM資源。而像MOTOROLA6805系列的8位MCU,由于RAM資源太小且堆棧指針是固定的,不能滿足上面的第(4)條和第(5)條要求,所以μC/OS-II不能在這類(lèi)處理器上運(yùn)行。
GP32是68HC08家庭的成員,具有512字節(jié)的片內(nèi)RAM,32K字節(jié)的片內(nèi)Flash,8MHz總線時(shí)鐘。內(nèi)部寄存器包括1個(gè)8位累加器A,1個(gè)16位索引寄存器X,1個(gè)16位堆棧指針寄存器SP,1個(gè)16位程序指針寄存器PC及1個(gè)8位標(biāo)志寄存器CCR。與6805系列MCU相比,68HC08系列MCU的堆棧指針為16位,可以自由尋址。這就滿足了移植條件(5),且可以使用C編譯器生成代碼。GP32的用戶手冊(cè)可以在摩托羅拉公司的主頁(yè)上下載,http://www.motorola.com。
在GP32上移植μC/OS-II的主要困難還是RAM資源太少。為了移植成功,必須采取措施減少RAM的用量,包括限制系統(tǒng)中的任務(wù)數(shù)量、仔細(xì)修改μC/OS-II內(nèi)核、去掉不使用的部分、限制任務(wù)的斷嵌套層數(shù)、在任務(wù)中盡量減少使用局部變量等等。在采取了上述措施后,可將RAM用量減少到最低。但需要提醒的是,為了節(jié)省堆棧空間而采用的限制中斷嵌套層數(shù)的方法將影響系統(tǒng)的實(shí)時(shí)性能。所以,在GP32上移植μC/OS-II更多的是一種演示,能更好地說(shuō)明μC/OS-II內(nèi)核的可裁剪性和靈活性。
在本講中將介紹一個(gè)移植實(shí)例。為了減少RAM用量,在本例中只運(yùn)行了2個(gè)用戶任務(wù)。盡量減池一內(nèi)核中不必要的模塊(包括由箱、消息隊(duì)列、內(nèi)存管理等),去掉了任務(wù)掛起、喚醒和刪除等擴(kuò)展功能,但仍然支持任務(wù)的創(chuàng)建和管理,也保留了信號(hào)量模塊來(lái)用來(lái)任務(wù)間的通訊。
二、工具和運(yùn)行環(huán)境
要實(shí)現(xiàn)μC/OS-II向GP32的移植,需要一個(gè)面向MC68HC08的C編譯器。筆者使用的是HIWARE公司的C編譯器。移植過(guò)程同樣適用于MC68HC08家庭的其他成員。
三、移植中所需修改的文件
首先是編寫(xiě)整個(gè)項(xiàng)目的公共頭文件include.h,這個(gè)文件定義使用內(nèi)核中的哪些模塊。Include.h會(huì)被所有的C源程序引用。還要修改和CPU相關(guān)的三個(gè)文件,分別是頭文件OS_CPU08.H、匯編代碼文件OS_CPU08.ASM和C代碼文件OS_CPU08.C。
1.include.h文件
include.h是主頭文件,在所有后綴名為.C的文件的開(kāi)始都包含include.h文件。文件中可以?xún)?nèi)核進(jìn)行裁剪。在本例中定義如下:
#define OS_MAX_EVENTS 2 /*共用了2個(gè)信號(hào)量*/
#define OS_MAX_MEM_PART 0 /*不使用內(nèi)存塊功能*/
#define OS_MAX_QS 0 /*不使用消息隊(duì)列功能*/
#define OS_MAX_TASKS 3 /*共有3個(gè)任務(wù)(包括空閑任務(wù))*/
#define OS_LOWEST_PRIO 20 /*定義最低優(yōu)先級(jí)20*/
在前幾講中,介紹了μC/OS-II的概念、工作機(jī)制,還介紹了μC/OS-II在Intel 80X86CPU上的移植,相信讀者通信學(xué)習(xí),已經(jīng)對(duì)移植的過(guò)程和步驟有了一定的了解。ΜC/OS-II最初是為摩托羅拉68HC11系列單片機(jī)設(shè)計(jì)的。68HC11系列單片機(jī)有外部總線,可以外接RAM和ROM;而沒(méi)有外部總線8位MCU。由于RAM容量的限制,移植就存在一定的困難;但對(duì)于有些8位的MCU,將μC/OS-II移植到MOTOROLA MC68H908GP32(以下簡(jiǎn)稱(chēng)GP32)上。
一、在GP32上移植μC/OS-11的主要問(wèn)題
在第(4)講中,介紹過(guò)要移植μC/OS-11,目標(biāo)處理必須滿足以下要求:
(1)處理器的C編譯器能產(chǎn)生可重入代碼;
(2)用C語(yǔ)言就可以打開(kāi)和關(guān)閉中斷;
(3)處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常在10~100Hz之間);
(4)處理器支持足夠的RAM,保存全局變量和作為多任務(wù)環(huán)境下的任務(wù)堆棧。
(5)處理器有將堆棧指針和其他CPU寄存器讀出和存儲(chǔ)到堆棧或內(nèi)存中的指令。
編譯后的μC/OS-II的內(nèi)核大約有6~10KB;如果只保留最核心的代碼,則最小可壓縮到2KB。RAM的占用與系統(tǒng)中的任務(wù)數(shù)有關(guān),任務(wù)堆棧要占用大量的RAM空間,堆棧的大小取決于任務(wù)的局部變量、緩沖區(qū)大小及可能的中斷嵌套的層數(shù)。所以,所要移植的系統(tǒng)中必須有足夠的RAM資源。而像MOTOROLA6805系列的8位MCU,由于RAM資源太小且堆棧指針是固定的,不能滿足上面的第(4)條和第(5)條要求,所以μC/OS-II不能在這類(lèi)處理器上運(yùn)行。
GP32是68HC08家庭的成員,具有512字節(jié)的片內(nèi)RAM,32K字節(jié)的片內(nèi)Flash,8MHz總線時(shí)鐘。內(nèi)部寄存器包括1個(gè)8位累加器A,1個(gè)16位索引寄存器X,1個(gè)16位堆棧指針寄存器SP,1個(gè)16位程序指針寄存器PC及1個(gè)8位標(biāo)志寄存器CCR。與6805系列MCU相比,68HC08系列MCU的堆棧指針為16位,可以自由尋址。這就滿足了移植條件(5),且可以使用C編譯器生成代碼。GP32的用戶手冊(cè)可以在摩托羅拉公司的主頁(yè)上下載,http://www.motorola.com。
在GP32上移植μC/OS-II的主要困難還是RAM資源太少。為了移植成功,必須采取措施減少RAM的用量,包括限制系統(tǒng)中的任務(wù)數(shù)量、仔細(xì)修改μC/OS-II內(nèi)核、去掉不使用的部分、限制任務(wù)的斷嵌套層數(shù)、在任務(wù)中盡量減少使用局部變量等等。在采取了上述措施后,可將RAM用量減少到最低。但需要提醒的是,為了節(jié)省堆?臻g而采用的限制中斷嵌套層數(shù)的方法將影響系統(tǒng)的實(shí)時(shí)性能。所以,在GP32上移植μC/OS-II更多的是一種演示,能更好地說(shuō)明μC/OS-II內(nèi)核的可裁剪性和靈活性。
在本講中將介紹一個(gè)移植實(shí)例。為了減少RAM用量,在本例中只運(yùn)行了2個(gè)用戶任務(wù)。盡量減池一內(nèi)核中不必要的模塊(包括由箱、消息隊(duì)列、內(nèi)存管理等),去掉了任務(wù)掛起、喚醒和刪除等擴(kuò)展功能,但仍然支持任務(wù)的創(chuàng)建和管理,也保留了信號(hào)量模塊來(lái)用來(lái)任務(wù)間的通訊。
二、工具和運(yùn)行環(huán)境
要實(shí)現(xiàn)μC/OS-II向GP32的移植,需要一個(gè)面向MC68HC08的C編譯器。筆者使用的是HIWARE公司的C編譯器。移植過(guò)程同樣適用于MC68HC08家庭的其他成員。
三、移植中所需修改的文件
首先是編寫(xiě)整個(gè)項(xiàng)目的公共頭文件include.h,這個(gè)文件定義使用內(nèi)核中的哪些模塊。Include.h會(huì)被所有的C源程序引用。還要修改和CPU相關(guān)的三個(gè)文件,分別是頭文件OS_CPU08.H、匯編代碼文件OS_CPU08.ASM和C代碼文件OS_CPU08.C。
1.include.h文件
include.h是主頭文件,在所有后綴名為.C的文件的開(kāi)始都包含include.h文件。文件中可以?xún)?nèi)核進(jìn)行裁剪。在本例中定義如下:
#define OS_MAX_EVENTS 2 /*共用了2個(gè)信號(hào)量*/
#define OS_MAX_MEM_PART 0 /*不使用內(nèi)存塊功能*/
#define OS_MAX_QS 0 /*不使用消息隊(duì)列功能*/
#define OS_MAX_TASKS 3 /*共有3個(gè)任務(wù)(包括空閑任務(wù))*/
#define OS_LOWEST_PRIO 20 /*定義最低優(yōu)先級(jí)20*/
熱門(mén)點(diǎn)擊
- 一種基于CPLD的偽隨機(jī)序列發(fā)生器
- 嵌入式系統(tǒng)硬件抽象層的原理與實(shí)現(xiàn)
- 利用XPS工具快速生成Virtex FPGA
- 在MC68HC908GP32上移植μC/OS
- 基于PIC18F系列單片機(jī)的嵌入式系統(tǒng)設(shè)計(jì)
- 嵌入式Email發(fā)送模塊
- 便攜系統(tǒng)中微處理器功耗的設(shè)計(jì)考慮
- 嵌入式瀏覽器Konqueror/E的實(shí)現(xiàn)
- 在Windows環(huán)境下調(diào)用動(dòng)態(tài)庫(kù)實(shí)現(xiàn)VXI嵌
- 使用LeonardoSpectrum綜合Xi
推薦技術(shù)資料
- 羅盤(pán)誤差及補(bǔ)償
- 造成羅盤(pán)誤差的主要因素有傳感器誤差、其他磁材料干擾等。... [詳細(xì)]
- CV/CC InnoSwitch3-AQ 開(kāi)
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門(mén)信號(hào)調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究