第六章 ADS集成开发环境的使用
6.1 裸机开发环境
裸机开发环境 何谓“裸机”? 裸机开发的作用 裸机是指无操作系统下的ARM系统开发 其特点是所有硬件资源均开放 可以把它理解为一个高级单片机的开发 裸机开发的作用 更能深入地从底层去理解ARM CPU的操作过程及系统设计 为日后自行设计系统打下基础 为bootloader的编写打好基础
开发环境的作用
ADS下嵌入式系统开发模式 模拟方式 仿真方式 调试方式
开发环境 开发软件有: 调试软件有: SDT(Software Development Toolkit)2.51 ADS(ARM Developer Suite)1.2 RealView® 调试软件有: AXD(ARM eXtended Debugger):ARM扩展调试器; ARMSD(ARM Symbolic Debugger):ARM符号调试器; ADW/ADU(Application Debugger Windows/Unix):与老版本兼容的Windows或Unix下的ARM调试工具。
6.2 ADS1.2开发环境介绍
ADS集成开发环境 ARM公司推出的新一代ARM集成开发工具 (相对于SDT) 全称:Metrowerks CodeWarrior for ARM Developer Suite v1.2 ADS的CodeWarrior IDE基于Metrowerks CodeWarrior IDE 4.2版本 它经过适当的裁剪以支持ADS工具链
ADS集成开发环境组成 ADS的主要组成部件有: 有了这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的开发应用程序 命令行开发工具 ARM运行时库 GUI开发环境(Code Warrior和AXD) 有了这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的开发应用程序
6.2.1 命令行开发工具
命令行开发工具 完成将源代码编译,链接成可执行代码的功能 命令行开发工具需要记忆较多的命令参数,但效率高;通常用集成开发环境(IDE)代替 类似于8086汇编环境下的masm和link工具 命令行开发工具需要记忆较多的命令参数,但效率高;通常用集成开发环境(IDE)代替
ADS提供下面的命令行开发工具: Armcc:ARM C编译器 Armcpp: ARM C++编译器 Armasm:ARM汇编编译器 : Armlink:ARM连接器
Armcc armcc用于将用ANSI C编写的程序编译成32位ARM指令代码 armcc最基本的用法为: armcc [options] file1 file2 ... filen 这里的option是编译器所需要的选项,fiel1,file2…filen是相关的文件名 举例:armcc -c init.s led.s
-c:表示只进行编译不链接文件; -C:(注意:这是大写的C)禁止预编译器将注释行移走; -D<symbol>:定义预处理宏,相当于在源程序开头使用了宏定义语句#define symbol , -E:仅仅是对C源代码进行预处理就停止; -g<options>:指定是否在生成的目标文件中包含调试信息表; -I<directory>:将directory所指的路径添加到#include的搜索路径列表中去; -o<file>:指定编译器最终生成的输出文件名。 -O0:不优化; -O1:这是控制代码优化的编译选项,大写字母O后面跟的数字不同,表示的优化级别就不同,-O1关闭了影响调试结果的优化功能; -O2:该优化级别提供了最大的优化功能; -S:对源程序进行预处理和编译,自动生成汇编文件而不是目标文件; -U<symbol>:取消预处理宏名,相当于在源文件开头,使用语句#undef symbol; -W<options>:关闭所有的或被选择的警告信息; 有关更详细的选项说明,读者可查看ADS软件的在线帮助文件。
armasm armasm是ARM和Thumb的汇编器 它对用ARM 汇编语言和Thumb 汇编语言写的源代码进行汇编
6.2.2 ARM运行时库
ARM运行时库 运行时库就是 C run-time library 你的 C 程序运行时需要这些库中的函数 C run-time library里面含有初始化代码,还有错误处理代码(例如divide by zero处理) 如果没有了C run-time库,main()就不会被调用,exit()也不能被响应。因为C run-time library包含了C程序运行的最基本和最常用的函数
库的作用 当用户对汇编程序,C程序或C++程序进行链接的时候,链接器会根据在建立时所指定的选项,选择适当的C或C++运行时库的类型 选项各种不同组合都有一个相应的ANSI C库类型
ADS提供以下的运行时库来支持被编译的C和C++代码: ANSI C库函数: C++库函数:
ANSI C库函数 由以下几部分组成: 在ISO C标准中定义的函数; 在semihosted环境下用来实现C库函数的与目标相关的函数; 被C和C++编译器所调用的支持函数
C++库函数 由以下几部分组成的: 版本为2.01.01的Rogue Wave Standard C++库; C++编译器使用的支持函数; Rogue Wave库所不支持的其他的C++函数
库路径结构 库路径是在ADS软件安装路径的lib目录下的两个子目录 假设,ADS软件安装在e:\arm\adsv1_2目录,则在e:\arm\adsv1_2\lib目录下的两个子目录armlib和cpplib是ARM的库所在的路径
armlib 这个子目录包含了ARM C 库,浮点代数运算库,数学库等各类库函数 ARM C库函数是以二进制格式提供的 与这些库相应的头文件在e:\arm\adsv1_2\include目录中
cpplib 这个子目录包含了Rogue Wave C++库和C++支持函数库 Rogue Wave C++库和C++支持函数库合在一起被称为ARM C++库 与这些库相应的头文件安装在e:\arm\adsv1_2\include目录下
6.3 GUI开发环境 (Code Warrior和AXD)
6.3.1 Code Warrior
CodeWarrior集成开发环境(IDE)为管理和开发项目提供了简单多样化的图形用户界面 用户可以使用ADS的CodeWarrior IDE为ARM和Thumb处理器开发用C,C++,或ARM汇编语言的程序代码 全面的项目管理功能
CodeWarrior for ARM是一套完整的集成开发工具,充分发挥了ARM RISC 的优势
可以在CodeWarrior IDE为ARM配置以上所介绍的各种命令工具,实现对工程代码的编译,汇编和链接
功能特色 源代码编辑器 源代码浏览器 查找和替换功能 文件比较功能 集成在CodeWarrior IDE的浏览器中,能够根据语法格式,使用不同的颜色显示代码; 源代码浏览器 保存了在源码中定义的所有符号,能够使用户在源码中快速方便的跳转; 查找和替换功能 用户可以在多个文件中,利用字符串通配符,进行字符串的搜索和替换; 文件比较功能 可以使用户比较路径中的不同文本文件的内容
实用程序 fromELF armar 这是ARM映像文件转换工具 该命令将ELF格式的文件作为输入文件,将该格式转换为各种输出格式的文件,包括plain binary(BIN格式映像文件), Motorola 32-bit S-record format(Motorola 32位S格式映像文件), Intel Hex 32 format(Intel 32位格式映像文件),和 Verilog-like hex format(Verilog 16进制文件) armar ARM库函数生成器将一系列ELF格式的目标文件以库函数的形式集合在一起,用户可以把一个库传递给一个链接器以代替几个ELF文件。
与调试相关工具链在该集成环境中没有实现 但与ARM调试器(AXD)能进行无缝地连接调用
基本概念-target 在CodeWarrior IDE中所涉及到的target有两种不同的语义 目标系统(Target system) 特指代码要运行的环境,是基于ARM的硬件。比如,要为ARM开发板上编写要运行在它上面的程序,这个开发板就是目标系统。 生成目标(Build target) 指用于生成特定的目标文件的选项设置(包括汇编选项,编译选项,链接选项以及链接后的处理选项)和所用的文件的集合。
6.3.2 操作过程及实例
实例说明 功能: 循环点亮LED灯(跑马灯) 实现方法: 汇编语言加C语言混合编程 目的 学习ADS的使用 学习ARM开发语言的编写与调试
建立工程 在磁盘里新建一个目录“D:\arm” 打开ADS软件 点击工具栏“File”,下拉点击“New…”
选择工程类型
输入工程名称及其目录
Ledcircle工程建立
新建工程后的目录
新建文件
Init.s文件
Main.c
添加文件到工程
添加到target DebugRel:使用该目标,在生成目标的时候,会为每一个源文件生成调试信息; Release:使用该目标不会生成任何调试信息。
文件添加完毕
编译连接
进入编译连接设置
设置窗口
目标设置
ARMASM编译器设置
ARMCC编译器设置
文件输出设置
编译连接
文件输出
6.4 AXD调试工具
AXD调试工具 在软件开发的最初阶段,可能还没有具体的硬件设备。如果要测试所开发的软件是否达到了预期的效果,这可以由软件仿真来完成。 当然,也可以搭建一个PCB板,这个板上可以包含一个或多个处理器,在这个板上可以运行和调试应用软件。 只有当通过硬件或者是软件仿真所得到的结果达到了预期的效果,才算是完成了应用程序的编写工作。
调试器能够发送以下指令: 装载映像文件到目标内存; 启动或停止程序的执行; 显示内存,寄存器或变量的值; 允许用户改变存储的变量值。
进入AXD调试工具
处理器状态观察 包括: 寄存器 变量 存储器
存储器窗口 包括: 显示格式 修改操作
单步执行、断点
添加变量进行观察
小 结 本章主要介绍了ADS软件的使用 介绍了如何使用ADS的调试软件AXD调试应用程序 小 结 本章主要介绍了ADS软件的使用 结合一个具体的应用实例,介绍如何在CodeWarrior IDE环境下建立自己的新工程,编译和链接工程生成可以调试的映像文件和二进制文件的过程 介绍了如何使用ADS的调试软件AXD调试应用程序