《嵌入式系统设计与开发 ARM汇编语言程序设计.pptx》由会员分享,可在线阅读,更多相关《嵌入式系统设计与开发 ARM汇编语言程序设计.pptx(107页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、会计学1嵌入式系统设计与开发嵌入式系统设计与开发ARM汇编语言程汇编语言程序设计序设计2023/3/16信息学院-通信教研室-油海东2第第8章章 ARM汇编语言程序设计汇编语言程序设计1.ARM汇编语言伪指令汇编语言伪指令3.ARM汇编语言程序结构汇编语言程序结构2.ARM汇编语言语句格式汇编语言语句格式4.简单的简单的ARM程序设计程序设计6.ARM汇编语言与汇编语言与C混合编程混合编程5.ARM汇编语言集成开发环境汇编语言集成开发环境第1页/共107页2023/3/16信息学院-通信教研室-油海东3ARM汇编中的文件格式汇编中的文件格式n nARM源程序文件(可简称为源文件)可以由任意一种
2、文本编辑器来编写程序代码,它一般为文本格式。n n常用的源文件:源程序文件文件名说明汇编程序文件*.S用ARM汇编语言编写的ARM程序或Thumb程序。C程序文件*.C用C语言编写的程序代码。头文件*.H头文件,包括常量命名、宏定义、数据结构定义第2页/共107页2023/3/16信息学院-通信教研室-油海东4ARM汇编程序的段汇编程序的段n n ARM汇编语言是以段(section)为单位来组织源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到的数据。一个ARM源程序至少需要一个代码段,大的程序可
3、以包含多个代码段和数据段。第3页/共107页2023/3/16信息学院-通信教研室-油海东5ARM程序结构程序结构 AREAAmex,CODE,READONLY ENTRYStart MOV R0,#10 MOV R1,#3 ADD R0,R0,R1Stop MOV R1,#0X18 SWI 0 x123456 END1.ARM汇编程序,以段为单位组织程序汇编程序,以段为单位组织程序2.段可以分为代码段和数据段,一个汇编程段可以分为代码段和数据段,一个汇编程序至少应该有一个代码段,当程序较长时,序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段可以分割为多个代码段和数据段4.多
4、个段在程序编译链接时最终形成一个可多个段在程序编译链接时最终形成一个可执行的映象文件执行的映象文件5.可执行映象文件通常由以下几部分构成可执行映象文件通常由以下几部分构成一个或多个代码段,代码段的属性为只读一个或多个代码段,代码段的属性为只读零个或多个包含初始化数据的数据段,数零个或多个包含初始化数据的数据段,数据段的属性为可读写。据段的属性为可读写。零个或多个不包含初始化数据的数据段,零个或多个不包含初始化数据的数据段,数据段的属性为可读写。数据段的属性为可读写。6.使用使用AREA伪指令定义一个段。伪指令定义一个段。程序入口,即程序中第一条程序入口,即程序中第一条可执行的指令可执行的指令可
5、执行指令可执行指令程序结束程序结束第4页/共107页2023/3/16信息学院-通信教研室-油海东6GUNGUN编译环境和编译环境和编译环境和编译环境和ADS/SDTADS/SDT编译环境的区别编译环境的区别编译环境的区别编译环境的区别n nEmbest IDE集成的编译器是自由软件GUN编译器。n n以前介绍的程序均为ARM ADS/SDT环境下的汇编程序n n二者的区别:n nADSADS注释行以注释行以“;”开始。开始。GUNGUN以以“”开始,开始,或者或者“/*/”/*/”n nARM ADS/SDTARM ADS/SDT下的伪指令与下的伪指令与GUNGUN下的伪指令下的伪指令不同不
6、同n nARMARM指令均相同指令均相同第5页/共107页2023/3/16信息学院-通信教研室-油海东7GUN下的伪指令下的伪指令n n常量编译控制伪操作n n汇编程序代码控制伪操作n n宏及条件编译控制伪操作n n其他伪操作第6页/共107页2023/3/16信息学院-通信教研室-油海东8常量编译控制伪操作常量编译控制伪操作伪操作语法格式作用.byte.byteexpr,expr分配一段字节内存单元,并用expr初始化。.hword/.short.hword expr,expr分配一段半字内存单元,并用expr初始化。.ascii.asciiexpr,expr定义字符串expr(非零结束符
7、)。.asciz/.string.ascizexpr,expr定义字符串expr(以/0为结束符)。.float/.single.floatexpr,expr定义一个32bitIEEE浮点数expr。.double.doubleexpr,expr定义64bitIEEE浮点数expr。word/.long/.int.word expr,expr分配一段字内存单元,并用expr初始化。.fill.fill repeat,size,value分配一段字节内存单元,用size长度value填充repeat次。.zero.zerosize分配一段字节内存单元,并用0填充内存。.space/.skip.s
8、pacesize,value分配一段内存单元,用value将内存单元初始化第7页/共107页2023/3/16信息学院-通信教研室-油海东9汇编程序代码控制伪操作符汇编程序代码控制伪操作符伪操作语法格式作用.section.sectionexpr定义域中包含的段。.text.textsubsection将操作符开始的代码编译到代码段或代码段子段。.data.datasubsection将操作符开始的数据编译到数据段或数据段子段。.bss.bsssubsection将变量存放到.bss段或.bss段的子段。.code16/.thumb.code16.thumb表明当前汇编指令的指令集选择Thum
9、b指令集。.code32/.arm.code32.arm表明当前汇编指令的指令集选择ARM指令集。.end.end标记汇编文件的结束行,即标号后的代码不作处理。.include.include“filename”将一个源文件包含到当前源文件中。.align/.balign.alignalignment,fill,max通过添加填充字节使当前位置满足一定的对齐方式。第8页/共107页2023/3/16信息学院-通信教研室-油海东10宏及条件编译伪操作符宏及条件编译伪操作符伪操作语法格式作用.macro、.exitm及.endm.macroacronameparameter,parameter.e
10、ndm.macro伪操作标识宏定义的开始,.endm标识宏定义的结束。用.macro及.endm定义一段代码,称为宏定义体。.exitm伪操作用于提前退出宏。.ifdef,.else及.endif.ifdefcondition.else.endif当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。其中else可以缺省。第9页/共107页2023/3/16信息学院-通信教研室-油海东11其它伪操作符其它伪操作符伪操作语法格式作用.eject.eject在汇编符号列表文件中插入一分页符。.list.list产生汇编列表(从.list到.nolist)。.nolist.nolist
11、表示汇编列表结束处。.title.title“heading”使用“heading”作为标题。.sbttl.sbttl“heading”使用“heading”作为子标题。.ltorg.ltorg在当前段的当前地址(字对齐)产生一个文字池。.req.reqname,expr为一个特定的寄存器定义名称。.err.err使编译时产生错误报告。.print.printstring打印信息到标准输出。.fail.failexpr编译汇编文件时产生警告。第10页/共107页2023/3/16信息学院-通信教研室-油海东12SDT下和下和GUN下伪操作符的区别下伪操作符的区别SDT下的伪操作符下的伪操作符G
12、UN下的伪操作符下的伪操作符INCLUDE.includeAEQUPB25.equA,PB25EXPORT.globalIMPORT.externDCD.longIF:DEF:.ifdefELSE.elseENDIF.endif:OR:|:SHL:第11页/共107页2023/3/16信息学院-通信教研室-油海东13SDT下和下和GUN下伪操作符的区别下伪操作符的区别SDT下的伪操作符下的伪操作符GUN下的伪操作符下的伪操作符RN.reqGBLA.globalBUSSETA#0 x20.equBUS,0 x20MACRO.macroMEND.mendEND.endAREAworkCODEREA
13、DONLY.textAREAblockDATAREADWRITE.dataCODE32.armCODE16.thumb第12页/共107页2023/3/16信息学院-通信教研室-油海东14ARM汇编语言的伪指令汇编语言的伪指令伪指令语法格式作用ADRADRcondregister,expr将基于PC或基于寄存器的地址值读取到寄存器中。小范围的地址读取。ADRLADRLcondregister,expr将基于PC或基于寄存器的地址值读取到寄存器中。中等范围的地址读取。LDRLDR cond register,=expr|label-expr将一个32位的立即数或者一个地址值读取到寄存器中。大范围
14、的地址读取。NOPNOP在汇编时将被替换成ARM中的空操作。第13页/共107页2023/3/16信息学院-通信教研室-油海东15ADS/SDT程序改写成程序改写成GUN程序程序 AREA ARMex CODE READONLY ENTRYstart MOV R0,#10 MOV R1,#3 ADD R0,R0,R1stop MOV R0,0 x18 LDR R1,=0 x20026 SWI 0 x123456 END.global_start.text_start:MOVR0,#10MOVR1,#3ADDR0,R0,R1stop:MOVR0,0 x18LDRR1,=0 x20026SWI0
15、x123456.end我改我改第14页/共107页2023/3/16信息学院-通信教研室-油海东16ARM汇编程序设计的难点汇编程序设计的难点n nARM数据处理操作n n设置条件码n n汇编语言子程序调用及返回 n n跳转表思想n nARM与Thumb之间的状态转换及函数的相互调用第15页/共107页2023/3/16信息学院-通信教研室-油海东17ARM数据处理操作数据处理操作n nARM中数据的处理有以下三种形式:n n简单的寄存器操作简单的寄存器操作 n n立即数操作立即数操作n n寄存器移位操作寄存器移位操作 n n其中32位立即数在32位指令中的编码以及ARM特有的寄存器移位操作是
16、数据处理方面的难点。第16页/共107页2023/3/16信息学院-通信教研室-油海东18设置条件码设置条件码n nARM的任何数据处理指令都能通过增加“S”操作码来设置条件码(N,Z,C和V)n n 条件执行 n nARMARM指令集不同寻常的特征是指令集不同寻常的特征是每条指令(除了某些每条指令(除了某些v5Tv5T指令)指令)都可以是条件执行的。都可以是条件执行的。n n 条件转移 n n在程序中在程序中可以通过条件码的使可以通过条件码的使用让用让微处理器决定是否进行转微处理器决定是否进行转移,还可用来控制循环的退出。移,还可用来控制循环的退出。第17页/共107页2023/3/16信息
17、学院-通信教研室-油海东19汇编语言子程序调用及返回汇编语言子程序调用及返回n n子程序的调用n n在在ARMARM汇汇编编语语言言中中,子子程程序序调调用用是是通通过过BLBL指指令令来来完完成成的的。BLBL指令的语法格式如下:指令的语法格式如下:n nBL subnameBL subnamen n其中,其中,subnamesubname是被调用的子程序的名称是被调用的子程序的名称n n子程序的返回n n在返回调用子程序时,转移链接指令保存到在返回调用子程序时,转移链接指令保存到LRLR寄存器(寄存器(r14r14)中的值需要拷贝回程序寄存器中的值需要拷贝回程序寄存器PCPC(r15r15
18、)。)。第18页/共107页2023/3/16信息学院-通信教研室-油海东20跳转表思想跳转表思想n n在程序设计中,有时为使程序完成一定的功能,在程序设计中,有时为使程序完成一定的功能,需要调用一系列子程序中的一个,而决定究竟需要调用一系列子程序中的一个,而决定究竟调用哪一个由程序的计算值确定。调用哪一个由程序的计算值确定。n n跳转表是解决该问题的有效方案。跳转表是利跳转表是解决该问题的有效方案。跳转表是利用程序计数器用程序计数器PCPC在通用寄存器文件中的可见在通用寄存器文件中的可见性来实现的性来实现的n n类似中断向量表类似中断向量表第19页/共107页2023/3/16信息学院-通信
19、教研室-油海东21第第4章章 ARM汇编语言程序设计汇编语言程序设计1.ARM汇编语言伪指令汇编语言伪指令3.ARM汇编语言程序结构汇编语言程序结构2.ARM汇编语言语句格式汇编语言语句格式4.简单的简单的ARM程序设计程序设计6.ARM汇编语言与汇编语言与C混合编程混合编程5.ARM汇编语言集成开发环境汇编语言集成开发环境第20页/共107页2023/3/16信息学院-通信教研室-油海东22简单的简单的ARM汇编程序汇编程序n n编写64位加法运算程序,要求实现R1:R0+R3:R2,结果放在R1,R0中。AREA add64 CODE READONLY ENTRY ADDS R0,R0,R
20、2 ADDC R1,R1,R3 END请看例6第21页/共107页2023/3/16信息学院-通信教研室-油海东23数据串拷贝程序数据串拷贝程序 AREA strcopy CODE,AREA strcopy CODE,READONLYREADONLY ENTRY ENTRYstart start LDR R1,=srcstr LDR R1,=srcstr LDR R0,=dststr LDR R0,=dststr BL strcopy BL strcopystopstop MOV R0,0 x18 MOV R0,0 x18 LDR R1,=0 x20026 LDR R1,=0 x20026 S
21、WI 0 x123456 SWI 0 x123456 strcopyLDRBR2,R1,#1STRBR2,R0,#1CMPR2,#0BNEstrcopyMOVPC,LRAREAstringsDATA,REDAWRITEsrcstrDCB“first”,0dststrDCB“second”,0END请看例7第22页/共107页2023/3/16信息学院-通信教研室-油海东24练习练习n n1.把R2的高8位拷贝到R3的低8位中n n2.编写64位减法程序,R1:R0-R3:R2,结果存放在R1,R0中n n3.编写程序,把地址为1000H1030H中的数据搬移到2000H2030H中,并清空原始
22、数据第23页/共107页2023/3/16信息学院-通信教研室-油海东25第第4章章 ARM汇编语言程序设计汇编语言程序设计1.ARM汇编语言伪指令汇编语言伪指令3.ARM汇编语言程序结构汇编语言程序结构2.ARM汇编语言语句格式汇编语言语句格式4.简单的简单的ARM程序设计程序设计6.ARM汇编语言与汇编语言与C混合编程混合编程5.ARM汇编语言集成开发环境汇编语言集成开发环境第24页/共107页2023/3/16信息学院-通信教研室-油海东26ARM汇编语言集成开发环境汇编语言集成开发环境n n开发环境开发环境n n开发流程n n工程的建立与配置n n编写软件源文件n n软件工程的编译链接
23、n n软件调试n n可执行文件固化第25页/共107页2023/3/16信息学院-通信教研室-油海东27开发环境组成开发环境组成EmbestIDEARM开发板Embest仿真器EmbestIDE开发环境PCEmbest IDE(Integrated Development Environment),由深圳英倍特公司研发。第26页/共107页2023/3/16信息学院-通信教研室-油海东28开发环境的链接开发环境的链接第27页/共107页2023/3/16信息学院-通信教研室-油海东29Embest仿真器仿真器增强型仿真器PowerICE120KByte/S标准型仿真器Emulator25KBy
24、te/S第28页/共107页2023/3/16信息学院-通信教研室-油海东30Embest IDE for ARMn nEmbest IDE for ARM集成了如下功能:n n编辑器编辑器n n编译器编译器n n调试器调试器n n工程管理器工程管理器n n一种窗口开发环境第29页/共107页2023/3/16信息学院-通信教研室-油海东31开发模型开发模型n n开发环境由软件(Embest IDE和PC机提供的软件支持)和硬件组成(仿真器和ARM开发板)n nEmbest IDE采用主机(PC机)-目标机(ARM开发板)交叉开发模型n n主机和目标机通过仿真器主机和目标机通过仿真器(JTAG
25、)(JTAG)链接链接n n在在Embest IDEEmbest IDE中编辑、编译程序,生成可执行中编辑、编译程序,生成可执行文件,下载到目标机文件,下载到目标机(RAM/ROM/FLASH)(RAM/ROM/FLASH),实,实现对程序的调试、分析。现对程序的调试、分析。第30页/共107页2023/3/16信息学院-通信教研室-油海东32Embest IDE的特征的特征n n支持所有支持所有ARM7ARM7,ARM9ARM9系列处理器;系列处理器;n n支持开发语言:支持开发语言:C C和汇编;和汇编;n n支持支持Windows 98Windows 98、XPXP、NTNT及及2000
26、2000等操作系统;等操作系统;n n源码编辑器:支持标准的文本编辑功能,支持语法分源码编辑器:支持标准的文本编辑功能,支持语法分色显示。色显示。n n使用优秀自由软件使用优秀自由软件GUNGUN的的GCCGCC编译连接器,同时支编译连接器,同时支持持ARM ADS/SDTARM ADS/SDT编译工具。编译工具。n n调试功能:可进行程序下载、断点设置、单步执行、调试功能:可进行程序下载、断点设置、单步执行、异常处理等,可查看修改存储区、寄存器、变量异常处理等,可查看修改存储区、寄存器、变量n n丰富的例程:提供公司丰富的例程:提供公司ARMARM处理器的调试程序示例和处理器的调试程序示例和
27、使用说明。使用说明。n n配合配合Embest PowerICEEmbest PowerICE仿真器,速度达仿真器,速度达120KB/s120KB/s第31页/共107页2023/3/16信息学院-通信教研室-油海东33ARM汇编语言集成开发环境汇编语言集成开发环境n n开发环境n n开发流程开发流程n n工程的建立与配置n n编写软件源文件n n软件工程的编译链接n n软件调试n n可执行文件固化第32页/共107页2023/3/16信息学院-通信教研室-油海东34开发流程开发流程工程建立源文件编译调试固化vC语言程序*.cv汇编源程序*.sv链接脚本文件*.ldv命令脚本文件*.CSv存储
28、区映像文件*.map第33页/共107页2023/3/16信息学院-通信教研室-油海东35源文件源文件n n汇编文件.sn n一般用来作为硬件的初始化一般用来作为硬件的初始化n nC文件.cn n一般用来编写应用程序一般用来编写应用程序第34页/共107页2023/3/16信息学院-通信教研室-油海东36链接脚本文件链接脚本文件.ldn n在系统级别的嵌入式开发中需要使用链接定位文件,该文件描述代码链接定位的有关信息,包括代码段,数据段,地址段等,链接器必须使用该文件对整个系统的代码做正确的定位,该文件称为链接脚本文件(*.ld)第35页/共107页2023/3/16信息学院-通信教研室-油海
29、东37存储区映像文件存储区映像文件.mapn n在软件调试过程中访问非法存储区在部分处理器和目标板上会产生异常,如果异常没有处理,则会导致软件调试过程无法继续,为了防止以上问题并调整仿真器访问速度以达到最合适的水平,而提供的一种用于描述各个存储区性质的文件叫存储区映像文件(*.map)第36页/共107页2023/3/16信息学院-通信教研室-油海东38命令脚本文件命令脚本文件.csn n在集成环境与目标连接时、软件调试过程中以及目标板复位后,有时需要集成环境自动完成一些特定的操作,比如复位目标板、清除看门狗、屏蔽中断寄存器、存储区映射等。这些操作可以通过执行一组命令序列来完成,保存一组命令序
30、列的文本文件称为命令脚本文件(*.cs)n n类似于DOS的批处理文件第37页/共107页2023/3/16信息学院-通信教研室-油海东39ARM汇编语言集成开发环境汇编语言集成开发环境n n开发环境n n开发流程n n工程的建立与配置工程的建立与配置n n编写软件源文件n n软件工程的编译链接n n软件调试n n可执行文件固化第38页/共107页2023/3/16信息学院-通信教研室-油海东40步骤步骤建立软件工程配置处理器配置调试设备第39页/共107页2023/3/16信息学院-通信教研室-油海东41创建软件工程创建软件工程创建新工程选择File菜单项中的建立新工程选项输入工程名和要保存
31、工程的路径名用户可以在工作区内自由添加各种文件第40页/共107页2023/3/16信息学院-通信教研室-油海东42处理器配置处理器配置配置ARM7ARM9配置芯片厂家配置具体芯片型号第41页/共107页2023/3/16信息学院-通信教研室-油海东43配置调试器配置调试器第42页/共107页2023/3/16信息学院-通信教研室-油海东44ARM汇编语言集成开发环境汇编语言集成开发环境n n开发环境n n开发流程n n工程的建立与配置n n编写软件源文件编写软件源文件n n软件工程的编译链接n n软件调试n n可执行文件固化第43页/共107页2023/3/16信息学院-通信教研室-油海东4
32、5源文件的形式源文件的形式n n汇编文件n n启动程序文件启动程序文件n nC文件n n应用程序文件应用程序文件第44页/共107页2023/3/16信息学院-通信教研室-油海东46启动代码说明启动代码说明n n功能n n硬件初始化硬件初始化n n为高级语言编写的应用软件做准备为高级语言编写的应用软件做准备n n特征n n汇编语言汇编语言n n程序复位运行的入口点程序复位运行的入口点第45页/共107页2023/3/16信息学院-通信教研室-油海东47启动流程启动流程设置中断、异常向量设置中断、异常向量系统寄存器配置系统寄存器配置看门狗及外围电路初始化看门狗及外围电路初始化存储区电路初始化存储
33、区电路初始化变量初始化变量初始化数据区准备数据区准备高级语言入口函数调高级语言入口函数调用用初始化栈指针初始化栈指针请看示例第46页/共107页2023/3/16信息学院-通信教研室-油海东48ARM汇编语言集成开发环境汇编语言集成开发环境n n开发环境n n开发流程n n工程的建立与配置n n编写软件源文件n n软件工程的编译链接软件工程的编译链接n n软件调试n n可执行文件固化第47页/共107页2023/3/16信息学院-通信教研室-油海东49工程编译相关文件工程编译相关文件工程编译工程文件工程文件源代码文件源代码文件链接文件链接文件函数库文件函数库文件调试信息文件调试信息文件第48页
34、/共107页2023/3/16信息学院-通信教研室-油海东50文件类型文件类型n n工程文件(*.ews、*.prj)n n工作区文件工作区文件*.ews.ews 工程文件工程文件*.pjf.pjfn n 工程创建与配置自动生成,禁止用户修改工程创建与配置自动生成,禁止用户修改n n链接脚本文件(*.ld)n n 遵照脚本文件格式,用户复制示例或手工输入遵照脚本文件格式,用户复制示例或手工输入n n 编写根据用户软件设计和电路存储区安排编写根据用户软件设计和电路存储区安排n n函数库文件(*.lib、*.a)n n Embest IDEEmbest IDE附带的标准嵌入式附带的标准嵌入式C C
35、函数库函数库n n 用户自己编写的函数库用户自己编写的函数库第49页/共107页2023/3/16信息学院-通信教研室-油海东51链接脚本文件链接脚本文件n n绝大部分嵌入式软件都涉及到链接定位脚本文件;链接定位脚本使得我们的目标代码组织更加灵活 n n链接定位过程一般由链接器根据链接定位脚本完成,比较简单的系统可以通过设置链接器开关选项取代链接定位脚本 第50页/共107页2023/3/16信息学院-通信教研室-油海东52段的属性段的属性n n一个嵌入式开发源文件由很多段组成一个嵌入式开发源文件由很多段组成(代码段、数据代码段、数据段等段等)n n段的属性包括段的属性包括n n名称(名称(N
36、ameName)n n类型(类型(TypeType)n n地址(地址(AddrAddr)n n偏移(偏移(OffsOffs)n n大小(大小(SizeSize)n n固定单元大小(固定单元大小(EsEs)n n标志(标志(FlgFlg)n n连接依赖(连接依赖(LkLk)n n附加属性(附加属性(InfInf)n n字节对齐宽度(字节对齐宽度(AlAl)地址地址(Addr):(Addr):描述了这一段在目标系统中的地址描述了这一段在目标系统中的地址 偏移偏移(Offs):(Offs):描述了该段在目标文件中的偏移描述了该段在目标文件中的偏移 大小大小(sizesize):):表示该段的实际长度
37、表示该段的实际长度 假设:假设:.text.text段的地址为段的地址为0 x0c7000000 x0c700000,偏移为,偏移为0 x0080000 x008000,大小为,大小为0 x9d000 x9d00,说明该段位于文件的偏移,说明该段位于文件的偏移0 x0080000 x008000处,它将被下载到目标板处,它将被下载到目标板0 x0c7000000 x0c700000处。处。从段的分类来看,涉及到定位的是:从段的分类来看,涉及到定位的是:.text.text、.data.data、.rodata.rodata、.bss.bss第51页/共107页2023/3/16信息学院-通信教
38、研室-油海东53链接脚本示例链接脚本示例SECTIONS.=0 x0C000000;Image_RO_Base=.;.text:*(.text);Image_RO_Limit=.;Image_RW_Base=.;.data:*(.data);.rodata:*(.rodata);Image_ZI_Base=.;.bss:*(.bss);Image_ZI_Limit=.;Image_RW_Limit=.;_bss_start_=.;_bss_end_=.;_EH_FRAME_BEGIN_=.;_EH_FRAME_END_=.;PROVIDE(_stack=.);end=.;_end=.;.deb
39、ug_info0:*(.debug_info).debug_line0:*(.debug_line).debug_abbrev0:*(.debug_abbrev).debug_frame0:*(.debug_frame)赋当前地址,可能为RAM或Flash的访问地址后面的代码将从该地址开始存放只读区域基地址,启动程序中使用的符号=.表示该符号的值等于当前地址代码段,在这里标识开始放置程序代码只读区域长度,启动程序中使用的符号读写区域基地址,启动程序中使用的符号数据段,程序中已初始化的全局变量放在该段只读数据段,程序中静态全局变量等固定值放在该段清零区域基地址,启动程序中使用的符号包含未初始化的
40、全局可用数据,如未初始化全局变量清零区域长度,启动程序中使用的符号读写区域基长度,启动程序中使用的符号调调试试信信息息gcc库库专专用用实际上是在这里声明了一个全实际上是在这里声明了一个全局符号,我们可以在程序中使局符号,我们可以在程序中使用该符号,它等同于在代码中用该符号,它等同于在代码中声明一个全局变量,但它的值声明一个全局变量,但它的值由链接器指定由链接器指定 第52页/共107页2023/3/16信息学院-通信教研室-油海东54链接脚本与程序的对应链接脚本与程序的对应intA1;intA2=5;constintA3=10;voidmain()intA4;registerintA5;A4
41、=A3;.text:*(.text);代码段,在这里标识从代码段,在这里标识从0开始放置程序代码开始放置程序代码.rodata:*(.rodata);只读数据段,程序中静态全局变量等固定值放在该段只读数据段,程序中静态全局变量等固定值放在该段.data:*(.data);数据段数据段,程序中已初始化的全局变量放在该段程序中已初始化的全局变量放在该段.bss:*(.bss);包含未初始化的全局可用数据包含未初始化的全局可用数据,如未初始化全局变量如未初始化全局变量变量A1作为未初始化的变量将保存在.bss段中变量A2作为已初始化的变量将保存在.data段中常量A3保存在只读数据断.rodata段
42、中main函数对应的代码保存在.text段中寄存器变量A5直接保存在ARM的一个寄存器中局部变量A4当程序执行到main函数时存放在main函数对应的函数栈中第53页/共107页2023/3/16信息学院-通信教研室-油海东55链接标准函数库链接标准函数库链接排列顺序为-lm-lc-lgcc-lgEmbestIDE附带的GNU标准函数库标准标准C函数库函数库 libc.a -lc标准数学函数库标准数学函数库 libm.a-lm标准函数库的支持库标准函数库的支持库libg.a-lgGCC的支持库的支持库libgcc.a-lgcc第54页/共107页2023/3/16信息学院-通信教研室-油海东5
43、6编译器配置编译器配置包含文件目录编译目标文件输出目录编译器预定义设置使用ARM指令、THUMB指令或交互方式设置编译的字节顺序第55页/共107页2023/3/16信息学院-通信教研室-油海东57汇编器配置汇编器配置包含文件目录;汇编输出文件目录汇编预定义ARM/THUMB指令或交互工作方式编码字节顺序第56页/共107页2023/3/16信息学院-通信教研室-油海东58链接器配置链接器配置设置使用的链接脚本文件设置输出的调试信息文件设置入口文件设置链接的用户函数库或标准函数库第57页/共107页2023/3/16信息学院-通信教研室-油海东59ARM汇编语言集成开发环境汇编语言集成开发环境
44、n n开发环境n n开发流程n n工程的建立与配置n n编写软件源文件n n软件工程的编译链接n n软件调试软件调试n n可执行文件固化第58页/共107页2023/3/16信息学院-通信教研室-油海东60调试步骤调试步骤调试准备存储区映像文件存储区映像文件命令脚本文件命令脚本文件调试配置连接和下载控制执行调试信息观察第59页/共107页2023/3/16信息学院-通信教研室-油海东61存储区映像文件存储区映像文件(.map)格式格式n n防止调试时访问非法存储区产生的异常文件格式第60页/共107页2023/3/16信息学院-通信教研室-油海东62存储区映像文件示例存储区映像文件示例用户一般
45、不用关注以下选项用户一般不用关注以下选项总线宽度、访问尺寸、读等待、写等待、高速访问等待总线宽度、访问尺寸、读等待、写等待、高速访问等待名称起始地址长度属性第61页/共107页2023/3/16信息学院-通信教研室-油海东63控制台调试命令控制台调试命令调试命令列表调试命令列表BKPTCLEAR清除断点BKPTDATA设置数据断点BKPTINST设置指令断点BKPTLIST断点列表DISASM反汇编DOWNLOAD文件下载GO执行程序HELP显示帮助信息MEMREAD存储区读MEMWRITE存储区写REFRESH刷新窗口REGLIST寄存器列表REGREAD寄存器读REGWRITE寄存器写RE
46、SET复位目标设备SCRIPT执行脚本文件STEP单步执行程序STOP停止执行程序SYMBOL载入符号文件MEMWRITE 存储区写存储区写语语 法:法:memwritee地址数值说说 明:明:向存储区指定地址写入数值地址要写入数值的存储区地址数值待写数值选选 项:项:-e大端方式写入示例:memwrite0 x10000 x5A向地址0 x1000处写入数值0 x5Amemwrite-e0 x20000000 x22334455等效于memwrite0 x20000000 x55443322第62页/共107页2023/3/16信息学院-通信教研室-油海东64命令脚本命令脚本.cs文件文件n
47、 n命令脚本文件是目标板连接以后程序下载之前对目标板进行的一系列初始化动作的脚本文件,n n主要的目的就是在目标板连接以后初始化RAM区,以使程序能够成功下载到RAM中n n命令脚本执行方法:n n 在工程设置对话框调试选项中在在工程设置对话框调试选项中在“连接后行为连接后行为”中指定连接后执行命令脚本中指定连接后执行命令脚本n n 在集成环境连接目标板后,在调试命令窗口里执行在集成环境连接目标板后,在调试命令窗口里执行 ScriptScript 命令脚本文件名命令脚本文件名 第63页/共107页2023/3/16信息学院-通信教研室-油海东65命令脚本文件常用命令命令脚本文件常用命令命令命令
48、语法语法说明说明参数参数gogo从当前从当前PCPC执行执行目标程序目标程序无无memwritememwrite-e地址地址数值数值 向存储区指定向存储区指定地址写入数值地址写入数值 地址地址/数值数值 -e:-e:大端格式大端格式refreshrefresh刷新所有窗口刷新所有窗口 无无regwriteregwrite寄存寄存器名器名寄存器值寄存器值写寄存器写寄存器 寄存器名寄存器名寄寄存器值存器值resetreset复位目标板复位目标板无无stopstop停止目标板运停止目标板运行行无无第64页/共107页2023/3/16信息学院-通信教研室-油海东66命令脚本文件示例命令脚本文件示例第
49、65页/共107页2023/3/16信息学院-通信教研室-油海东67调试配置调试配置设置连接后执行的命令脚本设置调试信息文件设置下载文件设置下载到RAM区地址第66页/共107页2023/3/16信息学院-通信教研室-油海东68控制程序执行控制程序执行复位运行停止重新运行单步进入函数单步执行单步跳出函数执行到光标设置断点禁止断点第67页/共107页2023/3/16信息学院-通信教研室-油海东69观察调试信息观察调试信息存储区窗函数栈窗观察窗变量窗寄存器窗外围寄存器窗第68页/共107页2023/3/16信息学院-通信教研室-油海东70寄存器与外围寄存器窗口寄存器与外围寄存器窗口值已修改寄存器
50、窗外围寄存器寄存器树值已修改值已修改寄存器名值已修改寄存器组第69页/共107页2023/3/16信息学院-通信教研室-油海东71ARM汇编语言集成开发环境汇编语言集成开发环境n n开发环境n n开发流程n n工程的建立与配置n n编写软件源文件n n软件工程的编译链接n n软件调试n n可执行文件固化可执行文件固化第70页/共107页2023/3/16信息学院-通信教研室-油海东72生成可执行文件生成可执行文件源文件*.Elf*.Bin(编译编译)(Elf to Bin)(Elf to Bin)第71页/共107页2023/3/16信息学院-通信教研室-油海东73程序固化程序固化命令中断和退