電子工程網(wǎng)
標題:
Keil MDK下uC/OS-II在FL2440上的移植
[打印本頁(yè)]
作者:
yanhong
時(shí)間:
2010-11-18 13:04
標題:
Keil MDK下uC/OS-II在FL2440上的移植
關(guān)于uCOS-II的種種阿呆就不說(shuō)了,很多初學(xué)者從此踏上操作系統之路
uCOS-II在A(yíng)DS上的移植很常見(jiàn),而在KEIL MDK下的移植卻不是很多,阿呆根據ADS下的移植范例,結合自
己最近使用KEIL MDK的稍許心得,記錄一下uCOS-II在KEIL MDK下的移植過(guò)程。
一:準備源碼
在官網(wǎng)上下載了uCOS-II的源碼,好像似乎是2..91的了.
二:編寫(xiě)OS移植文件
1.編寫(xiě)OS_cpu_c.c
這個(gè)文件阿呆是在A(yíng)DS下的移植范例里面copy的,直接使用就可以了
注:2.89開(kāi)始添加了OS_TaskReturn(),它會(huì )調用OSTaskReturnHook(),如果copy的版本低于2.89則需要
自己添加一下。
2.編寫(xiě)OS_cpu_a.s
這個(gè)文件也是阿呆在A(yíng)DS下的一直范例里面copy的,同樣的S3C2440平臺,這下函數一樣的,而KEIL MDK
與ADS相比,在語(yǔ)法上沒(méi)有什么特別的要求。
3.添加系統心跳定時(shí)器
阿呆使用沒(méi)有輸出引腳的Timer4作為系統心跳定時(shí)器,具體實(shí)現參看:OS_Timer4_c.c
三:修改啟動(dòng)代碼
1.如果直接將ADS下的啟動(dòng)代碼copy到MDK下,編譯會(huì )提示出錯,一般錯誤是:.\OutPutFiles\uCOS-
II_Uart.axf: Error: L6238E: 2440_init.o(Init_2440) contains invalid call from '~PRES8 (The
user did not require code to preserve 8-byte aligment of 8-byte data objects)' function to
'REQ8 (Code was permitted to depend on the 8-byte aligment of 8-byte data items)' function
App_Main.
解決方法是在代碼段前部添加:PRESERVE8,如圖1
2.將IRQ中斷交給uC/OS-II管理
代碼如下:
;****************************************************
;將OS_CPU_IRQ_ISR地址裝入HandleIRQ中,IRQ中斷交給uCOS-II管理
;****************************************************
LDR R0,=HandleIRQ ;This routine is needed
LDR R1,=OS_CPU_IRQ_ISR ;if there isn't 'subs pc,lr,#4' at 0x18,
0x1c
STR R1,[r0]
即發(fā)生IRQ中斷時(shí)系統跳轉到OS_CPU_IRQ_ISR處執行uC/OS-II中斷服務(wù)函數,具體事件由它負責。
四:設置MDK編譯參數信息
1.選擇CPU:
2.填寫(xiě)存儲器信息:
3.編寫(xiě)scatter
如果不想自己編寫(xiě)此文件,KEIL會(huì )自動(dòng)生成文件模板,選擇如下:
但是阿呆不推崇這中方法,這種方法讓人有種霧里看花的感覺(jué),不明了
還是自己編寫(xiě)吧:
設置如下:
Scatter文件內容:
/*-------------------------------------------------------------
運行域在SRAM中,可使用以下寫(xiě)法,也可直接將WR,ZI段跟在ROM后面
-------------------------------------------------------------*/
LR_ROM1 0x30000000 0x01000000 { ; load region size_region
RO 0x30000000 0x01000000 { ; load address = execution address
2440_init.o (Init_2440, +First)
.ANY (+RO)
}
RW 0x31000000 0x01000000 { ; RW data
.ANY (+RW)
}
ZI +0 {
.ANY (+ZI)
}
}
很多同志會(huì )遇到.\OutPutFiles\uCOS-II_Uart.axf: Error: L6218E: Undefined symbol
Image$$RO$$Base (referred from 2440_init.o).
從ADS copy過(guò)來(lái)的和KEIL默認的標號是不一致的,修改scatter文件里面的ER_ROM1為RO標號,RW_RAM1為
RW,以此類(lèi)推即可。
阿呆安排運行域地址從0x30000000-0x31000000,數據域地址:0x31000000-0x32000000
安排方式純屬個(gè)人愛(ài)好。
由于MDK默認生成的輸出文件時(shí)HEX的,要使之生成BIN的需要添加一條命令:
如下:
在RUN #1,中添加:D:\ProgramFiles\KEIL\MDK\ARM\BIN40\fromelf.exe --bin -o
./OutPutfiles/uCOS-II_Uart.bin ./OutPutfiles/uCOS-II_Uart.axf
具體路徑需調整。
至此為止,uCOS-II的移植已經(jīng)完畢,阿呆沒(méi)有在uC/OS-II的具體細節上糾結,而是將精力放在MDK環(huán)境
的使用上,簡(jiǎn)單介紹了一下在KEIL MDK下編寫(xiě)程序的基本步驟。
編譯之:
OK啦。
作者:
youyou_zh
時(shí)間:
2011-4-5 14:30
bucuo
歡迎光臨 電子工程網(wǎng) (http://selenalain.com/)
Powered by Discuz! X3.4
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页