? ? 一、ADS生成bin的方法
Edit》DebufRel settings》Target Settings》Post-Linker》ARM fromELF
然后在ARM FromELF》Plain binary
下面的路徑 似乎不用設(shè)置,空著就ok,我設(shè)了反倒出不來(lái)bin。奇怪。還有就是在代碼框,也要設(shè)置DebufRel settings一遍,好像分開(kāi)的。ok。
二、ARM在ADS1.2調(diào)試的設(shè)置(RAM調(diào)試)
對(duì)于ARM來(lái)說(shuō)調(diào)試程序有兩種方式,1.將程序下載到RAM里仿真.2.下載到FLASH里仿真。下面我們首先說(shuō)一下在RAM里放著的編譯器設(shè)置及調(diào)試代理軟件的使用方法。
首先,安裝ADS12(555,沒(méi)錢(qián)啊有錢(qián)就搞ULINK了在MDK在仿真了),然后去網(wǎng)上隨便down一個(gè),LEDTEST的44B0(我用的是44b0的開(kāi)發(fā)板)例程來(lái)。
然在從網(wǎng)上下載個(gè),H-JTAG或是BANYAN,ARM7都行這些軟件叫做調(diào)試代理軟件,有他們我們就可以用廉價(jià)的WIGGLER或是JTAG(244的)簡(jiǎn)單仿真器,來(lái)實(shí)現(xiàn)一些調(diào)試的絕大部分功能了。
1.打開(kāi)LEDTEST工程文件。然后在Target-》linker項(xiàng)目選擇 ARM linker。
Target-》postlinker項(xiàng)目選擇 ARM formELF
2.在linker-》ARM linker-》simple image選項(xiàng)中的 RO base 中填寫(xiě) 0xc008000 RW base 不填。
?。ㄗ⒁猓哼@項(xiàng)要根據(jù)你的開(kāi)發(fā)板實(shí)際填寫(xiě),我的44B0 SDRAM掛在了bank6上,而bank6的起始地址是0x0c000000,所以我可以添0xc000000以后的地址,但不要太靠后了保證的的程序能放的下,注意不要超出她的范圍,44b0 bank6地址最大為0xe000000)
linker-》ARM linker-》option選項(xiàng)的 image entry point里面 填寫(xiě)鏡像進(jìn)入地址,這里也添0xc008000.
linker-》ARM linker-》layout選項(xiàng)的place at beginning of image 中填寫(xiě)鏡像加載前須處理的文件(該文件一般最后都會(huì)有這條語(yǔ)句“bl Main”跳到主程序處),這里一般填寫(xiě)初始化文件,如INIT的,我的44bo為44binit.S則填寫(xiě)44binit.o文件后面的區(qū)域名添init因?yàn)樵撐募镆话悴恢挂黄饏^(qū)域我的就還有個(gè)ramdata的Area這里的Area是ARM偽指令,關(guān)于偽指令部分可查閱我的另一篇文章。
linker-》ARM fromELG-》output format 是文件輸出格式,是燒寫(xiě)FLASH用的二進(jìn)制文件或是HEX因?yàn)槲覀兪窃赗AM里仿真所有可不填.output file name 也是同樣。
3.運(yùn)行仿真代理軟件,運(yùn)行檢測(cè)CPU,檢測(cè)目標(biāo)板,(【注意】一般要將并口設(shè)置成EEP模式,如果是筆記本的并口可能不支持該模式,則也可以選擇ECP模式(我在我的IBMT43上是可以的),然后還要在設(shè)備管理器的并口設(shè)置里面,設(shè)置成允許使用分配該并口的任何中斷,如果你設(shè)置禁止使用中斷,調(diào)試代理是檢測(cè)不到你的片子的)能檢測(cè)出型號(hào)的就表示連接正確。
然后運(yùn)行AXD開(kāi)始設(shè)置AXD,AXD設(shè)置比較簡(jiǎn)單,在configure interface-》general-》target connection選項(xiàng)中選ATTACH在configure target 里面選擇驅(qū)動(dòng)類(lèi)型,前面運(yùn)行的調(diào)試代理就是在這里選擇的,一般如果用ARM7的調(diào)試代理就設(shè)置第一項(xiàng),第二項(xiàng)是軟件仿真,如果用其他代理則點(diǎn)ADD,選擇調(diào)試代理的DLL文件,一般在安裝后的文件目錄里都能找到,完成后點(diǎn)configure 看看有沒(méi)有跳出代理的窗口,好完成。
現(xiàn)在你就可以加載image文件來(lái)仿真程序了。
順便說(shuō)下,在RAM仿真時(shí),我的機(jī)器是筆記本,有個(gè)并口,不過(guò)不支持EEP只支持ECP我選的ECP然后用banyan和h-jtag都好用,但是ARM我沒(méi)連成功,估計(jì)可能是接口的問(wèn)題。
三、ADS路徑問(wèn)題
以前寫(xiě)代碼的時(shí)候都是形如:
#include “。.inc44b.h”
#include “。.inc44blib.h”
后來(lái)發(fā)現(xiàn),在ads里面工程屬性-》target-》access path里面勾選上Always Search User Paths就可以這樣了~~~哎,發(fā)現(xiàn)的好晚啊~~~
#include “44b.h”
#include “44blib.h”
四、關(guān)于ADS的軟件仿真
在ADS中點(diǎn)“debug”,打開(kāi)AXD,選option——》Configure taget——》選擇ARMUL,然后,在“ARMTDMI”上點(diǎn)右鍵,“Load Image”,去打開(kāi)編好的axf文件。
五、ADS中查找函數(shù)的方法
在ADS中,環(huán)境下編寫(xiě)程序時(shí),右鍵單擊一個(gè)函數(shù)名選擇“go to definition”以后,可到其函數(shù)原型處。查看search的下拉菜單,有“go back”或快捷鍵(cttl+shift+b) 可回到原位置。
六、Error : A1163E: Unknown opcode SOURCE.S line 46
Answer:
查看是否用了中文的標(biāo)點(diǎn)符號(hào)(,;等),
若是標(biāo)識(shí)符(定義的變量,常量等)要頂格寫(xiě),其后面不能跟:
若是指令不能頂格寫(xiě)
七、Error : A1150E: Bad symbol SOURCE.S line 49
49 00000070 LDR R1,=INTMAK ; 設(shè)置中斷屏蔽寄存器,只允許定時(shí)器0中斷
A: LDR R1,=INTMAK 指令中INTMAK未定義。而是定義了INTMASK(INTMASK EQU 0x3FF4008)
八、C_CALL_ASM
問(wèn)題:在ads1.2中按下F7調(diào)試好后,按下F5或者(Ctl+F5)進(jìn)入AXD,跳出來(lái)的不是C源程序或匯編程序文件,而是disassembly的窗口。之后也不知道處理如何進(jìn)入源代碼的窗口。
原因:ADS ARM Linker下沒(méi)有設(shè)置Place at begining of image,這里要設(shè)置映象文件的入口段,就是ResetEntry所在的那個(gè)代碼段
解決方案:Edit/DebugRel Setting/ARM Linker/Layout/Place at beginnig of image
的Object/Symbol框中填入在Options中設(shè)置的入口地址(Image entr point)
九、進(jìn)入AXD后 fileLoad image 菜單是不可用的灰色狀態(tài)
解決方案:
OptionsConfigure target
選擇其中一個(gè)調(diào)試器,默認(rèn)的已選ARMUL,直接按OK即可
十、Error:(Fatal)L6015:Could not any input file to link
文件沒(méi)有添加到工程文件中
解決:切換到工程文件界面,右鍵單擊Add file
十一、Error:L6207E:Invalid argument for -keep/-first/-last command:‘0x8000’
解決:Edit/DebugRel Setting/ARM Linker/Layout/Place at beginnig of image
的Object/Symbol框中填入在Options中的入口地址值沒(méi)設(shè)置正確,改為entry后符號(hào)地址即可
十二、#include file wouldn‘t open
將#include 改為#include “ucos_ii.h”
《》編譯器從標(biāo)準(zhǔn)庫(kù)路徑開(kāi)始搜索
“”編譯器從用戶(hù)的工作路徑開(kāi)始搜索filename.h ,如果沒(méi)有找到再?gòu)臉?biāo)準(zhǔn)庫(kù)路徑開(kāi)始搜索 filename.h
十三、Warning: L6304W: Duplicate input file E:armAppMyUartMyUart_DatadebugRelObjectCode****.o ignored
解決:DebugRelObjectCode里的****.o文件重復(fù)輸入,原來(lái)是我把.s文件和.c文件取了相同的名字,它們都會(huì)生成.o文件,名字相同的話,就重復(fù)了。改成不同名字就OK,可能還有其他辦法,比如讓.C文件不生產(chǎn).O文件,不過(guò)沒(méi)試過(guò),等下次熟悉ADS后再玩。
十四、ADS中,make編譯,產(chǎn)生數(shù)據(jù)容量表:
方法:ADS》》debugrel setting》》linker》》ARM linker》》listings》》Total,打鉤。
十五、H-JTAG仿真時(shí)的設(shè)置問(wèn)題。
打開(kāi)H-JTAG軟件,檢測(cè)到cpu后(選dectection),在AXD中》options》configure target》add。。。》選擇H-JTAG安裝目錄下的H-JTAG.DLL文件,最后,載入映像文件,ok。
評(píng)論