新聞中心

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

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

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

        本文引用地址:http://www.104case.com/article/151716.htm

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



        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 马公市| 仙桃市| 黄浦区| 古浪县| 井研县| 平昌县| 乌拉特前旗| 隆德县| 垣曲县| 濉溪县| 铅山县| 温州市| 安丘市| 建湖县| 惠州市| 东阿县| 桂平市| 兴国县| 牡丹江市| 鄂尔多斯市| 柘荣县| 嘉义市| 禄丰县| 砚山县| 合肥市| 隆化县| 城口县| 五原县| 郓城县| 崇礼县| 蒙阴县| 深州市| 平乐县| 湘西| 抚顺县| 广宁县| 宕昌县| 厦门市| 井冈山市| 高州市| 阳春市|