首页 ADS1.2使用说明.pdf

ADS1.2使用说明.pdf

ADS1.2使用说明.pdf

上传者: thewhstarting 2013-12-13 评分1 评论0 下载0 收藏0 阅读量830 暂无简介 简介 举报

简介:本文档为《ADS1.2使用说明pdf》,可适用于硬件技术领域,主题内容包含ARM应用系统开发详解基于SCB的系统设计第章ARMADS集成开发环境的使用在这一章里将介绍ARM开发软件ADS(ARMDeveloperSuite符等。

ARM应用系统开发详解基于SCB的系统设计第章ARMADS集成开发环境的使用在这一章里将介绍ARM开发软件ADS(ARMDeveloperSuite)。通过学习如何在CodeWarriorIDE集成开发环境下编写编译一个工程的例子使读者能够掌握在ADS软件平台下开发用户应用程序。本章还描述了如何使用AXD调试工程使读者对于调试工程有个初步的理解为进一步的使用和掌握调试工具起到抛砖引玉的作用。本章主要内容有:-ADS软件组成介绍-使用ADS创建工程-用AXD进行代码调试ADS集成开发环境组成介绍ARMADS全称为ARMDeveloperSuite。是ARM公司推出的新一代ARM集成开发工具。现在ADS的最新版本是它取代了早期的ADS和ADS。它除了可以安装在WindowsNTWindowsWindows和Windows操作系统下还支持WindowsXP和WindowsMe操作系统。ADS由命令行开发工具ARM时实库GUI开发环境(CodeWarrior和AXD)实用程序和支持软件组成。有了这些部件用户就可以为ARM系列的RISC处理器编写和调试自己的开发应用程序了。下面就详细介绍一下ADS的各个组成部分。命令行开发工具这些工具完成将源代码编译链接成可执行代码的功能。ADS提供下面的命令行开发工具:armccarmcc是ARMC编译器。这个编译器通过了PlumHallCValidationSuite为ANSIC的一致性测试。armcc用于将用ANSIC编写的程序编译成位ARM指令代码。因为armcc是我们最常用的编译器所以对此作一个详细的介绍。在命令控制台环境下输入命令:armcc–help可以查看armcc的语法格式以及最常用的一些操作选项armcc最基本的用法为:armccoptionsfilefilefilen这里的option是编译器所需要的选项fiel,file…filen是相关的文件名。这里简单介绍一些最常用的操作选项。c:表示只进行编译不链接文件C:(注意:这是大写的C)禁止预编译器将注释行移走D<symbol>:定义预处理宏相当于在源程序开头使用了宏定义语句#definesymbol这里symbol默认为E:仅仅是对C源代码进行预处理就停止ARM应用系统开发详解基于SCB的系统设计g<options>:指定是否在生成的目标文件中包含调试信息表I<directory>:将directory所指的路径添加到#include的搜索路径列表中去J<directory>:用directory所指的路径代替默认的对#include的搜索路径o<file>:指定编译器最终生成的输出文件名。O:不优化O:这是控制代码优化的编译选项大写字母O后面跟的数字不同表示的优化级别就不同O关闭了影响调试结果的优化功能O:该优化级别提供了最大的优化功能S:对源程序进行预处理和编译自动生成汇编文件而不是目标文件U<symbol>:取消预处理宏名相当于在源文件开头使用语句#undefsymbolW<options>:关闭所有的或被选择的警告信息有关更详细的选项说明读者可查看ADS软件的在线帮助文件。armcpparmcpp是ARMC编译器。它将ISOC或EC编译成位ARM指令代码。tcctcc是ThumbC编译器。该编译器通过了PlumHallCValidationSuite为ANSI一致性的测试。tcc将ANSIC源代码编译成位的Thumb指令代码。tcpptcpp是ThumbC编译器。它将ISOC和EC源码编译成位Thumb指令代码。armasmarmasm是ARM和Thumb的汇编器它对用ARM汇编语言和Thumb汇编语言写的源代码进行汇编。armlinkarmlink是ARM连接器。该命令既可以将编译得到的一个或多个目标文件和相关的一个或多个库文件进行链接生成一个可执行文件也可以将多个目标文件部分链接成一个目标文件以供进一步的链接。ARM链接器生成的是ELF格式的可执行映像文件。armsdarmsd是ARM和Thumb的符号调试器。它能够进行源码级的程序调试。用户可以在用C或汇编语言写的代码中进行单步调试设置断点查看变量值和内存单元的内容。armcc用法详解下面为读者介绍上述的种ARMC和C编译器的命令通用语法。compilerPCSoptionssourcelanguagesearchpathspreprocessoroptionsoutputformattargetoptionsdebugoptionscodegenerationoptionswarningoptionsadditionalcheckserroroptionssource用户可以通过命令行操作选项控制编译器的执行。所有的选项都是以符号””开始有些选项后面还跟有参数。在大多数情况下ARMC和C编译器允许在选项和参数之间存在空格。命令行中各个选项出现顺序可以任意。这里的compiler是指armcctccarmcpp和tcpp中的一个PCSoptions:指定了要使用的过程调用标准sourcelanguage:指定了编译器可以接受的编写源程序的语言种类。对于C编译器默认的语言是ANSIC对于C编译器默认是ISO标准Csearchpaths:该选项指定了对包含的文件(包括源文件和头文件)的搜索路径ARM应用系统开发详解基于SCB的系统设计preprocessoroptions:该选项指定了预处理器的行为其中包括预处理器的输出和宏定义等特性outputformat:该选项指定了编译器的输出格式可以使用该项生成汇编语言输出列表文件和目标文件targetoptions:该选项指定目标处理器或ARM体系结构debugoptions:该选项指定调试信息表是否生成和该调试信息表生成时的格式codegenerationoptions:该选项指定了例如优化字节顺序和由编译器产生的数据对齐格式等选项warningoptions:该选项决定警告信息是否产生additionalchecks:该选项指定了几个能用于源码的附加检查例如检查数据流异常检查没有使用的声明等erroroptions:该选项可以关闭指定的可恢复的错误或者将一些指定的错误降级为警告source:该选项提供了包含有C或C源代码的一个或多个文件名默认的编译器在当前路径寻找源文件和创建输出文件。如果源文件是用汇编语言编写的(也就是说该文件的文件名是以s作为扩展名)汇编器将被调用来处理这些源文件。如果操作系统对命令行的长度有限制可以使用下面的操作从文件中读取另外的命令行选项:viafilename该命令打开文件名为filename的文件并从中读取命令行选项。用户可以对via进行嵌套调用亦即在文件filename中又通过viafinlename包含了另外一个文件。在下面的例子中从inputtxt文件中读取指定的选项作为armcpp的操作选项:armcppviainputtxtsourcec以上是对编译器选项的一个简单概述。它们(包括后面还要介绍的其他一些命令工具)既可以在命令控制台环境下使用同时由于它们被嵌入到了ADS的图形界面中所以也可以在图形界面下使用。armlink用法详解在介绍armlink的使用方法之前先介绍要涉及到的一些术语。映像文件(image):是指一个可执行文件在执行的时候被加载到处理器中。一个映像文件有多个线程。它是ELF(Executableandlinkingformat)格式的。段(Section):描述映像文件的代码或数据块。RO:是Readonly的简写形式。RW:是Readwrite的简写形式。ZI:是Zeroinitialized的简写形式。输入段(inputsection):它包含着代码初始化数据或描述了在应用程序运行之前必须要初始化为的一段内存。输出段(outputsection):它包含了一系列具有相同的RORW或ZI属性的输入段。域(Regions):在一个映像文件中一个域包含了至个输出段。多个域组织在一起就构成了最终的映像文件。ReadOnlyPositionIndependent(ROPI):它是指一个段在这个段中代码和只读数据的地址在运行时候可以改变。ReadWritePositionIndependent(RWPI):它是指一个段在该段中的可读写的数据地址在运行期间可以改变。加载时地址:是指映像文件位于存储器(在该映像文件没有运行时)中的地址。ARM应用系统开发详解基于SCB的系统设计运行时地址:是指映像文件在运行时的地址。下面介绍一下armlink命令的语法完整的连接器命令语法如下:armlinkhelpvsnpartialoutputfileelfrelocrobaseaddressropirwbaseaddressrwpisplitscatterfiledebug|nodebugremoveRORWZIDBG|noremoveentrylocationkeepsectionidfirstsectionidlastsectionidlibpathpathlistscanlib|noscanliblocals|nolocalscallgraphinfotopicsmapsymbolssymdefsfileeditfilexrefxreffromobject(section)xreftoobject(section)errorsfilelistfileverboseunmangled|mangledmatchcrossmangledviafilestrictunresolvedsymbolMI|LI|BIinputfilelist上面各选项的含义分别为:help这个选项会列出在命令行中常用的一些选项操作。vsn这个选项显示出所用的armlink的版本信息。partial用这个选项创建的是部分链接的目标文件而不是可执行映像文件。outputfile这个选项指定了输出文件名该文件可能是部分链接的目标文件也可能是可执行映像文件。如果输出文件名没有特别指定的话armlink将使用下面的默认:如果输出是一个可执行映像文件则生成的输出文件名为imageaxf如果输出是一个部分链接的目标文件在生成的文件名为objecto如果没有指定输出文件的路径信息则输出文件就在当前目录下生成。如果指定了路径信息则所指定的路径成为输出文件的当前路径。elf这个选项生成ELF格式的映像文件这也是armlink所支持的唯一的一种输出格式这是默认选项。reloc这个选项生成可重定址的映像。一个可重定址的映像具有动态的段这个段中包含可重定址信息利用这些信息可以在链接后进行映像文件的重新定址relocrwbase一起使用但是如果没有split选项链接时会产生错误。robaseaddress这个选项将包含有RO(ReadOnly属性)输出段的加载地址和运行地址设置为address该地址必须是字对齐的如果没有指定这个选项则默认的RO基地址值为x。ropi这个选项使得包含有RO输出段的加载域和运行域是位置无关的。如果该选项没有使用则相应的域被标记为绝对的。通常每一个只读属性的输入段必须是只读位置无关的。如果使用了这个选项armlink将会进行以下操作:检查各段之间的重定址是否有效确保任何由armlink自身生成的代码是只读位置无关的。这里希望读者注意的是ARM工具直到armlink完成了对输入段的处理后才能够决定最终的生成映像是否为只读位置无关的。这就意味着即使为编译器和汇编器指定了ARM应用系统开发详解基于SCB的系统设计ROPI选项armlink也可能会产生ROPI错误信息。rwbaseaddress这个选项设置包含RW(ReadWrite属性)输出段的域的运行时地址该地址必须是字对齐的。如果这个选项和split选项一起使用将设置包含RW输出段的域的加载和运行时地址都设置在address处。rwpi这个选项使得包含有RW和ZI(ZeroInitialization初始化为)属性的输出段的加载和运行时域为位置无关的。如果该选项没有使用相应域标记为绝对的。这个选项要求rwbase选项后有值如果rwbase没有指定的话默认其值为即相当于rwbase。通常每一个可写的输入段必须是可读可写的位置无关的。如果使用了该选项armlink会进行以下的操作:检查可读可写属性的运行域的输入段是否设置了位置无关属性检查在各段之间的重定址是否有效生成基于静态寄存器sb的条目这些在RO和RW域被拷贝和初始化的时候会用到。编译器并不会强制可写的数据一定要为位置无关的这就是说即使在为编译器和汇编器指定了RWPI选项armlink也可能生成数据不是RWPI的信息。split这个选项将包含RO和RW属性的输出段的加载域分割成个加载域。一个是包含RO输出段的加载域默认的加载地址为x但是可以用robase选项设置其他的地址值另一个加载域包含RO属性的输出段由rwbase选项指定加载地址如果没有使用rwbase选项的话默认使用的是rwbase。scatterfile这个选项使用在file中包含的分组和定位信息来创建映像内存映射。注意如果使用了该选项的话必须要重新实现堆栈初始化函数userinitialstackheap()。debug这个选项使输出文件包含调试信息调试信息包括调试输入段符号和字符串表。这是默认的选项。nodebug这个选项使得在输出文件中不包含调试信息。生成的映像文件短小但是不能进行源码级的调试。armlink对在输入的目标文件和库函数中发现的任何调试输入段都不予处理当加载映像文件到调试器中的时候也不包含符号和字符串信息表。这个选项仅仅是对装载到调试器的映像文件的大小有影响但是对要下载到目标板上的二进制代码的大小没有任何影响。如果用armlink进行部分链接生成目标文件而不是映像文件则虽然在生成的目标文件中不含有调试输入段但是会包含符号和字符串信息表。这里特别请读者注意的是:如果要在链接完成后使用fromELF工具的话不可使用nodebug选项这是因为如果生成的映像文件中不包含调试信息的话则有下面的影响:fromELF不能将映像文件转换成其他格式的文件fromELF不能生成有意义的反汇编列表。remove(RORWZIDBG)使用这个选项会将在输入段未使用的段从映像文件中删除。如果输入段中含有映像文件ARM应用系统开发详解基于SCB的系统设计入口点或者该输入段被一个使用的段所引用则这样的输入段会当作已使用的段。在使用这个选项时候要注意不要删除异常处理函数。使用keep选项来标识异常处理函数或用ENTRY伪指令标明是入口点。为了更精确的控制删除未使用的段可以使用段属性限制符。可以使用以下的段属性限制符:RO删除所有未使用的RO属性的段RW删除所有未使用的RW属性的段ZI删除所有未使用的ZI属性的段DBG删除所有未使用的DEBUG属性的段。这些限制符出现的顺序是任意的但是它们必须要有”()”括住多个限制符之间要用符号””进行间隔。ADS软件中默认选项是remove(RORWZIDBG)。如果没有指定段属性限制符则所有未使用的段都会被删除。因为remove就等价于remove(RORWZIDBG)选项。noremove这个选项保留映像文件中所有未被使用的段。entrylocation这个选项指定映像文件中唯一的初始化入口点。一个映像文件可以包含多个入口点使用这个命令定义的初始化入口点是存放在可执行文件的头部以供加载程序加载时使用。当一个映像文件被装载时ARM调试器使用这个入口点地址来初始化PC指针。初始化入口点必须满足下面的条件:映像文件的入口点必须位于运行域内运行域必须是非覆盖的并且必须是固定域(就是说加载域和运行域的地址相同)。在这里可以用以下的参数代替location参数:入口点地址:这是一个数值例如entryx符号:该选项指定映像文件的入口点为该符号所代表的地址处比如:entryinthandler表示程序入口点在符号inthandler所在处。如果该符号有多处定义存在armlink将产生出错信息。offsetobject(section):该选项指定在某个目标文件的段的内部的某个偏移量处为映像文件的入口地址例如:entrystartup(startupseg)如果偏移量值为可以简写成object(section)如果输入段只有一个则可以简化为object。keepsectionid使用该选项可以指定保留一个输入段这样的话即使该输入段没有在映像文件中使用也不会被删除。参数sectionid取下面一些格式:.symbol该选项指定定义symbol的输入段不会在删除未使用的段时被删除。如果映像文件中有多处symbol定义存在则所有包含symbol定义的输入段都不会被删除。例如:keepinthandlerARM应用系统开发详解基于SCB的系统设计则所有定义inthandler的符号的段都会保留而不被删除。为了保留所有含有以handler结尾的符号的段可以使用如下的选项:keep*handler.object(section)这个选项指定了在删除未使用段时保留目标文件中的section段。输入段和目标名是不区分大小写的例如为了在目标文件vectorso中保留vect段使用:keepvectorso(vect)为了保留vectorso中的所有以vec开头的段名可以使用选项:keepvectorso(vec*).object这个选项指定在删除未使用段时保留该目标文件唯一的输入段。目标名是不区分大小写的如果使用这个选项的时候目标文件中所含的输入段不止一个的话armlink会给出出错信息。比如为了保留每一个以dsp开头的只含有唯一输入段的目标文件可以使用如下的选项:keepdsp*ofirstsectionid这个选项将被选择的输入段放在运行域的开始。通过该选项将包含复位和中断向量地址的段放置在映像文件的开始可以用下面的参数代替sectionid:.symbol选择定义symbol的段。禁止指定在多处定义的symbol因为多个段不能同时放在映像文件的开始。.object(section)从目标文件中选择段放在映像文件的开始位置。在目标文件和括号之间不允许存在空格例如firstinito(init).object选择只有一个输入段的目标文件。如果这个目标文件包含多个输入段armlink会产生错误信息。用这个选项的例子如下:firstinito这里希望读者注意的是:使用first不能改变在域中按照RO段放在开始接着放置RW段最后放置ZI段的基本属性排放顺序。如果一个域含有RO段则RW或ZI段就不能放在映像文件的开头。类似地如果一个域有RO或RW段则ZI段就不能放在文件开头。两个不同的段不能放在同一个运行时域的开头所以使用该选项的时候只允许将一个段放在映像文件的开头。lastsectionid这个选项将所选择的输入段放在运行域的最后。例如用这个选项能够强制性的将包含校验和的输入段放置在RW段的最后。使用下面的参数可以替换sectionid。symbol选择定义symbol的段放置在运行域的最后。不能指定一个有多处定义的symbol。使用该参数的例子如下:lastchecksumobject(section)从目标文件中选择section段。在目标文件和后面的括号间不能有空格用该参数的例ARM应用系统开发详解基于SCB的系统设计子为:lastchecksumo(check)object选择只有一个输入段的目标如果该目标文件中有多个输入段armlink会给出出错信息。和first选项一样需要读者注意的是使用last选项不能改变在域中将RO段放在开始接着放置RW段最后放置ZI段的输出段基本的排放顺序。如果一个域含有ZI段则RW段不能放在最后如果一个域含有RW或ZI段则RO段不能放在最后。在同一个运行域中两个不同的段不能同时放在域的最后位置。libpathpathlist这个选项为ARM标准的C和C库指定了搜索路径列表。注意这个选项不会影响对用户库的搜索路径。这个选项覆盖了环境变量ARMLIB所指定的路径。参数pathlist是一个以逗号分开的多个路径列表即为path,path,pathn这个路径列表只是用来搜索要用到的ARM库函数。默认的对于包含ARM库函数的默认路径是由环境变量ARMLIB所指定的。scanlib这个选项启动对默认库(标准ARMC和C库)的扫描以解析引用的符号。这个选项是默认的设置。noscanlib该选项禁止在链接时候扫描默认的库。locals这个选项指导链接器在生成一个可执行映像文件的时候将本地符号添加到输出符号信息表中。该选项是默认设置。nolocals这个选项指导链接器在生成一个可执行映像文件的时候不要将本地符号添加到输出符号信息表中。如果想减小输出符号表的大小可以使用该选项。callgraph该选项创建一个HTML格式的静态函数调用图。这个调用图给出了映像文件中所有函数的定义和引用信息。对于每一个函数它列出了:函数编译时候的处理器状态(ARM状态还是Thumb状态)调用func函数的集合被func调用的函数的集合在映像文件中使用的func寻址的次数。此外调用图还标识了下面的函数:被interworkingveneers所调用的函数在映像文件外部定义的函数允许未被定义的函数(以weak方式的引用)静态调用图还提供了堆栈使用信息它显示出了:每个函数所使用的堆栈大小在全部的函数调用中所用到的最大堆栈大小。infotopics这个选项打印出关于指定种类的信息这里的参数topics是指用逗号间隔的类型标识符列表。类型标识符列表可以是下面所列出的任意一个:ARM应用系统开发详解基于SCB的系统设计sizes为在映像文件中的每一个输入对象和库成员列出了代码和数据(这里的数据包括RO数据RW数据ZI数据和Debug数据)的大小totals为输入对象文件和库列出代码和数据(这里的数据包括RO数据RW数据ZI数据和Debug数据)总的大小veneers给出由armlink生成的veneers的详细信息unused列出由于使用remove选项而从映像文件中被删除的所有未使用段。注意:在信息类型标识符列表之间不能存在空格比如可以输入infosizes,totals但是不能是infosizes,totals(即在逗号和totals之间有空格是不允许的)map这个选项创建映像文件的信息图。映像文件信息图包括映像文件中的每个加载域运行域和输入段的大小和地址这里的输入段还包括调试信息和链接器产生的输入段。symbols这个选项列出了链接的时候使用的每一个局部和全局符号。该符号还包括链接生成的符号。symdefsfile这个选项创建一个包含来自输出映像文件的全局符号定义的符号定义文件。默认的所有的全局符号都写入到符号定义文件中。如果文件file已经存在链接器将限制生成在已存在的symdefs文件中已列出的符号。如果文件file没有指明路径信息链接器将在输出映像文件的路径搜索文件。如果文件没有找到就会在该目录下面创建文件。在链接另一个映像文件的时候可以将符号定义文件作为链接的输入文件。editfile这个选项指定一个steering类型的文件该文件包含用于修改输出文件中的符号信息表的命令。可以在steering文件中指定具有以下功能的命令:隐藏全局符号。使用该选项可以在目标文件中隐藏指定的全局符号。重命名全局符号。使用这个选项可以解决符号命名冲突的现象。xref该选项列出了在输入段间的所有交叉引用。xreffromobject(section)这个选项列出了从目标文件中的输入段对其他输入段的交叉引用。如果想知道某个指定的输入段中的引用情况就可以使用该选项。xreftoobject(section)该选项列出了从其他输入段到目标文件输入段的引用。errorsfile使用该选项会将诊断信息从标准输出流重定向到文件file中。listfile该选项将infomapsymbolsxrefxreffrom和–xrefto这几个选项的输出重新定向到文件file中。ARM应用系统开发详解基于SCB的系统设计如果文件file没有指定路径信息就会在输出路径创建该文件该路径是输出映像文件所在的路径。verbose这个选项将有关链接操作的细节打印出来包括所包括的目标文件和要用到的库。unmangled该选项指定链接器在由xrefxreffromxrefto和symbols所生成的诊断信息中显示出unmangledC符号名。如果使用了这个选项链接器将unmangleC符号名以源码的形式显示出来。这个选项是默认的。mangled这个选项指定链接器显示由xrefxreffromxrefto和symbols所产生的诊断信息中的mangledC符号名。如果使用了该选项链接器就不会unmangleC符号名了。符号名是按照它们在目标符号表中显示的格式显示的。viafile该选项表示从文件file中读取输入文件名列表和链接器选项。在armlink命令行可以输入多个via选项当然via选项也能够不含在一个via文件中。strict这个选项告诉链接器报告可能导致错误而不是警告的条件。unresolvedsymbol这个选项将未被解析的符号指向全局符号symbol。Symbol必须是已定义的全局符号否则symbol会当作一个未解析的符号链接将以失败告终。这个选项在自上而下的开发中尤为有用在这种情况下通过将无法指向相应函数的引用指向一个伪函数的方法可以测试一个部分实现的系统。该选项不会显示任何警告信息。inputfilelist这是一个以空格作为间隔符的目标或库的列表。有一类特殊的目标文件即symdef文件也可以包含在文件列表中为生成的映像文件提供全局的symbol值。在输入文件列表中有两种使用库的方法。指定要从库中提取并作为目标文件添加到映像文件中的特定的成员。指定某库文件链接器根据需要从其中提取成员。armlink按照以下的顺序处理输入文件列表:无条件的添加目标文件使用匹配模式从库中选择成员加载到映像文件中去。例如使用下面的命令:armlinkmainomylib(stdioo)mylib(a*o)将会无条件的把mylib库中所有的以字母a开头的目标文件和stdioo在链接的时候链接到生成的映像文件中去。添加为解析尚未解析的引用的库到库文件列表。ARM运行时库本小节为读者介绍一下ARMCC库方面的相关内容。运行时库类型和建立选项ADS提供以下的运行时库来支持被编译的C和C代码:ARM应用系统开发详解基于SCB的系统设计ANSIC库函数:这个C函数库是由以下几部分组成:.在ISOC标准中定义的函数.在semihosted环境下(semihosting是针对ARM目标机的一种机制它能够根据应用程序代码的输入输出请求与运行有调试功能的主机通讯。这种技术允许主机为通常没有输入和输出功能的目标硬件提供主机资源)用来实现C库函数的与目标相关的函数.被C和C编译器所调用的支持函数。ARMC库提供了额外的一些部件支持C并为不同的结构体系和处理器编译代码。C库函数:C库函数包含由ISOC库标准定义的函数。C库依赖于相应的C库实现与特定目标相关的部分在C库的内部本身是不包含与目标相关的部分。这个库是由以下几部分组成的:.版本为的RogueWaveStandardC库.C编译器使用的支持函数.RogueWave库所不支持的其他的C函数。正如上面所说ANSIC库使用标准的ARMsemihosted环境提供例如文件输入输出的功能。Semihosting是由已定义的软件中断(SoftwareInterrupt)操作来实现的。在大多数的情况下semihostingSWI是被库函数内部的代码所触发用于调试的代理程序处理SWI异常。调试代理程序为主机提供所需要的通信。Semihosted被ARMulatorAngel和MultiICE所支持。用户可以使用在ADS软件中的ARM开发工具去开发用户应用程序然后在ARMulator或在一个开发板上运行和调试该程序。用户可以把C库中的与目标相关的函数作为自己应用程序中的一部分重新进行代码的实现。这就为用户带来了极大的方便用户可以根据自己的执行环境适当的裁剪C库函数。除此之外用户还可以针对自己的应用程序的要求对与目标无关的库函数进行适当的裁剪。在C库中有很多函数是独立于其他函数的并且与目标硬件没有任何依赖关系。对于这类函数用户可以很容易地从汇编代码中使用它们。在建立自己的用户应用程序的时候用户必须指定一些最基本的操作选项。例如:字节顺序是大端模式(bigendian:字数据的高字节存放在低地址低字节存放在高地址)还是小端模式(littleendian:字数据的高字节存放在高地址低字节存放在低地址)浮点支持:可能是FPAVFP软件浮点处理或不支持浮点运算堆栈限制:是否检查堆栈溢出位置无关(PID):数据是从与位置无关的代码还是从与位置相关的代码中读写代码是位置无关的只读代码还是位置相关的的只读代码。当用户对汇编程序C程序或C程序进行链接的时候链接器会根据在建立时所指定的选项选择适当的C或C运行时库的类型。选项各种不同组合都有一个相应的ANSIC库类型。库路径结构库路径是在ADS软件安装路径的lib目录下的两个子目录。假设ADS软件安装在e:armadsv目录则在e:armadsvlib目录下的两个子目录armlib和cpplib是ARM的库所在的路径。armlibARM应用系统开发详解基于SCB的系统设计这个子目录包含了ARMC库浮点代数运算库数学库等各类库函数。与这些库相应的头文件在e:armadsvinclude目录中。cpplib这个子目录包含了RogueWaveC库和C支持函数库。RogueWaveC库和C支持函数库合在一起被称为ARMC库。与这些库相应的头文件安装在e:armadsvinclude目录下。环境变量ARMLIB必须被设置成指向库路径。另外一种指定ARMC和ARMC库路径的方法是在链接的时候使用操作选项libpathdirectory(directory代表库所在的路径)来指明要装载的库的路径。无需对armlib和cpplib这两个库路径分开指明链接器会自动从用户所指明的库路径中找出这两个子目录。这里需要让读者特别注意的以下几点:ARMC库函数是以二进制格式提供的ARM库函数禁止修改。如果读者想对库函数创建新的实现的话可以把这个新的函数编译成目标文件然后在链接的时候把它包含进来。这样在链接的时候使用的是新的函数实现而不是原来的库函数。通常情况下为了创建依赖于目标的应用程序在ANSIC库中只有很少的几个函数需要实现重建。RogueWaveStandardC函数库的源代码不是免费发布的可以从RogueWaveSoftwareInc或ARM公司通过支付许可证费用来获得源文件。GUI开发环境(CodeWarrior和AXD)CodeWarrior集成开发环境CodeWarriorforARM是一套完整的集成开发工具充分发挥了ARMRISC的优势,使产品开发人员能够很好的应用尖端的片上系统技术该工具是专为基于ARMRISC的处理器而设计的,它可加速并简化嵌入式开发过程中的每一个环节使得开发人员只需通过一个集成软件开发环境就能研制出ARM产品在整个开发周期中,开发人员无需离开CodeWarrior开发环境,因此节省了在操做工具上花的时间,使得开发人员有更多的精力投入到代码编写上来CodeWarrior集成开发环境(IDE)为管理和开发项目提供了简单多样化的图形用户界面。用户可以使用ADS的CodeWarriorIDE为ARM和Thumb处理器开发用CC或ARM汇编语言的程序代码。通过提供下面的功能CodeWarriorIDE缩短了用户开发项目代码的周期。全面的项目管理功能子函数的代码导航功能使得用户迅速找到程序中的子函数。可以在CodeWarriorIDE为ARM配置在中介绍的各种命令工具实现对工程代码的编译汇编和链接。在CodeWarriorIDE中所涉及到的target有两种不同的语义。目标系统(Targetsystem)是特指代码要运行的环境是基于ARM的硬件。比如要为ARM开发板上编写要运行在它上面的程序这个开发板就是目标系统。生成目标(Buildtarget)是指用于生成特定的目标文件的选项设置(包括汇编选项编译选项链接选项以及链ARM应用系统开发详解基于SCB的系统设计接后的处理选项)和所用的文件的集合。CodeWarriorIDE能够让用户将源代码文件库文件还有其他相关的文件以及配置设置等放在一个工程中。每个工程可以创建和管理生成目标设置的多个配置。例如要编译一个包含调试信息的生成目标和一个基于ARMTDMI的硬件优化生成目标生成目标可以在同一个工程中共享文件同时使用各自的设置。CodeWarriorIDE为用户提供下面的功能:源代码编辑器它集成在CodeWarriorIDE的浏览器中能够根据语法格式使用不同的颜色显示代码源代码浏览器它保存了在源码中定义的所有符号能够使用户在源码中快速方便的跳转查找和替换功能用户可以在多个文件中利用字符串通配符进行字符串的搜索和替换文件比较功能可以使用户比较路径中的不同文本文件的内容。ADS的CodeWarriorIDE是基于MetrowerksCodeWarriorIDE版本的。它经过适当的裁剪以支持ADS工具链。针对ARM的配置面板为用户提供了在CodeWarriorIDE集成环境下配置各种ARM开发工具的能力这样用户可以不用在命令控制台下就能够使用在和将在中介绍的各种命令。以ARM为目标平台的工程创建向导可以使用户以此为基础快速创建ARM和Thumb工程。尽管大多数的ARM工具链已经集成在CodeWarriorIDE但是仍有许多功能在该集成环境中没有实现这些功能大多数是和调试相关的因为ARM的调试器没有集成到CodeWarriorIDE中。由于ARM调试器(AXD)没有集成在CodeWarriorIDE中这就意味着用户不能在CodeWarriorIDE中进行断点调试和查看变量。对于熟悉CodeWarriorIDE的用户会发现有许多的功能已经从CodeWarriorIDEForARM中移走比如快速应用程序开发模板等。在CodeWarriorIDEForARM中有很多的菜单或子菜单是不能使用的。下面介绍一下这些不能使用的选项。View菜单下不能使用的菜单选项有:ProcessesExpressionsGlobalVariableBreakpointsRegisters。Project菜单不能使用的菜单选项:Precompile子菜单。因为ARM编译器不支持预编译的头文件。Debug菜单该菜单中没有一个子菜单是可以使用的。Browser菜单中不能使用的菜单选项:NewPropertyNewMethod和NewEventSet。Helpmenu中不能用于ADS的菜单选项有:CodeWarriorHelpIndexSearch和OnlineManuals。有关CodeWarriorIDE中一些常用菜单的使用将在后面的举例中具体说明的在此不在赘述。ADS调试器调试器本身是一个软件用户通过这个软件使用debugagent可以对包含有调试信息的正在运行的可执行代码进行比如变量的查看断点的控制等调试操作。ARM应用系统开发详解基于SCB的系统设计ADS中包含有个调试器:AXD(ARMeXtendedDebugger):ARM扩展调试器armsd(ARMSymbolicDebugger):ARM符号调试器与老版本兼容的Windows或Unix下的ARM调试工具ADWADU(ApplicationDebuggerWindowsUnix)。下面对在调试映像文件中所涉及到的一些术语做一个简单的介绍。Debugtarget在软件开发的最初阶段可能还没有具体的硬件设备。如果要测试所开发的软件是否达到了预期的效果这可以由软件仿真来完成。即使调试器和要测试的软件运行在同一台PC上也可以把目标当作一个独立的硬件来看待。当然也可以搭建一个PCB板这个板上可以包含一个或多个处理器在这个板上可以运行和调试应用软件。只有当通过硬件或者是软件仿真所得到的结果达到了预期的效果才算是完成了应用程序的编写工作。调试器能够发送以下指令:装载映像文件到目标内存启动或停止程序的执行显示内存寄存器或变量的值允许用户改变存储的变量值。DebugagentDebugagent执行调试器发出的命令动作比如:设置断点从存储器中读数据把数据写到存储器等。Debugagent既不是被调试的程序也不是调试器。在ARM体系中它有这几种方式:MultiICE(Multiprocessorincircuitemulator)ARMulator和Angel。其中MultiICE是一个独立的产品是ARM公司自己的JTAG在线仿真器不是由ADS提供的。AXD可以在Windows和UNIX下进行程序的调试。它为用CC和汇编语言编写的源代码提供了一个全面的Windows和UNIX环境。在后面的章节中会结合具体实例为读者介绍如何使用AXD调试器。实用程序ADS提供以下的实用工具来配合前面介绍的命令行开发工具的使用fromELF这是ARM映像文件转换工具。该命令将ELF格式的文件作为输入文件将该格式转换为各种输出格式的文件包括plainbinary(BIN格式映像文件),MotorolabitSrecordformat(Motorola位S格式映像文件),IntelHexformat(Intel位格式映像文件)和Veriloglikehexformat(Verilog进制文件)。FromELF命令也能够为输入映像文件产生文本信息例如代码和数据长度。armarARM库函数生成器将一系列ELF格式的目标文件以库函数的形式集合在一起用户可以把一个库传递给一个链接器以代替几个ELF文件。Flashdownloader用于把二进制映像文件下载到ARM开发板上的Flash存储器的工具ARM应用系统开发详解基于SCB的系统设计支持的软件ADS为用户提供下面的软件使用户可以在软件仿真的环境下或者在基于ARM的硬件环境调试用户应用程序。ARMulator这是一个ARM指令集仿真器集成在ARM的调试器AXD中它提供对ARM处理器的指令集的仿真为ARM和Thumb提供精确的模拟。用户可以在硬件尚未做好的情况下开发程序代码。使用ADS创建工程本节通过一个具体实例为读者介绍如何使用该集成开发环境利用CodeWarrior提供的建立工程的模板建立自己的工程并学会如何进行编译链接生成包含调试信息的映像文件和可以直接烧写的Flash中的bin格式的二进制可执行文件。建立一个工程工程将所有的源码文件组织在一起并能够决定最终生成文件存放的路径输出的格式等。在CodeWarrior中新建一个工程的方法有两种可以在工具栏中单击“New”按钮也可以在“File”菜单中选择“New…”菜单。这样就会打开一个如图所示的对话框。图新建工程对话框在这个对话框中为用户提供了种可选择的工程类型。ARMExecutablImage:用于由ARM指令的代码生成一个ELF格式的可执行映像文件ARMObjectLibrary:用于由ARM指令的代码生成一个armar格式的目标文件库EmptyProject:用于创建一个不包含任何库或源文件的工程MakefileImporterWizard:用于将VisualC的nmake或GNUmake文件转入到CodeWarriorIDE工程文件ARM应用系统开发详解基于SCB的系统设计ThumbARMExecutable

职业精品

分销渠道选择.ppt

辞职申请书(优质范文).doc

公司年检申请书doc.doc

厂家和经销商代理合同.doc

用户评论

0/200
    暂无评论
上传我的资料

精彩专题

相关资料换一换

资料评价:

/ 28
所需积分:1 立即下载

意见
反馈

返回
顶部