μC/OS-II在ARM平臺(tái)上移植的深入探討
4 S3C2410啟動(dòng)代碼和μC/OS-II的融合
本文1.1節(jié)已經(jīng)介紹過(guò),S3C2410的啟動(dòng)代碼開(kāi)始部分是匯編語(yǔ)言的初始化過(guò)程,然后跳轉(zhuǎn)到main()函數(shù)。融合的工作就從改造S3C2410的main()函數(shù)和μC/OS-II的main()函數(shù)(在test.c中)開(kāi)始。在S3C2410的main()函數(shù)中,保留原啟動(dòng)代碼中關(guān)于端口、內(nèi)存、外部設(shè)備初始化代碼,刪去跳轉(zhuǎn)到Linux操作系統(tǒng)的代碼;在μC/OS-II的test.c文件的main()函數(shù)中,刪去一切與X86內(nèi)核有關(guān)的初始化代碼和輸入輸出函數(shù)代碼(因?yàn)檫@部分代碼在S3C2410的啟動(dòng)代碼中已經(jīng)實(shí)現(xiàn)),并將與 μC/OS-II內(nèi)核有關(guān)的3個(gè)函數(shù)OSInit()、OSTaskCreate(…)、OSStart()復(fù)制到S3C2410的main()函數(shù)中,同時(shí)刪去μC/OS-II的test.c文件。融合后的main()函數(shù)主要代碼如下:
ChangeClockDivider(1, 1); //1:2:4
ChangeMPllValue(161,3,1); //FCLK=203.0 MHz
SetClockDivider(1, 1);
SetSysFclk(FCLK_203M);
Port_Init();
Isr_Init();
Uart_Init(0, 115200);
Uart_Select(0);
MMU_Init(); //MMU 初始化
EnableModuleClock(CLOCK_ALL);
rMISCCR = ~(0x3007);
OSInit();
OSTaskCreate(TaskStart,……, 0);
OSStart();
至此,處理器已執(zhí)行完S3C2410的啟動(dòng)代碼,并開(kāi)始執(zhí)行μC/OS-II內(nèi)核代碼。當(dāng)然,要實(shí)現(xiàn)多任務(wù),處理器的中斷必須是打開(kāi)的。這個(gè)工作在OSStart ()函數(shù)中完成,在執(zhí)行OSStartHighRdy之前,要按照系統(tǒng)的需求完成處理器的中斷初始化工作,同時(shí)打開(kāi)中斷。至此,融合工作基本完成,剩下的工作就是按照系統(tǒng)的需求在μC/OS-II的TaskStart(…)函數(shù)中自由添加實(shí)際工作所需的任務(wù)了。
在本文所述系統(tǒng)中,在μC/OS-II所帶3個(gè)系統(tǒng)任務(wù)的基礎(chǔ)上添加了3個(gè)任務(wù)Task1、Task2和Task3,方法是在OSStatInit( )之前添加OSTaskCreate(Task1,…)等代碼,然后按下述格式和自己的需求編寫(xiě)Task1、Task2和Task3函數(shù)。代碼為:
void Task1(void *data)
{
while(1) { ;任務(wù)代碼 }
}
因篇幅所限,無(wú)法詳述在融合過(guò)程中遇到的所有問(wèn)題,尤其是在ADSv1.2環(huán)境下編譯、調(diào)試過(guò)程出現(xiàn)的語(yǔ)法問(wèn)題和各種細(xì)節(jié)問(wèn)題。
隨著科技的發(fā)展和實(shí)際任務(wù)復(fù)雜性的逐步增加,傳統(tǒng)的單片機(jī)前后臺(tái)編程模式漸漸不能滿(mǎn)足實(shí)際應(yīng)用的要求。在嵌入式應(yīng)用開(kāi)發(fā)中使用嵌入式操作系統(tǒng)已經(jīng)成為一種趨勢(shì),本文在S3C2410開(kāi)發(fā)板上將原有的引導(dǎo)程序和μC/OS-II操作系統(tǒng)結(jié)合在一起,開(kāi)發(fā)出能自引導(dǎo)的μC/OS-II操作系統(tǒng),該系統(tǒng)除了3個(gè)系統(tǒng)任務(wù)外,還自帶3個(gè)實(shí)際任務(wù),在ADSV1.2環(huán)境下編譯、調(diào)試,并在板卡上成功運(yùn)行,對(duì)μC/OS-II在ARM平臺(tái)上的移植有一定借鑒意義。
參考文獻(xiàn)
[1] 任哲,潘樹(shù)林,房紅征,編著.嵌入式操作系統(tǒng)基礎(chǔ) μC/OS-II和Linux[M].北京:北京航空航天大學(xué)出版社,
2007.
[2] 韓山,郭云,付海艷,編著.ARM微處理器應(yīng)用開(kāi)發(fā)技術(shù)詳解與實(shí)例分析[M].北京:清華大學(xué)出版社,2007:284-286.
[3] 蔣維. 基于ARM S3C2410嵌入式系統(tǒng)的Bootloader分析與設(shè)計(jì)[J].電子工程師,2008(10).本文引用地址:http://m.butianyuan.cn/article/151716.htm
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論