ARM菜鳥成長(zhǎng)記——之一
其實(shí),在前面的過(guò)程中,一直有寫點(diǎn)什么的沖動(dòng),但是當(dāng)時(shí)困難重重、前途未卜,也沒(méi)了這個(gè)心情?,F(xiàn)在可以坐下來(lái)仔細(xì)總結(jié)下前面的問(wèn)題,有現(xiàn)在都沒(méi)搞明白的,特向大家請(qǐng)教了;有解決掉的,那就說(shuō)說(shuō)經(jīng)驗(yàn)教訓(xùn),給其他人一些參考。首先聲明本人腦瓜笨,邏輯思維差,點(diǎn)一個(gè)燈點(diǎn)了一個(gè)多月,最后還發(fā)現(xiàn)沒(méi)點(diǎn)對(duì)。所以提到的問(wèn)題可能很幼稚,說(shuō)話也好像前言不搭后語(yǔ),有興趣看的那就受累了哈。
本文引用地址:http://m.butianyuan.cn/article/201611/320399.htm先說(shuō)說(shuō)我們的這個(gè)塊板子,裸奔的at91sam9260,外擴(kuò)Norflash、SRAM,實(shí)現(xiàn)程序既可以跑在Norflash中,也可以拷貝到Sram中跑。任務(wù)就一個(gè):控制一個(gè)片外AD,讀出數(shù)據(jù)然后通過(guò)串口發(fā)出。很簡(jiǎn)單的吧,這我都搞了幾個(gè)月呢,你說(shuō)菜不菜吧。以下我將回想整個(gè)的ARM學(xué)習(xí)過(guò)程,涉及到的知識(shí)都是很簡(jiǎn)單的基礎(chǔ)知識(shí),老鳥就不用看了,希望可以幫助到像我一樣的菜鳥。
前三個(gè)月主要是熟悉的過(guò)程,當(dāng)時(shí)完全沒(méi)有想到后面程序的調(diào)試會(huì)如此的困難,想當(dāng)然地認(rèn)為又不上系統(tǒng),無(wú)非是32位的單片機(jī)嘛。板子做回來(lái)一大段時(shí)間內(nèi),元器件都沒(méi)有湊齊,當(dāng)時(shí)傻了呀,應(yīng)該先熟悉熟悉編程環(huán)境,每天就為幾個(gè)破元件折騰,什么都沒(méi)干。
后來(lái)板子焊接好了,才發(fā)現(xiàn)只會(huì)用H-JTAG識(shí)別芯片,其他的什么都不懂。然后開(kāi)始看例程,只玩過(guò)51的我,初次接觸32位的單片機(jī),當(dāng)時(shí)看到AT91C_BASE_PMC->PMC_PCER=(0x1<<3)這樣的語(yǔ)句,竟然不知道是什么意思,一是困惑->代表個(gè)啥?二是為啥寫成0x1<<3的樣子?后來(lái)不知過(guò)了多久才明白,AT91C_BASE_PMC是個(gè)基地址,PMC_PCER是相對(duì)這個(gè)基地址的偏移,移位賦值是為了給32位寄存器賦值的方便。
先說(shuō)說(shuō)開(kāi)發(fā)ARM要用到的軟件以及工具吧,這段時(shí)間我接連使用了IAR、KEIL、h-jtag、JLink,都會(huì)用但是都不精通。最后是在KEIL+Jlink下完成的。
開(kāi)發(fā)工具的選擇:
1、編譯環(huán)境:IAR、KEIL、GCC、……
開(kāi)始我想也沒(méi)想就選擇了IAR,原因很簡(jiǎn)單:ATMEL的例程很都是基于IAR的,而KEIL安裝目錄下的例程很少。匆忙安裝了IAR當(dāng)時(shí)的最新版IAR5.20,完全沒(méi)有考慮可用的資源和交流的方便。然后才發(fā)現(xiàn)IAR5.X跟4.X有很大的不同,主要就是其中的鏈接器從XLINK換成了ILINK,所以配置文件也由XCL文件換成了ICF文件,初看后者好像比前者更簡(jiǎn)單更易懂了,但是由于是新版,使用的人還不多,網(wǎng)上上的參考資料大部分還是基于4.X的,對(duì)于新手哪幾條語(yǔ)句還是很費(fèi)解。
不過(guò)一根筋的我還是硬著頭皮堅(jiān)持使用IAR5.20,直到遇到IAR的殺招:系統(tǒng)從慢時(shí)鐘想快時(shí)鐘切換時(shí)就跑飛了,都是死在lowlevelinit()中的這一句上:AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_CSS_PLLA_CLK;然后將這一句放在主程序中,照死不誤。使用過(guò)程中,總彈出一個(gè)警告,大致意思就是說(shuō):IAR安裝目錄下,bin文件夾下的armlibsupport.dll may be missing or corrupt.重新裝后還是老樣子。在LED閃爍程序上折騰一個(gè)多月未果后,才痛下決心轉(zhuǎn)向KEIL。
用上KEIL才發(fā)現(xiàn)這玩意不是傳說(shuō)中的弱智,相反特別適合我等菜鳥,感覺(jué)主要有三個(gè)方面特別好:?jiǎn)?dòng)代碼的圖形化配置;在Flash跑不需要什么配置文件,直接在option中添兩個(gè)地址值就可以了;只需點(diǎn)擊鼠標(biāo)就可以實(shí)現(xiàn)將代碼從Flash自動(dòng)拷貝到RAM中執(zhí)行,不需要再寫什么代碼拷貝程序了。
GCC,沒(méi)用過(guò),不懂。
2、調(diào)試工具:JLINK、H-JTAG、ULINK、……
開(kāi)始使用h-jtag,配合Wiggler使用,小巧且便宜,不得不佩服Twentyone前輩,在RAM中調(diào)試很方便,也可以通過(guò)H-Flasher將程序下載到Flash跑,使用h-flasher時(shí)要一個(gè)初始化文件,主要是初始化Flash相關(guān)寄存器。
后來(lái)看到DB的JLINK都白菜價(jià)了,就從淘寶買了一個(gè)JLINK,主要是不用再用并口了,現(xiàn)在百元以內(nèi)的JLINK大把,用JLINK是個(gè)不錯(cuò)的選擇,但是調(diào)試片外的flash好像還不能無(wú)限斷點(diǎn)。
ULINK,不太清楚,好像只支持KEIL,不過(guò)沒(méi)用過(guò)。
評(píng)論