项目ADS开发环境入门指南.docx
- 文档编号:23382806
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:14
- 大小:304.72KB
项目ADS开发环境入门指南.docx
《项目ADS开发环境入门指南.docx》由会员分享,可在线阅读,更多相关《项目ADS开发环境入门指南.docx(14页珍藏版)》请在冰豆网上搜索。
项目ADS开发环境入门指南
615项目ADS开发环境入门指南
所属项目
615项目
编写时间
2013.06.21
版本号
V1.0
审核时间
编写者
蒋永刚
批准时间
一、ADS简介
ADS是ARM公司官方发布的开发环境,目前已经停止更新,最新支持ARM11内核。
ADS相对其他第三方开发环境,代码优化和稳定性比更好,支持比较多的仿真工具,但是不支持gcc格式的汇编语言。
二、新建工程
点击菜单File->New,出现新建对话框。
新建对话框中可以选择新建工程、文件和其他对象。
在新建工程页面中,第一项表示工程最终生成一个可执行的文件,第二项表示生成的是静态库,一般来说使用最多的是前两项。
ADS也可以导入makefile类型的工程(典型的如gcc工程),使用第四项选项进行导入,但导入之后,需要修改makefile,使用ADS的编译工具链代替原先的编译工具。
同时,正如第一章所说,导入gcc工程之后,所有的汇编语言文件需要进行修改才能在ADS下进行编译。
具体移植的方法,见附录。
在右方输入projectname,就可以在指定目录下建立工程目录。
接下来就是往工程中添加文件了。
三、添加文件
新建工程后,主页面里有三个选项卡:
Files,LinkOrder和Targets。
在Filet选项卡空白处右键,会弹出菜单
第一个菜单项用来加入已经存在的源代码文件,可以一次加入多个文件;第二个菜单项用于建立目录,在工程文件比较多的时候,使用不同的目录可以方便管理。
另外,还可以用点击左上角“新建”快捷按钮
直接新建一个空白文档,并编写代码保存在工程目录下,然后使用上面的方式添加到工程中。
四、配置工程属性
将主选项卡切换到Tatgets页。
ADS默认的工程有三个Targets配置可选,Release是发布版本,不包含调试信息,生成的程序文件较小;Debug是调试版本,包含很多调试信息,生成的程序文件较大;DebugRel则是比较灵活的方式。
三个Targets图标前面的黑色→表示这是目前编译和生成的配置。
要切换Tatgets,在选项卡上方的下拉列表框中进行操作。
选择了Tatgets的之后,需要对它进行配置。
双击想要配置的Tatgets,弹出配置对话框。
对话框里左边列表中有很多配置选项,但并不是所有都需要配置,一般来说,ARMAssembler、ARMCCompiler、ARMC++Complier、ARMLinker、ARMDebugger都是要配置的,而TatgetSettings、ARMfromELF这两个会根据需要进行配置。
4.1TargetSettings
一般不需要修改,如果需要生成bin文件或者elf文件时,将Post-linker下拉列表选为ARMfromELF。
4.2ARMfromELF
和4.1相对应的,一般情况下不需要修改,如果需要生成bin文件或者elf文件时,在OutputFormat中选择相应的格式,在Outputfilename中填写文件名。
4.3ARMAssembler/ARMCCompiler/ARMC++Complier
这三个配置比较相似,以ARMCCompiler为例说明。
配置页面有多个选项卡,一般需要配置的是TatgetandSource、Debug/Opt两个选项卡。
在TatgetandSource选项卡下,ArchitectureorProcessor指定ARM核心版本,FloatingPoint选择浮点类型;在Debug/Opt选项卡下,Optimizationlevel指定优化级别,Minimum选项不进行优化,在调试时的代码可读性最强;All选项进行最大程度优化,一般调试时就没办法根据源代码来调了;Most是两者均衡。
我建议调试时使用Minimum,待发布时再改用All。
它旁边的选项,用于决定是对空间还是时间加以优化,根据需求选择吧。
4.4ARMlinker
ARMlinker配置对话框,用于配置可执行文件的链接,如果生成的是静态库的话就不用配置。
它也有多个选项卡,一般要修改的是Output和Listings两个。
Output选项卡是配置链接选项。
Linktype选择链接的类型,Partie是分段链接,Simple是最简单的链接方式,即所有段都放到一块;Scattered是根据scf脚本文件进行链接。
一般来说,简单的工程,如所有代码都加载到SRAM,并且只用到SRAM地址空间的,可以选择simple,设置好ROBase,即可执行文件的起始地址,RWBase,即数据段的起始地址即可。
而稍微复杂点的工程,推荐使用scf脚本文件。
Listings选项卡中是选择符号列表,即显示链接时变量、数据结构、函数等的链接地址信息,各个段的信息等。
4.5ARMDebugger
ARMDebugger配置对话框用于配置调试时的选项。
一般来说,这里只需要修改一个地方:
EquivalentCommandLine。
在这里,将启动调试时的命令行代码变成axd-nologo-script..\..\DebugSetting.txt,这样每次启动调试,都会运行名为DebugSetting.txt的调试脚本。
这个脚本可以在程序运行之前,对下位机平台做一些初始化的动作,比如初始化时钟、SDRAM等。
对于调试脚本的详细介绍见本文第六节。
五、链接脚本
ADS的链接脚本是scf后缀的文本文件,名字叫scatter,意思是分散加载描述文件。
一个简单的scf的例子如下:
ROM_LOAD0xE0000004
{
ROM_EXEC0xE0000004
{
init.o(STARTUP,+FIRST)
*(+RO)
}
IRAM_DATA0x08000000
{
*(+RW)
}
IRAM_ZI+0
{
*(+ZI)
}
}
Scatter脚本文件由区组成,主要分为三种区:
加载区、执行区和输入区。
一般scatter文件中只用到加载区和执行区。
每个区由一对“{}”包起来,一个区的简单定义如下:
名称地址长度
{
内容
}
在scatter文件最外层的区是加载区,执行区一般包含在加载区内部。
加载区的地址是本区内所有执行区的加载地址,执行区的地址是该区的执行地址。
名称是用户自定义的字符串符号,这个符号可以在程序中引用。
例如对于名称为IRAM_DATA的执行区,经过ADS编译后,会产生一些变量,依次表示IRAM_DATA区的加载地址、运行地址和长度。
在汇编语言里,这三个变量名为|Load$$IRAM_DATA$$Base|、|Image$$IRAM_DATA$$Base|和|Image$$IRAM_DATA$$Limit|,可以用以下方法加以引用:
IMPORT|Load$$IRAM_DATA$$Base|
LDRr0,=|Load$$IRAM_DATA$$Base|
在C语言里,这三个变量名为|oad$$IRAM_DATA$$Base、Image$$IRAM_DATA$$Base、Image$$IRAM_DATA$$Limit,可以用以下方法加以引用:
externunsignedcharImage$$ROM_EXEC$$Base;
unsignedint*dst=(unsignedint*)&Image$$IRAM$$Base;
注:
使用变量时,要对变量取地址,而不是直接取值。
执行区地址+0表示地址紧接着上面的段。
长度如果不加以指定,则以实际链接时为准。
内容是指定哪些段(伪指令section,AREA定义)该放到这个执行区中。
一般来讲,代码段(包括代码和const型变量)用*(+RO)表示,数据段(包含所有定义了初始值的变量)用*(+RW)表示,末初始化变量段用*(+ZI)表示。
六、调试脚本
ADS的调试脚本是一个文本文件,下面以一个简单的调试脚本为例,解析脚本文件的简单应用。
Setmem0x400280100x4000000032
Setmem0x400280040x4000000432
Setmem0x4002802c0x0000002832
memory0x8000c000
Ldkickstart_nor_boot_nand.axf
这是一个简单的脚本文件例子,整个脚本只有三种语句:
Setmem,memory和ld。
Setmem是写地址,memory是读地址,ld是开始执行调试镜像。
Setmem的语法是setmem地址值字长。
地址和值都是16进制数,字长是指写入的位数,32指32位,即4个字节。
Memory的语法是memory地址,用于将该地址的值显示出来。
Ld的语法是ld文件名,用于启动需要调试的镜像,这个镜像是ADS编译后产生的axd调试文件。
七、仿真器安装配置
周立功的AK100仿真器是ARM平台在线仿真器,最高支持ARM11核心,支持ADSAXD仿真协议。
要使用ADS+AK100进行在线调试,需要经过两个步骤:
仿真器驱动安装和AXD目标配置。
7.1仿真器程驱动安装
运行TKScopeSetup_ARM.EXE和vcredist_x86_cn_XP.exe,这两个是AK100的主程序。
安装之后,记住安装路径,在这里记为TKSCOPE。
将AK100仿真器通过USB连接到PC,此时跳出找到新硬件的对话框,选择手动安装,并且指定搜索目录。
将搜索目录定位到TKSCOPE\TKScope\Driver\AK100Driver\WinXP,然后系统会自动安装好AK100仿真器的USB驱动。
7.2AXD目标配置
AK100的驱动安装完成之后,点击快捷按键中的Debug
,ADS会调用AXD进行在线调试。
AXD初次运行会弹出错误提示:
这时候选择Configure,弹出仿真驱动对话框:
点击Add按钮,选择TKSCOPE\TKScope目录下的TKSCP_DRV_for_RDI.dll
然后点击Configure按键,弹出配置目标对话框:
先点击硬件选择,往下拉,选择NXP->LPC2387->AK100;再点击硬件自检,如果自检都通过,则说明配置成功,点击确定返回,再次点击确定,然后关闭AXD,重新在ADS里启动调试就可以开始正常调试了。
八、AXD调试工具
AXD是ADS配套的在线调试工具,界面比较简陋,但是功能还是非常强大的。
AXD的主界面如上图所示。
AXD初始显示的界面是上图是不一样的,但可以通过配置来自定义界面的元素。
这些是AXD常用的快捷按键。
是显示寄存器,
是查看特定变量值,
是查看当前堆栈下的变量和全局变量,
是查看函数调用栈,
是显示内存,
是显示工程中的文件,
是显示Log,
是命令行,
是添加和删除断点,
是调试动作,分别表示直接运行,暂停,单步进入,单步跳过,跳到函数外,执行到当前位置。
在上图的右键菜单中有一项InterleaveDisassembly,是在代码中显示汇编语言,即源代码每行编译的结果,一般可以去掉不看。
附:
GCC汇编向ARM汇编移植入门
1.注释的修改,gcc格式和c语言习惯一样,而ARM汇编则是用;来实现的,需要全部变掉。
2.段的定义,gcc中使用.code,.section等定义,而在ARM的定义方式如下:
CODE32
GLOBAL_start
AREAvectors,CODE,READONLY
ENTRY
3.代码标志,在gcc中是类似
_armboot_start:
这样的代码,但是在ARM汇编中变成了
_ARMBOOT
这样的,去掉了冒号,注意没有缩进。
一般代码是有缩进的。
4.一些伪代码,比如变量定义,gcc中是.word,而ARM汇编里是DCD,宏定义在gcc中是#define,而ARM汇编中则用EQU代替,声明外部变量,gcc是.globle,ARM汇编中使用GLOBAL,或者IMPORT关键字。
。
5.gcc汇编中使用#include可以包含C语言格式的头文件,虽然arm汇编中也有类似关键字GET,但是它是不兼容C语言格式的变量和宏定义的,因此需要修改相应的定义方式。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 项目 ADS 开发 环境 入门 指南