1. ADS1.2简介
ADS开发环境是ARM公司较早推出的ARM核微控制器集成开发工具,英文全程为ARM Developer Suite,成熟版本为ADS1.2。ADS1.2支持ARM10之前的所有ARM系列微控制器,支持软件调试以及JTAG硬件仿真调试,支持汇编、C和C++源程序,具有编译效率高、系统库功能强等特点,可以在Windows98、WindowsXP、Windows2000以及RedHat Linux上运行。
2. ADS1.2集成开发环境的组成简介
ADS1.2由6个部分组成,如下表所示。
表4.3-1 ADS1.2的组成部分
名称 代码生成工具 集成开发环境 调试器 指令模拟器 ARM开发包 ARM应用库 描述 ARM汇编器,ARM的C、C++编译器,Thumb的C、C++编译器,ARM连接器 Code Warrior IDE AXD,armsd ARMulator 一些底层的例程,实用程序(如fromELF) C、C++函数库等 使用方式 由Code Warrior IDE调用 工程管理,编译连接 仿真调试 由AXD调用 实用程序由Code Warrior IDE调用 由用户程序调用 3. 操作步骤
选择Windows操作系统的“开始”->“程序”->ARM Develop Suite v1.2->CodeWarrior for ARM Develop Suite命令启动Metrowerks CodeWarrior,或者双击CodeWarrior for ARM Develop Suite快捷方式启动。启动ADS1.2 IDE如图1所示。
图 1 启动ADS1.2 IDE
单击菜单File,选择New菜单项即弹出New对话框,如图2所示。
图2 New对话框
选择工程模板为ARM可执行映像(ARM Executable Image),Thumb可执行映像(Thumb Executable Image),或者Thumb和ARM交织映像(Thumb ARM Interworking Image),然后在Location项选择工程存放路径,并在Project Name项输入工程名称,单击“确定”按钮即可建立相应工程,工程文件后缀为.mcp,具体如图3.
图3 新建工程
会弹出test1.cmp工程管理对话框,,此时没有文件,管理文档的对话框时空的,点击File下的New,选择File新建文件,,里面可选的只有Text File,c语言的加.C后缀,ARM汇编或是Thumb汇编用.s后缀,如图4
图4 新建文件
在回看工程管理文件,里面多了新建的test.s文件,图5
图5
在test1.s中输入汇编代码,具体如下
图 6
4. 编译连接工程
如图7所示为工程窗口中的图标按钮,通过这些图标按钮,用户可以快速的进行工程设置、编译连接、启动调试等等(在不同的菜单项上可以分别找到对应的菜单命令)。它们从左到右分别为:
✓ DebugRel Settings:工程设置,如地址设置、输出文件设置和编译选项等,其中
DebugRel为当前的生成目标。
✓ Synchronize Modification Dates:同步修改日期,检查工程中每个文件的修改日期,
若发现有更新,则在Touch栏标记“√”。 ✓ Make:编译连接(快捷键为F7)。
✓ Ddebug:启动AXD进行调试(快捷键为F5)。 ✓ Run:启动AXD进行调试,并直接运行程序。
✓ Project Inspector:工程检查,查看和配置工程中源文件的信息。
单击DebugRel Settings图标按钮,即可打开DebugRel Settings设置窗口,进行工程的地址设置、输出文件编译选项设置等工作,如图8所示。
图7 工程窗口中的图标按钮
在DebugRel Settings设置窗口左侧单击Linker中的ARM Linker选项,可以进行连接属性设置。
1. 程序的加载方式:程序的加载方式一般有简单设置和分散加载两种方法。 a) 简单设置
单击Output标签,在Linktype一栏中选择Simple,在RO Base栏中直接写入程序代码段的下载地址(如片内RAM地址0x2000,0000),见图8。这种简单设置方法多用于代码尺寸比较小的,简单放置在片内RAM中即可的应用。 备注
一般来讲RO指程序之中的代码,RW指程序中的数据。
图8 简单设置程序代码下载地址
b) 分散加载
单击Output标签,在Linktype一栏中选择Scattered,Scatter栏中单击“choose”按钮,选择相应的分散加载文件打开,见图9。分散加载方式需要编写分散加载文件*.scf,在分散加载文件中,用户可以详细的规划设置不同的代码段在存储系统中的下载位置。分散加载文件的编写方法可以详见ADS的用户手册。
图9 设置分散加载文件
2. 设置程序入口地址
单击Options标签,在Image entry point一栏中设置程序的入口地址。程序的入口地址是指代码通过Multi-ICE仿真器下载到硬件板卡上的存储器之后,用户调试程序之前PC指针所指向的地址。一般将入口地址设置为中断向量表代码的起始地址。中断向量表部分代码被下载到片内RAM,所以入口地址设置为片内RAM的起始地址0x2000,0000,见图10。
图10 设置入口地址
3. 设置映像文件分布顺序
当程序的加载方式为简单设置时,单击Layout标签,用户可以自行设置应用程序中不同的段在连接器生成映像文件的分布位置。
在Place at beginning of image栏可以设置将程序中某一段放置在映像文件的起始部分,即程序代码首先执行的部分。一般情况下需要把应用代码中有关复位和中断向量表的部分的代码放在起始部分,见图11。
图11 设置映像文件分布
在Place at end of image栏,用户可以设置将程序中某一段放置在映像文件的最后。建议将RW段中包含校验码的部分代码放在映像文件最后。一般情况下,Place at end of image栏可以不添,保持空白。 对于简单的软件调试,可以不进行连接地址的设置,直接单击工程窗口的Make图标按钮,即可完成编译连接。
当编译出错时,ADS会有相应的出错提示,双击出错提示行提示,编辑窗口即会使用光标指出当前出错的源代码行,编译连接输出窗口如图12所示。同样,用户可以在Project菜单中找到相应的命令。
图12 编译连接输出窗口
点击Debug提调试按键,进入AXD调试器,如图13
图 13
点击Option菜单栏下的Configure Target,弹出Choose Target对话框,如图14, 在没有添加其它仿真驱动程序前,Target标签中只有两项,分别为ADP(JTEG硬件仿真器)和ARMUL(软件仿真)
图14 Choose Target对话框
选择仿真驱动程序之后,单击File选择Load Image加载*.ELF格式的可执行文件,即*.axf文件。
备注: 当工程编译连接通过之后,在“工程名\\工程名_Data\\当前的生成目标”目录下就会生成一个*.axf文件。比如工程test1,当前的生成目标为DebugRel,编译连接通过之后,则在F:\\文档\\桌面文档\\ARM编程\\ARM3章例题\est\est1\est1_Data\\DebugRel目录下生成test1.axf文件。
5. 设置被调试处理器属性
映像文件被加载到硬件板卡上之后,用户还可以在AXD环境下设置目标处理器目标(target)的属性,在AXD中,option菜单下的Configure Processor…,或者鼠标右键单击Targrt标签下的处理器内核(如ARM7TDMI_0)标记并选择“properties”,都可以打开处理器属性设置窗口,见图15/16。
在处理器属性设置窗口的vector catch一栏中,用户可以设置AXD调试器对某种特殊的ARM处理器异常进行截取,并将相应信息反馈给用户方便调试。AXD的默认设置为“R、U、s、P、D、i、f”,它们分别代表7种不同的异常,大写字母表示该种异常被截取。7个字母所分别代表的异常罗列如下:
R 复位模式 U 未定义模式 S 软件终端模式 P 预取址中止 D 数据中止
I 普通中断(IRQ)
F 快速中断(FIQ)
一般情况下,为了减少调试出错的几率,用户可以取消所有的异常截取功能,即将7个字母上方空格中的“√”全部取消。
图15 设置处理器属性-1
图16 设置处理器属性-2
6.调试工具条
AXD运行调试工具条如图17所示,调试观察窗口工具条如图18所示,文件操作工具条如图19所示。
图17 运行调试工具条
图所示工具条中相关按钮含义如下:
全速运行(Go)。 停止运行(Stop)。
单步运行(Step In),与Step命令不同之处在于函数调用语句,Step In命令将进入
该函数。
单步运行(Step),每次执行一条语句,这时函数调用将被作为一条语句执行。 单步运行(Step Out),执行完当前被调用的函数,停止在函数调用的下一条语句。 运行到光标(Run To Cursor),运行程序直到当前光标所在行时停止。 设置断点(Toggle Break Point)。
图18 调试观察窗口工具条
打开寄存器窗口(Processor Registor)。 打开观察窗口(Processor Watch)。 打开变量观察窗口(Context Variable)。 打开存储器观察窗口(Memory)。 打开反汇编窗口(Disassenbly)。
图19 文件操作工具条
加载调试文件(Load Image)。
重新加载文件(Reload Current Image)。由于AXD没有复位命令,所以通常使用
Reload实现复位(直接更改PC值为0也能实现复位)。
最后,祝大家调试成功
因篇幅问题不能全部显示,请点此查看更多更全内容