|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
ucos移植到MPC860 |
| 作者:novar 欄目:嵌入式系統(tǒng) |
目 錄 ^_^ 2 一、移植環(huán)境 2 1 uC/OS-II版本 2 2 處理器相關(guān)代碼 2 3 開發(fā)工具 2 3.1 編譯 2 3.2 調(diào)試 3 3.3 下載 3 4 目標(biāo)板 3 二、修改uC/OS-II 3 三、Diab 4 1 dcc 4 2 das 4 3 dld 5 4 ddump 5 5 windiss 5 四、在RAM中運行 6 1 準(zhǔn)備點燈 6 2 準(zhǔn)備串口 6 3 生成elf文件 6 4 通過MPCBDM下載 6 5 單任務(wù)實驗 6 5.1 在0x600處死循環(huán) 7 5.2 在DEC_Hdlr中停止 7 5.3 無法切換到IDLE任務(wù) 7 6 多任務(wù)實驗 8 五、燒寫FLASH 8 1 規(guī)劃地址空間 8 2 向量表的位置 8 3 copy_to_ram 8 4 生成bin文件 9 5 使用PPCBoot燒寫 9 6 迎頭棒喝 9 6.1 部分代碼未燒寫成功 9 6.2 重新點燈 10 6.3 棧與點燈 10 ^_^ 不知道這個實驗有多大價值,但因為比較熟悉MPC860,又才看了uC/OS-II,所以想把它移植上去跑跑,共花了3周的時間 :-( 這是我第一次做移植實驗,發(fā)現(xiàn)真正動手和看資料真是不一樣。而且,成功之后的興奮,也是無法銘狀的 #_# 在做這個實驗的時候,我沒用過tornado,所有的開發(fā)調(diào)試手段都比較落后 :-/ 但也有好處,讓我對底層有了更清晰的認(rèn)識。 搞嵌入式,我還是個新手,發(fā)現(xiàn)需要學(xué)習(xí)的芯片、工具、理論太多,但如果能和大家一起探討,將會少走不少彎路。因此,與壇子里的xdjm們共勉! 以下,是一個簡單的實驗的簡單的筆記,有自己的一些淺顯體會。如果能對你有所幫助,那最好不過,如果沒有,就請一笑了之 ^_^ 一、移植環(huán)境 1 uC/OS-II版本 移植工作本身與uC/OS-II的版本沒有太大關(guān)系,基于v2.51移植成功之后,沒做多少工作就能讓v2.62也跑起來。因為修改的是處理器相關(guān)的部分,這部分代碼并沒有體現(xiàn)版本的變化。 2 處理器相關(guān)代碼 從www.ucos-ii.com上可以下載PowerPC8xx的移植代碼,BSE版本,基于此做少量更改,就可以滿足自己的需求。 3 開發(fā)工具 3.1 編譯 使用Diab 5.1for PowerPC套件(含編譯器、匯編器、鏈接器、反匯編及仿真工具等)。由Tornado 2.2 for PowerPC附帶。我是直接在windows下的命令行進(jìn)行編譯的。先要安裝Tornado(如果有單獨的Diab,直接用就可以了),然后運行Tornado/host/x86-win32/bin/torvars.bat,這樣就可以在命令行使用Diab了。 另,有大俠直接用tornado完成移植工作,我還沒有試過,過段時間再看吧。如果能成,當(dāng)然不需要像我這樣折騰了 :-( 3.2 調(diào)試 MPC860沒有自帶的IDE,而Tornado或SINGLE Step能否使用,因為不熟悉也沒有嘗試。以前用過BDM,所以繼續(xù)使用,對應(yīng)的軟件是Linux下的MPCBDM。BDM可以看作是GDB的一個target,所以調(diào)試的實體就是GDB,版本4.18。 3.3 下載 使用BDM下載程序到RAM,使用PPCBoot燒寫程序到FLASH。 這些工具都是Linux下的,而編譯又要在windows下,來回的切換很是麻煩。試圖在cygwin下使用BDM,編譯gdb時沒有成功 :-? Vmware也聽說不錯,但沒時間試了。后來和一同事一起,2臺機(jī)器方便些了。 4 目標(biāo)板 使用華恒的HHPPC860-3COM-2ETH-R1開發(fā)板。 處理器: MPC860 FLASH: 2片,各2M字節(jié) SDRAM: 16M字節(jié) 二、修改uC/OS-II 為了移植到MPC860,需要修改uC/OS-II中與處理器和編譯器相關(guān)的部分代碼。在這里,大部分的修改在BSE的ppc8xx移植版本里已經(jīng)做好了,其它需要修改的是: bsestart.s文件: ü IMMR、PLPRCR等 ü 修改對UPM的配置(MCR、MDR) ü 修改片選的配置(OR、BR) 首先要保證正確的配置,860才能跑得起來。 另外,BSE的移植版本,是用于在RAM中運行的,如果要燒寫FLASH,要做更多改動,后面再說。 三、Diab 這是個好東東(不比gcc差吧?),對應(yīng)的手冊是《Diab Compiler Users Guide PPC》(tornado里有)。越來越發(fā)現(xiàn),開發(fā)調(diào)試一定要清楚編譯原理,從一個編譯器的手冊入手是最直接的了,我很多以前模糊的概念都在這里得到了解釋。 用到的工具如下: 1 dcc 編譯器,據(jù)稱對代碼的優(yōu)化是最好的。 常用命令: 1. –c a) 只進(jìn)行匯編步驟,生成一個目標(biāo)文件(默認(rèn)的后綴是.o); 2. –Dname[=VALUE] a) 定義預(yù)處理的宏名(與#define類似),如果沒有指定VALUE,則VALUE為1; 3. –g a) 產(chǎn)生符號調(diào)試信息; 4. –t a) 定義目標(biāo)板配置變量; b) DTARGET、DOBJECT、DFP和DENVIRON; 5. –X a) 控制編譯的細(xì)節(jié); b) –Xlint:遇到可疑代碼產(chǎn)生警告,它在編譯時進(jìn)行檢查;不會影響優(yōu)化,且只會增加少量的編譯時間,故通常都可以使用該選項; c) -Xstruct-min-align=n:強(qiáng)制結(jié)構(gòu)體從一個n字節(jié)的邊界開始; d) -Xstruct-max-align=n:設(shè)置結(jié)構(gòu)體的成員需要對齊的最大字節(jié)邊界; e) ………………………… f) 不說那么多了,手冊里都有 2 das 匯編器。常用命令: 1. –t a) 選擇目標(biāo)板的微處理器; b) 使用-t可以設(shè)置4個配置變量:DTARGET(微處理器)、DOBJECT(目標(biāo)模塊格式)、DFP(浮點類型的支持)和DENVIRON(目標(biāo)板運行環(huán)境); c) 如:-tPPC860ES:psos i. DTARGET = PPC860; ii. DOBJECT = E(COFF)(F for ELF,N for GNU/VxWorks格式); iii. DFP = S(軟件浮點模擬)(H for 硬件浮點,N for 不支持浮點); iv. DENVIRON = psos; d) 如果不在編譯時用-t指定,則使用default.conf中的默認(rèn)配置; 3 dld 鏈接器,通過命令行或鏈接命令文件(.dld)的控制生成elf可執(zhí)行文件,通過-m選項也可以生成map文件,在調(diào)試的時候特別有用。 使用-#選項,可以查看默認(rèn)的dld選項(如果你不顯示使用dld的話)。 最好能搞清楚dld文件的語法和原理,這樣會對如何生成bin文件或elf文件,如何鏈接,如何分配段等等有更好的理解。 4 ddump 我用它來生成燒寫FLASH的bin文件,也支持S-Record和HEX文件的生成。 常用的命令: ddump -ftv file > OUTPUT,生成符號表的信息至文件OUTPUT ddump -Ruv file,生成bin文件:注意v選項,如果沒有的話,它會將.bss段和.sbss段也輸出到bin文件,則很可能產(chǎn)生gap越界的錯誤 ddump -Rv file,生成srec文件 ddump -Sv file,查看段的大小 5 windiss windiss -il label file,生成文件file中函數(shù)label的反匯編代碼。 windiss -o,同時生成機(jī)器碼; 沒琢磨出來怎么生成整個elf文件的反匯編代碼,只好一個符號(函數(shù))一個符號的來了 :-( windiss還有仿真功能,不過用處不大,因為它是針對PowerPC的,而MPC860作為PowerPC的一個implementation,還是有不少區(qū)別的——仿真時,總說860的一SPR不存在 :-( ddump和windiss都是我調(diào)試常用的,因為底層調(diào)試,要知道符號的地址。 四、在RAM中運行 1 準(zhǔn)備點燈 如果用匯編實現(xiàn)點燈,則在初始化IMMR之后,就可以使用了。 如果用C代碼,想在原程序初始化棧之前就能點燈,必須在一開始先初始化好一個臨時棧,可以使用MPC860內(nèi)部的DPRAM——初始化IMMR之后,將DPRAM的地址賦給r1,OK,現(xiàn)在就可以在匯編中直接跳轉(zhuǎn)到點燈的C函數(shù)了。 2 準(zhǔn)備串口 在bsetest.c中,添加對MPC860的SMC1初始化的代碼,然后 |
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |