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