在 ADS 程序运行中 , 可以用几个特殊的变量把 RO,RW 和 ZI 段的地址打印出来 .
以下均是 unsigned char * 类型 ,在用打印时需要强制转入成16进制的地址显示(即用%x)
l Image$$RO$$Base 表示 RO 段起始地址
l Image$$RO$$Limit 表示 RO 段结束地址
l Image$$RW$$Base 表示 RW 段起始地址
l Image$$RW$$Limit 表示 RW 段结束地址
l Image$$ZI$$Base 表示 ZI 段起始地址
l 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