歡迎您光臨本站 註冊首頁

ADS

←手機掃碼閱讀     火星人 @ 2014-03-22 , reply:0

ADS 1.2 使用快速入門

一.ADS 1.2 簡介
-------------------------------------------------------

ARM ADS 全稱為 ARM Developer Suite 。是 ARM 公司推出集成開發工具。現在新版本已經改名為RealView Developer Suite.簡稱RVDS .RVDS 2.2 就是MDK. 現在RVDS 4.0 採用Eclipse使用集成開發環境。

但是ADS 1.2 仍然是很多開發人員喜歡用的裸機開發工具,因為安裝后體積小,操作簡單,因此還是很多人在用。

ADS的定位是是針對ARM的專用開發工具.與gcc以及使用gcc的IDE工具的定位有所不同.ADS只能使用自帶的標準C庫/C++庫來進行開發.不能象GCC支持操作系統庫.

ADS合適開發和調試如下項目
? 無操作系統的C程序.這個相當把ARM作為一個32單片機來使用.
? 底層程序.如bootloader
? 能直接調試簡單的操作系統,如uC-OS-II,ucLinux,Nuclues
? 驅動程序和硬體的驗證
? 比如LCD屏的調試,往往先從ADS程序開始測試,一個新的ARM硬體被調試好往往也先用ADS去測試


因此ADS與gcc的應用領域是有所差別的,ADS主要集中比較底層的程序.由於ADS能直接用C來控制硬體,也廣泛用驅動的驗證,硬體功能演示等作用.
在實際應用開發中,市面上最流行的手機方案是MTK,展訊的方案.他們的操作系統是一個嵌入式操作系統Nuclues,CPU的內核採用ARM.
因此,MTK方案的驅動和內核開發環境就是ADS+Nuclues的庫為主.同時也用於應用程序開發,但是他們手機界面程序(MMI)也能通VC++加模擬器的方法來調試.
完整的ADS環境由命令行開發工具, ARM 實時庫, GUI 開發環境 (Code Warrior 和 AXD) ,實用程序和支持軟體組成。 有了這些部件,用戶就可以為 ARM 系列的 RISC 處理器編寫和調試自己的開發應用程序了。



二.ADS開發流程
--------------------------------------------------------------------------

ADS最後鏈接出來的是可執行文件是AXF,它實際上是一個ELF的格式。因此ADS鏈接出來的程序跟LINUX的應用程序結構差不多,只在一些細微的段上有差別.

AXF文件可以直接用ADS的調試器AXD進行在線調試,(在線的意思即不斷電情況下,直接從PC下載,調式,運行)。

如果想燒錄到開發板上,需要轉換成原始的bin文件。才能直接運行。相對於ELF它有兩個變化。第一BIN只有基本的text/bss/data段,沒有調試信息。第二。因為bin要下載到設備的。裡面各段的地址是按相應地址對齊燒錄的。因為兩段之間很可能補一些空間的0空間。


ADS命令行工具有
armcc.exe ARM C編譯器
armasm.exe ARM 彙編編譯器
armcpp.exe ARM C++編譯器
armlink.exe ARM 鏈接接器把上述編譯目標文件鏈接成成AXF
armar.exe ARM 靜態庫製作工具,類似於
fromElf.exe 把AXF 轉換成bin格式。

ADS的IDE實際上也是調用這一些工具來編譯程序。如果你願意,可以寫腳本直接調用命令行工具來編譯。象MTK就是這樣做的,它們寫了一個Makefile腳本來直接調用編譯器來編譯器---因為這個項目文件太多了。。

AXF分區命名

一般的C程序對於程序分區,一般採用TEXT/BSS/DATA這樣的分區.Gcc 的編譯程序文件成功后,最後都會生一個.out或ELF格式的可執行文件,這個文件通常都包含三個段.text,.data和.bss段,運行時,會在進程空間會生成.text,.data.bss和stack,heap五個區.
AXF對於不同程序的分區採用另外命名.跟GCC程序對應,ADS編寫的程序也有兩種狀態,一個保存狀態.對於ELF可執行文件,一種是運行態,對應進程空間分區.

RO段:ReadOnly段的意思,可執行文件段,相當於GCC的text和rodata段
RW段:ReadWrite段,數據段,相當於GCC中的Data段
ZI段,ZeroInit段,未初始化數據段,相當於GCC中的BSS段,而且ZI是RW的一部分。

對於裸機程序,一般在鏈接時要指定 --ro-base,即RO段的起始地址,一般它就是程序最開始段。
因為RO段包含數據和代碼,所以RO BASE不一定等於可執行程序的入口.有時ADS里通常還要手工指定 Image Entry Point,它即可以等於或大於RO BASE的地址



在ADS程序運行中,可以用幾個特殊的變數把RO,RW和ZI段的地址列印出來.
以下均是 unsigned char * 類型,在用列印時需要強制轉入成16進位的地址顯示(即用%x)

 Image$$RO$$Base 表示RO段起始地址
 Image$$RO$$Limit 表示RO段結束地址
 Image$$RW$$Base表示RW段起始地址
 Image$$RW$$Limit 表示RW段結束地址
 Image$$ZI$$Base表示ZI段起始地址
 Image$$ZI$$Limit 表示ZI段結束地址
Uart_Printf("\r\n<***********************************************>\r\n");
Uart_Printf(" S3C6410 Test Program VER1.0\r\n");
Uart_Printf(" Build time is: %s %s\r\n", __DATE__ , __TIME__ );
Uart_SendString(" Mini6410 Andrew Huang \r\n");

Uart_Printf( " Image$$RO$$Base = 0x%x\r\n", Image$$RO$$Base );
Uart_Printf( " Image$$RO$$Limit = 0x%x\r\n", Image$$RO$$Limit );
Uart_Printf( " Image$$RW$$Base = 0x%x\r\n", Image$$RW$$Base );
Uart_Printf( " Image$$RW$$Limit = 0x%x\r\n", Image$$RW$$Limit );
Uart_Printf( " Image$$ZI$$Base = 0x%x\r\n", Image$$ZI$$Base );
Uart_Printf( " Image$$ZI$$Limit = 0x%x\r\n", Image$$ZI$$Limit );
Uart_Printf("<***********************************************>\r\n");

複雜的分區
簡單的AXF的分區,認為程序只有一個RO段,一個RW段。但是在嵌入式程序,很多程序需要更為複雜的分區,可能有好幾個RO分不在同地址。在GCC中,非常規的分段需要ld調用lds腳本來設定,在ADS中,需要調用scatter描述文件來設置.
以下就是6410 test的scatter描述文件內容
可以看到除了傳統的RO,RW外,它還增加了IRAM和ITCM段.
DRAM 0x50200000
{
CODE 0x50200000
{
startup.o (Init,+FIRST)
scatter_load.o (+RO)

* (+RO)
* (+RW, +ZI)
}
IRAM 0x0c000400 0xc00 ;0x0c000000~0x0c0003ff : Exception vector area(Nand Booting)
{
;dmc.o (+RO)
;dmc.o (+RW, +ZI) ; all remaining data
}
ITCM 0x80000000 0x4000
{
; dmc.o (+RO)
dmc_library.o (+RO)
}
DTCM 0x80004000 0x4000
{
; dmc.o (+RW, +ZI)
dmc_library.o (+RW, +ZI)
}
}

三.ADS快速使用手冊
------------------------------------------------------------
一個IDE集成開發環境最重要的操作無非如下向個幾操作

1.新建一個項目
2.向項目增加源碼
3.切換輸出結果
4.配置項目屬性
5.構造程序
6.清除編譯結果(make clean)
7.運行.
8.調試.

下面我們來看下如何做如下操作,請初學者熟記幾個操作.

1.新建一個項目
主菜單 File->New,裡面選擇ARM Executealbe Image,表示要創建一個axf項目

我們在這裡選擇ARM Executable Image,在「Project name:」中輸入工程文件名,本為「myled」,點擊「Location:」文本 Set」按鈕,瀏覽選擇想要保存該工程的路徑(本例為「D:\work」),將這些設置好之後,點擊「 ,即可創建一個新的名為 myled的工程。
注意ADS對中文支持非常不好,強烈建議不在放在中文路徑下面




ADS的項目文件是 mcp.創建成功後會出現空項目窗口




2.向項目增加源碼
把源碼拷入項目目當,在項目窗按右鍵,選擇增加文件



3.切換構造輸出選項
ADS與一般開發環境不一樣的,ADS的項目除了有Debug和Release輸出兩個選項之外,還多出了一DebugRel選項,它與Debug的區別在,DebugRel只有一個基本的調試信息,體積小一點,一般我們在線調試選擇DebugRel的構造結果來調試

切換的方法在項目窗口,右邊的下拉列表選擇相應輸出選項.



? DebugRel:使用該目標選項,在生成目標的時候,會為每一個源文件生成調試信息。
? Debug:使用該目標選項,在生成目標的時候,會為每一個源代碼生成最完整的調試信息。
? Release:使用該目標選項,在生成目標的時候,不會生成任何調試信息。

4.配置項目屬性

一般預設項目是不能直接來編譯的,往往需要對生成的目標進行配置,點擊主菜單Edit 菜單,選擇「DebugRelSetting…」(注意:這個選項會因為用戶選擇的不同目標而有所不同), 或者選擇項目窗口的配置按鈕,出現如圖所示的設置窗口。


基中關鍵幾個配置有
1.ARM Assembler 的編譯選項 這裡要選擇彙編編譯的指令集。不同CPU要選對類型,如S3C2440要選ARM920T.ADS 1.2不支持S3C6410的ARM1172JZF-S的內核,可以昨時用ARM920T或ARM112020E來代替
還有位元組序選擇小端位元組序.



同理道理,如果你的項目包含C或C++的源碼,必須要配置ARM C Compiler選項/ARM C++ Compiler選項.

2.ARM 鏈接選項
這裡LinkType項目,如果Simple類型(即標準只有一個RO,一個RW類型),則需要配置RO_BASE即默認的代碼段地址。RW段地址不填表示緊密排在RO段後面。

另外程序的入口地址可以單獨配置,不寫表示與RO Base地址一致,



如果可以自己初始化啟動的程序,一般最好指定是哪一個S中的哪一個段是作為入口。在layout頁標籤里


如果選擇scatter 輸出類型,必須要還選擇相應的scatter文件路徑。

3.輸出 bin文件格式
這要做兩步設置.首先設置Target Settings中的Post-linker為ARM FromElf




然後在 ARM fromElf再設相應的文件名


5.構造程序
選擇項目窗口的Make,或工具條上Make按鍵



6.清除編譯結果(make clean)
選擇主菜單的project-->Remove Object Code.或用快捷鍵 Ctrl->-.
強出對話框,選擇All Targets



7.8運行和調試高度依賴於具體的調試器

具體請看我的博文:
ADS 下使用簡易JTAG + H-Jtag調試程序 http://blog.chinaunix.net/u3/105675/showart_2388518.html

Windows下 基於ADS+J-Link 的ARM開發環境搭建
http://blog.chinaunix.net/u3/105675/showart_2260143.html

用U-boot進行裸機開發
http://blog.chinaunix.net/u3/105675/showart_2412651.html

[火星人 ] ADS已經有1025次圍觀

http://coctec.com/docs/linux/show-post-101737.html