ARM汇编编程基础(四) -- ADS开发环境的使用
2012-09-25 23:00
369 查看
本系列文章节选自本人所著《深入浅出嵌入式底层软件开发》。
掌握了基本的汇编指令和伪操作后,就具备了编写简单ARM汇编程序的基本理论能力,不过要实战得到真实可执行的程序,还需要可以对程序进行编辑和编译的开发环境(命令行编译器或IDE)的支持,同时程序在开发过程中免不了要进行调试,这就需要调试器的支持。一般而言,会有供应商将程序的编辑器、编译器、调试器以及其它一些辅助工具组合在一起,形成程序的开发、调试集成开发环境(IDE)软件,提供给程序开发人员使用。对ARM程序开发而言,目前比较流行的IDE有2套:运行于Windows平台的ADS和运行于Linux平台的gcc等交叉编译工具链。总的来看,ADS在程序的编译和调试方面要比gcc使用起来方便很多,也更容易掌握和使用,因此针对初学者,本书现在将展示ADS的使用。
在进行下面的学习之前,请自行在Windows主机上安装ARM公司出品的ads1.2这个集成开发环境软件。
首先使用CodeWarrior对程序进行编辑和编译,过程如下:
1. 建立工程
n 在磁盘里新建一个目录“D:\arm”
n 打开ADS软件
n 点击工具栏“File”,下拉点击“New…”
图1 - 7 新建工程
2. 选择工程类型
图1 - 8 选择工程类型
3. 输入工程名称及其目录
图1 - 9 输入工程名称及其目录
4. 工程建立后的情形
图1 - 10 工程建立后的情形
5. 新建工程后的目录
图1 - 11 新建工程后的目录
6. 新建源文件并加入工程与target
图1 - 12 新建源文件并加入工程与target
7. 编辑汇编和C的源代码
图1 - 13 编辑汇编源代码
图1 - 14 编辑C源代码
8. 编译源代码及其结果显示
图1 - 15 编译(make)菜单
图1 - 16 编译结果
以上是最普通(也是最简单)的源代码编辑和编译过程。但在很多时候,在Make之前都需要对编译和链接选项进行设置,下面对常用的设置进行演示。
进入编译链接设置
图1 - 17 进入编译链接设置
目标设置
图1 - 18 目标设置
该设置的含义是:将来生成不含任何其它信息(即:只有代码段和数据段)的代码时,其来源自ELF格式的代码
汇编选项设置
图1 - 19 汇编选项设置
该设置的含义是:运行裸机代码的目标机的ARM CPU类型
C编译器选项设置
图1 - 20 C编译器选项设置
该设置的含义同前一个设置,不同处在于:前一个针对的是汇编源代码,这一个设置针对的是C源代码
文件输出设置
图1 - 21 文件输出设置
该设置的含义:设置ELF格式的二进制文件经过转换后得到的二进制文件的格式为Plain binary(只包含纯粹的代码和数据,不包含ELF头)
l 设置断点及单步运行与调试;
l 查看各种模式下的CPU寄存器;
l 查看内存内容;
l 查看C语言变量;
先对调试器axd(从ARMDeveloper Suite v1.2->AXD Debugger进入)进行设置,以使用正确的模拟开发板ARMUL
图1 - 22 配置目标菜单
图1 - 23 配置目标
完成上面的设置后,下面就展示如何使用AXD对程序进行调试:(示例代码在光盘\work\armarch\ledcircle中)
1. 使用ads打开ledcircle.mcp工程
2. 单击菜单project->debug
图1 - 24 调试界面
3. 单击Porcessor Views->registers,注意窗口左上部分
图1- 25 进入查看CPU寄存器
4. 展开Current,可发现当前模式处于SVC模式,并可查看当前模式下,CPU的各个寄存器的值,例如r13=0,pc=0x8000
图1 - 26 查看CPU寄存器
还可查看其它模式下,CPU各寄存器的值
5、单击Execute->step,可以单步运行程序
图1 - 27 单步执行结果
此时发现pc值增加了4,而r13的值也由于ldr指令的赋值操作变为了0x34000000
6. 单击Execute->step-in,可以单步跟踪进入子程序
图1 - 28 单步跟踪进入子程序
7. 按1次F8,单击ProcessorViews-〉Memory
图1 - 29 进入查看内存
8. 在Memory Start addr处输入0x56000010后按回车(enter)键。再按1次F8,可以看到内存0x56000010处的值变为了0x00015400
图1 - 30 查看内存变化
9. 单击Processor View-〉Variables可查看各种C变量(例如局部变量i)的值
图1 - 31 查看变量
10、单击Execute-〉ToggleBreakpoint,设置断点
图1 - 32 设置断点
11、继续单步执行程序,当程序再次回到断点是,观察i的值已经变为1了
图1 - 33 在断点处查看变量
本系列文章,所需代码请从以下地址下载:
http://download.csdn.net/download/scyangzhu/4602585
掌握了基本的汇编指令和伪操作后,就具备了编写简单ARM汇编程序的基本理论能力,不过要实战得到真实可执行的程序,还需要可以对程序进行编辑和编译的开发环境(命令行编译器或IDE)的支持,同时程序在开发过程中免不了要进行调试,这就需要调试器的支持。一般而言,会有供应商将程序的编辑器、编译器、调试器以及其它一些辅助工具组合在一起,形成程序的开发、调试集成开发环境(IDE)软件,提供给程序开发人员使用。对ARM程序开发而言,目前比较流行的IDE有2套:运行于Windows平台的ADS和运行于Linux平台的gcc等交叉编译工具链。总的来看,ADS在程序的编译和调试方面要比gcc使用起来方便很多,也更容易掌握和使用,因此针对初学者,本书现在将展示ADS的使用。在进行下面的学习之前,请自行在Windows主机上安装ARM公司出品的ads1.2这个集成开发环境软件。
1.4.1 在ADS中进行裸机程序的编辑、编译、运行
ADS集成开发环境,主要由编辑、编译器Code Warrior和调试器AXD组成。首先使用CodeWarrior对程序进行编辑和编译,过程如下:
1. 建立工程
n 在磁盘里新建一个目录“D:\arm”
n 打开ADS软件
n 点击工具栏“File”,下拉点击“New…”
图1 - 7 新建工程
2. 选择工程类型
图1 - 8 选择工程类型
3. 输入工程名称及其目录
图1 - 9 输入工程名称及其目录
4. 工程建立后的情形
图1 - 10 工程建立后的情形
5. 新建工程后的目录
图1 - 11 新建工程后的目录
6. 新建源文件并加入工程与target
图1 - 12 新建源文件并加入工程与target
7. 编辑汇编和C的源代码
图1 - 13 编辑汇编源代码
图1 - 14 编辑C源代码
8. 编译源代码及其结果显示
图1 - 15 编译(make)菜单
图1 - 16 编译结果
以上是最普通(也是最简单)的源代码编辑和编译过程。但在很多时候,在Make之前都需要对编译和链接选项进行设置,下面对常用的设置进行演示。
进入编译链接设置
图1 - 17 进入编译链接设置
目标设置
图1 - 18 目标设置
该设置的含义是:将来生成不含任何其它信息(即:只有代码段和数据段)的代码时,其来源自ELF格式的代码
汇编选项设置
图1 - 19 汇编选项设置
该设置的含义是:运行裸机代码的目标机的ARM CPU类型
C编译器选项设置
图1 - 20 C编译器选项设置
该设置的含义同前一个设置,不同处在于:前一个针对的是汇编源代码,这一个设置针对的是C源代码
文件输出设置
图1 - 21 文件输出设置
该设置的含义:设置ELF格式的二进制文件经过转换后得到的二进制文件的格式为Plain binary(只包含纯粹的代码和数据,不包含ELF头)
1.4.2 在AXD中进行裸机程序调试的方法与步骤
在完成程序的编译、链接生成二进制可执行文件后,很多情况下需要对程序进行调试,ADS采用的调试工具是AXD,在调试中,我们可以完成:l 设置断点及单步运行与调试;
l 查看各种模式下的CPU寄存器;
l 查看内存内容;
l 查看C语言变量;
先对调试器axd(从ARMDeveloper Suite v1.2->AXD Debugger进入)进行设置,以使用正确的模拟开发板ARMUL
图1 - 22 配置目标菜单
图1 - 23 配置目标
完成上面的设置后,下面就展示如何使用AXD对程序进行调试:(示例代码在光盘\work\armarch\ledcircle中)
1. 使用ads打开ledcircle.mcp工程
2. 单击菜单project->debug
图1 - 24 调试界面
3. 单击Porcessor Views->registers,注意窗口左上部分
图1- 25 进入查看CPU寄存器
4. 展开Current,可发现当前模式处于SVC模式,并可查看当前模式下,CPU的各个寄存器的值,例如r13=0,pc=0x8000
图1 - 26 查看CPU寄存器
还可查看其它模式下,CPU各寄存器的值
5、单击Execute->step,可以单步运行程序
图1 - 27 单步执行结果
此时发现pc值增加了4,而r13的值也由于ldr指令的赋值操作变为了0x34000000
6. 单击Execute->step-in,可以单步跟踪进入子程序
图1 - 28 单步跟踪进入子程序
7. 按1次F8,单击ProcessorViews-〉Memory
图1 - 29 进入查看内存
8. 在Memory Start addr处输入0x56000010后按回车(enter)键。再按1次F8,可以看到内存0x56000010处的值变为了0x00015400
图1 - 30 查看内存变化
9. 单击Processor View-〉Variables可查看各种C变量(例如局部变量i)的值
图1 - 31 查看变量
10、单击Execute-〉ToggleBreakpoint,设置断点
图1 - 32 设置断点
11、继续单步执行程序,当程序再次回到断点是,观察i的值已经变为1了
图1 - 33 在断点处查看变量
相关文章推荐
- ARM汇编编程基础(四) -- ADS开发环境的使用
- ARM汇编编程基础之五 —— ADS开发环境的使用
- ARM汇编编程基础(四) -- ADS开发环境的使用
- APUE [Linux C 编程开发环境(工具链,编译,汇编,链接,库)基础知识与实践]
- (嵌入式导论)ADS基础开发和ARM汇编
- ARM中ADS环境下C语言和汇编语言混合编程及示例
- Linux C 编程开发环境(工具链,编译,汇编,链接,库)基础知识与实践
- LinuxC/C++编程基础(31) 使用thrift/rpc开发简单实例(续3)
- J-Link在ADS集成开发环境中使用.doc
- 【Linux开发技术之工具使用】配置VIM下编程和代码阅读环境
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-UDA应用中使用IOC解偶数据连接环境
- 使用ARM汇编破解iOS程序基础知识分享
- Windows下使用VIM,搭建Mainframe开发环境(三)---基础配置
- Docker: 使用jupyter notebook基础镜像搭建自己的 pytorch 开发环境
- ADS1.2 集成开发环境使用手记
- Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式
- 嵌入式成长轨迹3 【嵌入式环境及基础】【嵌入式Linux软件开发入门】【VI编辑器的使用】
- LinuxC/C++编程基础(32) 使用thrift/rpc开发简单实例(续4)
- ARM汇编编程基础(二) -- 基本寻址方式与基本指令
- Go编程基础之一 Go开发环境搭建