色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

          μC/OS-II在ARM平臺(tái)上移植的深入探討

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

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

          tcp/ip相關(guān)文章:tcp/ip是什么



          上一頁 1 2 3 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉