<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > S3C2440開(kāi)發(fā)工具realview MDK4.22使用入門(mén)

S3C2440開(kāi)發(fā)工具realview MDK4.22使用入門(mén)

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò ) 收藏
目前仍然有許多人在使用ADS1.2編譯ARM9的程序,這款編譯器實(shí)屬經(jīng)典,但是已經(jīng)多年停止更新、維護了。這篇文章主要講解ARM公司受夠Keil之后力推的一款編譯器MDK。

MDK的使用上和ADS1.2有很多相似之處,從ADS1.2過(guò)渡到MDK也是非常容易的一種事情。

本文引用地址:http://dyxdggzs.com/article/201611/318142.htm

還是無(wú)圖無(wú)真相。

<一>這是MDK打開(kāi)的情形,當然我這已經(jīng)是一個(gè)建立好的工程。如果一開(kāi)始是空的,按圖點(diǎn)擊project-->new uvision project即可。



<二>

關(guān)于工程名的命名,修改,添加文件等與其余的編譯器無(wú)異,相信大家都會(huì )的。這里重點(diǎn)講解魔術(shù)棒的配置


<三>

可以看到介面上有個(gè)Target Option選項。這才是該編譯器強大的所在。


設備選擇,大家根據實(shí)際情況選擇即可,我這里選擇的是S3C2440A


時(shí)鐘部分為模擬調試的時(shí)鐘,默認即可。

操作系統部分,MDK提供了一個(gè)實(shí)時(shí)操作系統,便于大家開(kāi)發(fā)RTOS上的程序,如果不需要,可以選無(wú)。

可以選擇ARM或者Thumb代碼模式。

為只讀內存的區域配置:有內部的ROM on-chip,有外部的ROM off-chip這個(gè)根據自己實(shí)際情況選擇。S3C2440A無(wú)片上可以利用的ROM,但是可能會(huì )外接ROM,比如

Nor或者NAND。為你的目標板上有的資源打上default勾選。

為讀寫(xiě)內存區域配置:有內部的RAM on-chip,有外部的RAM off-chip這個(gè)也是根據自己實(shí)際情況配置。S3C2440A有內部RAM,為0x40000000的4K大小,NAND時(shí)候會(huì )被映射到BANK0。

NOTE:::以上內存的區域配置是很靈活的,除了根據你自己的目標板實(shí)際配置外,還可以根據你的目的來(lái)配置,你可能需要將RAM也模擬成ROM,這樣便于調試等等。

這里選項很簡(jiǎn)單,默認沒(méi)有勾選Create HEX File,可以勾選上。也可以根據需要生成目標庫。也可以為目標文件單獨選擇存放文件夾,使工程文件清晰。

List也可以選擇存放的目錄??梢赃x擇輸出的內容文件。比如內存映像文件,符號文件,調用關(guān)系,交叉引用,生成文件的內存信息,未使用的section信息等。

便于查看。

選項也很清晰。重點(diǎn)是bulid后的用戶(hù)程序。一般是用來(lái)將自己生成的axf轉換為bin文件,和ads1.2很像。但是它比ads1.2至少強在一地方。

大家可能注意到--bincombined--bincombined_padding=1類(lèi)似的命令,該命令存在的原因跟scatter文件有關(guān)。

scatter文件描述了如何組成自己的輸入段,形成加載域,執行域,最終按照要求得到自己想要的內存布局文件。

BUT如果存在兩個(gè)及其以上的加載域的話(huà),生成的二進(jìn)制文件會(huì )有多個(gè),雖然我們可以自主的燒寫(xiě)到我們的目標存儲區,但是這無(wú)疑增加了我們的負擔!

在A(yíng)DS1.2中,是沒(méi)有直接的辦法將多個(gè)bin文件連接在一起的,只能利用H-JTAG類(lèi)似的工具,將多個(gè)bin文件轉為HEX文件,拼接起來(lái),再轉為bin,有些麻煩

但是MDK下,直接利用這個(gè)命令即可完成將多個(gè)bin連成1個(gè)bin文件,是很方便的。這樣scatter文件的多個(gè)加載域就不是問(wèn)題了。


沒(méi)什么特別的,注意默認優(yōu)化級別的選擇對應是level2。警告的話(huà),可以選顯示全部警告信息。

自己工程的頭文件路徑也要直接添加好,不然找不到。


與上一個(gè)選項卡類(lèi)似。


linker選項也是十分重要的。默認的不是這個(gè)圖的樣式,是勾選了“利用目標選項卡里的內存布局”安排RO RW段。

一般情況下,這樣的確是可以的,但是如果自己有特殊的要求,是需要自己寫(xiě)scatter文件的。這個(gè)圖就是我自己寫(xiě)的一個(gè)scatter文件,未利用默認選項,所以未勾選。

微控制命令下可以自己寫(xiě)上對應的命令,比如這里的指定入口等等。


左右對稱(chēng)的選項,重點(diǎn)是右邊,雖然模擬也很強大,但是大家一般都是有目標板的,所以還是硬件調試的手段。

可以選用的有Jlink Ulink等等,我手頭有個(gè)山寨的Jlink,所以選擇Jlink了。

下面的勾選框表明將自己要調試的文件下載到startup里,以及是否直接運行到main()函數。這個(gè)要根據實(shí)際需要來(lái)。

很可能你并不想利用MDK提供的庫功能,就如同你不想使用ADS1.2提供的庫功能一樣,不使用main函數,那么就不存在run to main()。

很可能你是用SDRAM模擬ROM,在SDRAM中調試代碼,也可能不需要將代碼下載到starup。

抑或你在SDRAM中調試,使用了調試腳本,調試腳本里已經(jīng)做了這2項工作,也是不需要勾選的,可以自己逐步嘗試。

應用選項卡,是針對Flash應用的??梢赃x擇flash燒寫(xiě)工具。


點(diǎn)擊設置可以進(jìn)入Flash選擇,如果不存在自己的flash型號,可以自己添加算法,MDK手冊有模板教你一步一步添加自己的Flash算法,比如nor nand之類(lèi)的都可以添加。

Ramfor Alg是用于燒寫(xiě)算法的空間,MDK手冊是說(shuō)一般用內部RAM。

重點(diǎn)的都講完了,老規矩,以點(diǎn)亮LED結束這篇文章吧。

s3c2440.s

areainitcode,code,readonly
preserve8
code32
entry
export__start
__start


ldrsp,=1024*4
importdisable_watch_dog
importmemsetup
importcopy_2th_sdram
importMain


bldisable_watch_dog
blmemsetup
blcopy_2th_sdram
ldrsp,=0x34000000
ldrpc,=Main


halt_loop
bhalt_loop


end

led.c文件:

#include"S3C2440.h"
#define gpbcon (*(volatile ulong *)0xa0000010)
#define gpbdat (*(volatile ulong *)0xa0000014)


static __inline void wait(ulong dly);






#define GPB5_out (1<<(5*2))
#define GPB6_out (1<<(6*2))
#define GPB7_out (1<<(7*2))
#define GPB8_out (1<<(8*2))




static __inline void wait(ulong dly)
{
for(;dly > 0; dly--);
}


int Main(void)
{
ulongi = 0;

gpbcon= GPB5_out | GPB6_out | GPB7_out | GPB8_out;
while(1)
{
wait(3000000);
gpbdat= (~(i<<5));
if(++i== 16)
i=0;
}
}

內存布局scatter文件:

;*
; * Scatter-Loading Description File generated by uVision *
; *


LR_ROM1 0x00000000 0x00200000 { ; load region size_region
NANDFLASH 0x00000000 0x00200000 { ; load address = executionaddress
*.o (initcode, +First)
.ANY (+RO)
}
}


LR_ROM2 2048 2048 {
SDRAM 0xb0004000 {
led.o (*)
}
}



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>