新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > μC/OS-II在ARM平臺上移植的深入探討

μC/OS-II在ARM平臺上移植的深入探討

作者: 時間:2010-07-26 來源:網(wǎng)絡 收藏
因為S3C2410在進入ISR模式后,自動屏蔽ISR中斷,所以粗存在中斷嵌套,可以表明2個全部變量ISR_LR和ISR_SPSR用于保存ISR中斷發(fā)生之時處理器的lr和spsr寄存器。其代碼的特別之處在于,在ISR中斷處理過程中通過修改lr寄存器,而使處理器在退出ISR模式時能根據(jù)任務的需要返回至ISR中斷發(fā)生之處或者代碼指定地點。在代碼指定地點,可以保存上次中斷發(fā)生時被中斷任務的處理器的所有寄存器數(shù)據(jù)。這里需要注意一點,當處理器退出ISR模式時跳轉(zhuǎn)到Saveregister處開始執(zhí)行命令,需要提前將Saveregister處的地址加上4,然后賦值給lr寄存器。因為在ISR退出時,需要將lr減去4再賦值給程序計數(shù)器pc。
4 S3C2410啟動代碼和μ的融合
 本文1.1節(jié)已經(jīng)介紹過,S3C2410的啟動代碼開始部分是匯編語言的初始化過程,然后跳轉(zhuǎn)到main()函數(shù)。融合的工作就從改造S3C2410的main()函數(shù)和μ的main()函數(shù)(在test.c中)開始。在S3C2410的main()函數(shù)中,保留原啟動代碼中關于端口、內(nèi)存、外部設備初始化代碼,刪去跳轉(zhuǎn)到Linux操作系統(tǒng)的代碼;在μ的test.c文件的main()函數(shù)中,刪去一切與X86內(nèi)核有關的初始化代碼和輸入輸出函數(shù)代碼(因為這部分代碼在S3C2410的啟動代碼中已經(jīng)實現(xiàn)),并將與 μC/OS-II內(nèi)核有關的3個函數(shù)OSInit()、OSTaskCreate(…)、OSStart()復制到S3C2410的main()函數(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的啟動代碼,并開始執(zhí)行μC/OS-II內(nèi)核代碼。當然,要實現(xiàn)多任務,處理器的中斷必須是打開的。這個工作在OSStart ()函數(shù)中完成,在執(zhí)行OSStartHighRdy之前,要按照系統(tǒng)的需求完成處理器的中斷初始化工作,同時打開中斷。至此,融合工作基本完成,剩下的工作就是按照系統(tǒng)的需求在μC/OS-II的TaskStart(…)函數(shù)中自由添加實際工作所需的任務了。
在本文所述系統(tǒng)中,在μC/OS-II所帶3個系統(tǒng)任務的基礎上添加了3個任務Task1、Task2和Task3,方法是在OSStatInit( )之前添加OSTaskCreate(Task1,…)等代碼,然后按下述格式和自己的需求編寫Task1、Task2和Task3函數(shù)。代碼為:
void Task1(void *data)
  {
   while(1) { ;任務代碼 }
  }
因篇幅所限,無法詳述在融合過程中遇到的所有問題,尤其是在ADSv1.2環(huán)境下編譯、調(diào)試過程出現(xiàn)的語法問題和各種細節(jié)問題。
隨著科技的發(fā)展和實際任務復雜性的逐步增加,傳統(tǒng)的單片機前后臺編程模式漸漸不能滿足實際應用的要求。在嵌入式應用開發(fā)中使用嵌入式操作系統(tǒng)已經(jīng)成為一種趨勢,本文在S3C2410開發(fā)板上將原有的引導程序和μC/OS-II操作系統(tǒng)結合在一起,開發(fā)出能自引導的μC/OS-II操作系統(tǒng),該系統(tǒng)除了3個系統(tǒng)任務外,還自帶3個實際任務,在ADSV1.2環(huán)境下編譯、調(diào)試,并在板卡上成功運行,對μC/OS-II在上的有一定借鑒意義。
參考文獻
[1] 任哲,潘樹林,房紅征,編著.嵌入式操作系統(tǒng)基礎 μC/OS-II和Linux[M].北京:北京航空航天大學出版社,
2007.
[2] 韓山,郭云,付海艷,編著.微處理器應用開發(fā)技術詳解與實例分析[M].北京:清華大學出版社,2007:284-286.
[3] 蔣維. 基于 S3C2410嵌入式系統(tǒng)的Bootloader分析與設計[J].電子工程師,2008(10).

本文引用地址:http://2s4d.com/article/151716.htm

tcp/ip相關文章:tcp/ip是什么



上一頁 1 2 3 下一頁

評論


相關推薦

技術專區(qū)

關閉