專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

RealView MDK調(diào)試ARM(S3C2440)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2010年06月03日   【字體:

   始學(xué)習(xí)ARM,先準(zhǔn)備學(xué)習(xí)ARM來(lái)當(dāng)單片機(jī)用。同事拿了塊勤研的TQ2440的開(kāi)發(fā)板給我玩,剛開(kāi)始碰到不少難題。單單想讓ARM在RAM里運(yùn)行,就花了好多天。

  上關(guān)于2440的教程很多,可很多都是相對(duì)于ADS集成開(kāi)發(fā)環(huán)境的。聽(tīng)說(shuō)ARM公司自從收購(gòu)了Keil公司,就不再更新ADS了,而是服務(wù)Keil了。所以我準(zhǔn)備選用keil for ARM。現(xiàn)在網(wǎng)上有關(guān)Keil for ARM 的教程太少,我也一直徘徊在門(mén)外,今天終于有點(diǎn)喜色了,呵呵,記下。

 

1.RealView MDK介紹
2.Jlink 介紹
3.創(chuàng)建RealView MDK 的led點(diǎn)燈工程
4.調(diào)試程序

1.關(guān)于RealView MDK
其實(shí)RealView MDK也是Keil公司的產(chǎn)品,它是在Keil被ARM公司收購(gòu)后開(kāi)發(fā)的關(guān)于arm的新的開(kāi)發(fā)環(huán)境,個(gè)人感覺(jué)它比ads1.2要好使的多。RealView MDK有很多突出特點(diǎn):

啟動(dòng)代碼生成向?qū)В詣?dòng)引導(dǎo)
  啟動(dòng)代碼和系統(tǒng)硬件結(jié)合緊密,必須用匯編語(yǔ)言編寫(xiě),因而成為許多工程師難以跨越多門(mén)檻。RealView MDK的μVision3工具可以幫您自動(dòng)生成完善的啟動(dòng)代碼,并提供圖形化的窗口,隨您輕松修改。無(wú)論對(duì)于初學(xué)者還是有經(jīng)驗(yàn)的開(kāi)發(fā)工程師,都能大大節(jié)省時(shí)間,提高開(kāi)發(fā)效率。

軟件模擬器,完全脫離硬件的軟件開(kāi)發(fā)過(guò)程
  RealView MDK的設(shè)備模擬器可以仿真整個(gè)目標(biāo)硬件,包括快速指令集仿真、外部信號(hào)和I/O仿真、中斷過(guò)程仿真、片內(nèi)所有外圍設(shè)備仿真等。開(kāi)發(fā)工程師在無(wú)硬件的情況下即可開(kāi)始軟件開(kāi)發(fā)和調(diào)試,使軟硬件開(kāi)發(fā)同步進(jìn)行,大大縮短開(kāi)發(fā)周期。而一般的ARM開(kāi)發(fā)工具僅提供指令集模擬器,只能支持ARM內(nèi)核模擬調(diào)試。

性能分析器,看得更遠(yuǎn)、看得更細(xì)、看得更清
  RealView MDK的性能分析器好比哈雷望遠(yuǎn)鏡,讓您看得更遠(yuǎn)和更準(zhǔn),它輔助您查看代碼覆蓋情況,程序運(yùn)行時(shí)間,函數(shù)調(diào)用次數(shù)等高端控制功能,指導(dǎo)您輕松的進(jìn)行代碼優(yōu)化,成為嵌入式開(kāi)發(fā)高手。通常這些功能只有價(jià)值數(shù)千美元的昂貴的Trace工具才能提供。

Cortex-M3支持
  RealView MDK支持的Cortex-M3核是ARM公司最新推出的針對(duì)微控制器應(yīng)用的內(nèi)核,它提供業(yè)界領(lǐng)先的高性能和低成本的解決方案,未來(lái)幾年將成為MCU應(yīng)用的熱點(diǎn)和主流。目前國(guó)內(nèi)只有ARM公司的MDK和RVDS開(kāi)發(fā)工具可以支持Cortex-M3芯片的應(yīng)用開(kāi)發(fā)。

業(yè)界最優(yōu)秀的ARM編譯器——RealView 編譯器,代碼更小,性能更高
RealView MDK的RealView編譯器與ADS 1.2比較:
代碼密度:比ADS 1.2編譯的代碼尺寸小10%;
代碼性能:比ADS 1.2編譯的代碼性能高20%。
可以到KEIL的官方下載RealView MDK 下載的版本是試用版的有32K的代碼限制可以在網(wǎng)上找個(gè)注冊(cè)機(jī),好像3.x的注冊(cè)機(jī)就行。

2.關(guān)于Jlink
Jlink是SEGGER公司為支持仿真ARM內(nèi)核芯片推出的JTAG仿真器。配合IAR EWARM,ADS,KELL,WINARM,RealView等集成開(kāi)發(fā)環(huán)境支持所有ARM7/ARM9內(nèi)核芯片的仿真,通過(guò)RDI接口和各集成開(kāi)發(fā)環(huán)境無(wú)縫連接,操作方便,簡(jiǎn)單易學(xué),是學(xué)習(xí)開(kāi)發(fā)ARM的最實(shí)用的開(kāi)發(fā)工具。關(guān)于Jlink的特性可以參考SEGGER的官方介紹SEGGER

3.創(chuàng)建跑馬燈工程

我的第一個(gè)程序就是點(diǎn)燈了,呵呵!
打開(kāi) Keil uVision4然后新建一個(gè)工程tq2440,然后選擇CPU類(lèi)型,這里選tq2440所使用的s3c2440a

確定后會(huì)提示是否添加s3c2440的啟動(dòng)代碼到工程(這是RealView MDK 相對(duì)是ads1.2的一個(gè)特點(diǎn)它會(huì)自動(dòng)生成相應(yīng)CPU的啟動(dòng)代碼,而且配置啟動(dòng)代碼也很方便后面會(huì)講到。)這里選是

這時(shí)候工程就建好了,啟動(dòng)代碼也有了,下面就看一下這個(gè)啟動(dòng)代碼

啟動(dòng)代碼還不少啊,有1000多行,不要害怕其實(shí)代碼并不多,你可以仔細(xì)看一下,有一多半都是注釋?zhuān)也挥檬謩?dòng)更改代碼就能實(shí)現(xiàn)啟動(dòng)代碼的配置,點(diǎn)上圖中紅色部分的Configuration Wizard就可以圖形方式對(duì)啟動(dòng)代碼進(jìn)行配置

比如要配置看門(mén)狗定時(shí)器就可以選中Watchdog Time Setup,點(diǎn)開(kāi)它左邊的加號(hào)可以進(jìn)行詳細(xì)的設(shè)置,這里圖省事把所有對(duì)鉤都點(diǎn)上。好了啟動(dòng)代碼也配置好了,下面添加led點(diǎn)燈程序,在工程的目錄下新建一個(gè)main.c文件然后把它添加到工程的源文件中來(lái)然后把下面的代碼添加到main.c文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//定義PORTB的控制寄存器地址
#define GPBCON (*(volatile unsigned *) 0x56000010)
#define GPBDAT (*(volatile unsigned *) 0x56000014)
#define GPBUP (*(volatile unsigned *) 0x56000018)
 
 
void delay()
{
	int i, j;
	for(i = 0; i < 10000; i ++)
		for(j = 0; j < 50; j ++);
}
int main()
{
 
	GPBCON = 0x155555;//配置protB的所有引腳為輸出
 
	while(1)
	{
		//點(diǎn)亮第一個(gè)小燈
		GPBDAT |= 0x1E0;
		GPBDAT &= 0x1C0;
		delay();
 
		//點(diǎn)亮第二個(gè)小燈
		GPBDAT |= 0x1E0;
		GPBDAT &= 0x1A0;
		delay();
 
		//點(diǎn)亮第三個(gè)小燈	
		GPBDAT |= 0x1E0;
		GPBDAT &= 0x160;
		delay();
 
		//點(diǎn)亮第四個(gè)小燈	
		GPBDAT |= 0x1E0;
		GPBDAT &= 0x0E0;
		delay();
	}
 
	return 0;
}

好了,代碼都全了,下面配置編譯和連接選項(xiàng),選擇工程屬性

然后選Target選項(xiàng)按下圖設(shè)置

在Output選項(xiàng)中選上Create HEX File就行了,其它的選項(xiàng)先不用管,然后按F7試著B(niǎo)uild下,查看輸出信息,已經(jīng)成功了只有一個(gè)Warning不能管它。

從上圖可以看到hex文件已經(jīng)生成了,還說(shuō)明了代碼大小為920字節(jié),只讀數(shù)據(jù)為16字節(jié),可讀寫(xiě)數(shù)據(jù)為0,ZI數(shù)據(jù)為1256字節(jié)。
好,下面就把它燒到開(kāi)發(fā)板中。還需要配置一下燒寫(xiě)選項(xiàng),還是選擇工程屬性然后選Utilities選項(xiàng)然后在燒寫(xiě)選項(xiàng)中選J-LINK/J-Trace,然后去掉Update Target before Debugging選項(xiàng),最后點(diǎn)Settings添加燒寫(xiě)算法,這里沒(méi)有針對(duì)norflash EN29LV160AB的算法,選一個(gè)相近是AM29F160DBFlash,但是這個(gè)算法只能燒寫(xiě)不能擦除(有興趣的話(huà)可以自己寫(xiě)一個(gè)燒寫(xiě)算法)。
好了萬(wàn)事具備只欠JLINK了,不過(guò)在燒寫(xiě)之前請(qǐng)確認(rèn)你已經(jīng)安裝了JLINK的驅(qū)動(dòng),JLINK的驅(qū)動(dòng)可以到SEGGER官方下載Software and documentation pack V4.14b ,驅(qū)動(dòng)安裝好了以后接上開(kāi)發(fā)板,然后在把開(kāi)發(fā)板的啟動(dòng)方式改為從norflash啟動(dòng),然后啟動(dòng)開(kāi)發(fā)板,最后點(diǎn)Download,如果沒(méi)有意外的話(huà),你就可以看到led的開(kāi)始閃了。

4.RAM調(diào)試跑馬燈程序
光能下載可不行,最主要的是能調(diào)試.其實(shí)RealView MDK的高度功能要比ads1.2好用的多。打開(kāi)工程屬性先Debug選項(xiàng)然后選擇Use J-LINK/J-Trace,然后點(diǎn)Settings,在其中選擇JTAG Speed為Auto Selection,先擇Reset Strategy為Hardware,halt with BP@0。最后選上Run to main(),這樣在調(diào)試的時(shí)候會(huì)自動(dòng)停到main函數(shù)入口。此外不需要一個(gè)調(diào)試初始化文件,這個(gè)文件不用寫(xiě),可以在RealView MDK的例子中找到它,比如在我機(jī)子上是D:\Tool\Electronic\RealViewMdk\ARM\Boards\Samsung\S3C2440\RTX_Blinky下的Ext_ARM.ini,把它拷到工程目錄下然后在Initialization File中選擇它就OK了。

還有一個(gè)地方得改就是程序的內(nèi)存地址,開(kāi)始燒寫(xiě)flash的時(shí)候用的是起始地址為0大小2M的設(shè)置,而這個(gè)地址0對(duì)應(yīng)的正好是norflash的地址。而現(xiàn)在調(diào)試的時(shí)候是直接把代碼載入到內(nèi)存(也就是sdram)中,在s3c2440上它對(duì)就的地址是0×30000000所以要把ROM的起始地址改為0×3000000,相應(yīng)的RAM起始地址改為0×30200000,大小不變。

好了,調(diào)試選項(xiàng)都設(shè)置好了,開(kāi)始調(diào)試,如果沒(méi)有意外的話(huà)會(huì)出現(xiàn)下面所示

可以看到它的調(diào)試環(huán)境很友好,很像vs之類(lèi)的,(熟悉51的同志們一定不陌生啦),左邊是各個(gè)寄存器的值右上是匯編代碼,下面是對(duì)應(yīng)源碼當(dāng)前指針停在main中,可以單步調(diào)試,還可以下斷點(diǎn)。還可以查看內(nèi)存之類(lèi)的信息等。
如果沒(méi)有JLINK還可以用RealView MDK自帶的仿真器方法是在Debug選項(xiàng)中選擇Use Simulator選項(xiàng)就可以了。如果出現(xiàn)了*** error 65: access violation at 0×53000008 : no ‘write’ permission類(lèi)似這樣的的錯(cuò)誤,可以試著去掉啟動(dòng)代碼中的看門(mén)狗和時(shí)鐘的設(shè)置。

關(guān)閉窗口

相關(guān)文章