《嵌入式系统设计与开发 ARM汇编语言程序设计课件.pptx》由会员分享,可在线阅读,更多相关《嵌入式系统设计与开发 ARM汇编语言程序设计课件.pptx(107页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/3/24信息学院-通信教研室-油海东1第8章 ARM汇编语言程序设计1.ARM汇编语言伪指令3.ARM汇编语言程序结构2.ARM汇编语言语句格式4.简单的ARM程序设计6.ARM汇编语言与C混合编程5.ARM汇编语言集成开发环境第1页/共107页2023/3/24信息学院-通信教研室-油海东2ARM汇编中的文件格式ARM源程序文件(可简称为源文件)可以由任意一种文本编辑器来编写程序代码,它一般为文本格式。常用的源文件:源程序文件文件名说明汇编程序文件*.S用ARM汇编语言编写的ARM程序或Thumb程序。C程序文件*.C用C语言编写的程序代码。头文件*.H头文件,包括常量命名、宏定义
2、、数据结构定义第2页/共107页2023/3/24信息学院-通信教研室-油海东3ARM汇编程序的段 ARM汇编语言是以段(section)为单位来组织源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到的数据。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。第3页/共107页2023/3/24信息学院-通信教研室-油海东4ARM程序结构 AREAAmex,CODE,READONLY ENTRYStart MOV R0,#10 MOV R1,#3 ADD R0,R0,R1Stop
3、 MOV R1,#0X18 SWI 0 x123456 END1.ARM汇编程序,以段为单位组织程序2.段可以分为代码段和数据段,一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段4.多个段在程序编译链接时最终形成一个可执行的映象文件5.可执行映象文件通常由以下几部分构成一个或多个代码段,代码段的属性为只读零个或多个包含初始化数据的数据段,数据段的属性为可读写。零个或多个不包含初始化数据的数据段,数据段的属性为可读写。6.使用AREA伪指令定义一个段。程序入口,即程序中第一条可执行的指令可执行指令程序结束第4页/共107页2023/3/24信息学院-通信教研室-油海东
4、5GUN编译环境和ADS/SDT编译环境的区别Embest IDE集成的编译器是自由软件GUN编译器。以前介绍的程序均为ARM ADS/SDT环境下的汇编程序二者的区别:ADS注释行以“;”开始。GUN以“”开始,或者“/*/”ARM ADS/SDT下的伪指令与GUN下的伪指令不同ARM指令均相同第5页/共107页2023/3/24信息学院-通信教研室-油海东6GUN下的伪指令常量编译控制伪操作汇编程序代码控制伪操作宏及条件编译控制伪操作其他伪操作第6页/共107页2023/3/24信息学院-通信教研室-油海东7常量编译控制伪操作伪操作语法格式作用.byte.byteexpr,expr分配一段
5、字节内存单元,并用expr初始化。.hword/.short.hwordexpr,expr分配一段半字内存单元,并用expr初始化。.ascii.asciiexpr,expr定义字符串expr(非零结束符)。.asciz/.string.ascizexpr,expr定义字符串expr(以/0为结束符)。.float/.single.floatexpr,expr定义一个32bitIEEE浮点数expr。.double.doubleexpr,expr定义64bitIEEE浮点数expr。word/.long/.int.wordexpr,expr分配一段字内存单元,并用expr初始化。.fill.f
6、ill repeat,size,value分配一段字节内存单元,用size长度value填充repeat次。.zero.zerosize分配一段字节内存单元,并用0填充内存。.space/.skip.spacesize,value分配一段内存单元,用value将内存单元初始化第7页/共107页2023/3/24信息学院-通信教研室-油海东8汇编程序代码控制伪操作符伪操作语法格式作用.section.sectionexpr定义域中包含的段。.text.textsubsection将操作符开始的代码编译到代码段或代码段子段。.data.datasubsection将操作符开始的数据编译到数据段或数
7、据段子段。.bss.bsssubsection将变量存放到.bss段或.bss段的子段。.code16/.thumb.code16.thumb表明当前汇编指令的指令集选择Thumb指令集。.code32/.arm.code32.arm表明当前汇编指令的指令集选择ARM指令集。.end.end标记汇编文件的结束行,即标号后的代码不作处理。.include.include“filename”将一个源文件包含到当前源文件中。.align/.balign.align alignment ,fill,max通过添加填充字节使当前位置满足一定的对齐方式。第8页/共107页2023/3/24信息学院-通信教
8、研室-油海东9宏及条件编译伪操作符伪操作语法格式作用.macro、.exitm及.endm.macroacroname parameter,parameter.endm.macro伪操作标识宏定义的开始,.endm标识宏定义的结束。用.macro及.endm定义一段代码,称为宏定义体。.exitm伪操作用于提前退出宏。.ifdef,.else及.endif.ifdefcondition.else.endif当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。其中else可以缺省。第9页/共107页2023/3/24信息学院-通信教研室-油海东10其它伪操作符伪操作语法格式作用.
9、eject.eject在汇编符号列表文件中插入一分页符。.list.list产生汇编列表(从.list到.nolist)。.nolist.nolist表示汇编列表结束处。.title.title“heading”使用“heading”作为标题。.sbttl.sbttl“heading”使用“heading”作为子标题。.ltorg.ltorg在当前段的当前地址(字对齐)产生一个文字池。.req.reqname,expr为一个特定的寄存器定义名称。.err.err使编译时产生错误报告。.print.printstring打印信息到标准输出。.fail.failexpr编译汇编文件时产生警告。第1
10、0页/共107页2023/3/24信息学院-通信教研室-油海东11SDT下和GUN下伪操作符的区别SDT下的伪操作符下的伪操作符GUN下的伪操作符下的伪操作符INCLUDE.includeAEQUPB25.equA,PB25EXPORT.globalIMPORT.externDCD.longIF:DEF:.ifdefELSE.elseENDIF.endif:OR:|:SHL:第11页/共107页2023/3/24信息学院-通信教研室-油海东12SDT下和GUN下伪操作符的区别SDT下的伪操作符下的伪操作符GUN下的伪操作符下的伪操作符RN.reqGBLA.globalBUSSETA#0 x20
11、.equBUS,0 x20MACRO.macroMEND.mendEND.endAREAworkCODEREADONLY.textAREAblockDATAREADWRITE.dataCODE32.armCODE16.thumb第12页/共107页2023/3/24信息学院-通信教研室-油海东13ARM汇编语言的伪指令伪指令语法格式作用ADRADRcondregister,expr将基于PC或基于寄存器的地址值读取到寄存器中。小范围的地址读取。ADRLADRL cond register,expr将基于PC或基于寄存器的地址值读取到寄存器中。中等范围的地址读取。LDRLDR cond regi
12、ster,=expr|label-expr将一个32位的立即数或者一个地址值读取到寄存器中。大范围的地址读取。NOPNOP在汇编时将被替换成ARM中的空操作。第13页/共107页2023/3/24信息学院-通信教研室-油海东14ADS/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
13、,R0,R1stop:MOVR0,0 x18LDRR1,=0 x20026SWI0 x123456.end我改第14页/共107页2023/3/24信息学院-通信教研室-油海东15ARM汇编程序设计的难点ARM数据处理操作设置条件码汇编语言子程序调用及返回 跳转表思想ARM与Thumb之间的状态转换及函数的相互调用第15页/共107页2023/3/24信息学院-通信教研室-油海东16ARM数据处理操作ARM中数据的处理有以下三种形式:简单的寄存器操作 立即数操作寄存器移位操作 其中32位立即数在32位指令中的编码以及ARM特有的寄存器移位操作是数据处理方面的难点。第16页/共107页2023/
14、3/24信息学院-通信教研室-油海东17设置条件码ARM的任何数据处理指令都能通过增加“S”操作码来设置条件码(N,Z,C和V)条件执行 ARM指令集不同寻常的特征是每条指令(除了某些v5T指令)都可以是条件执行的。条件转移 在程序中可以通过条件码的使用让微处理器决定是否进行转移,还可用来控制循环的退出。第17页/共107页2023/3/24信息学院-通信教研室-油海东18汇编语言子程序调用及返回子程序的调用在ARM汇编语言中,子程序调用是通过BL指令来完成的。BL指令的语法格式如下:BL subname其中,subname是被调用的子程序的名称子程序的返回在返回调用子程序时,转移链接指令保存
15、到LR寄存器(r14)中的值需要拷贝回程序寄存器PC(r15)。第18页/共107页2023/3/24信息学院-通信教研室-油海东19跳转表思想在程序设计中,有时为使程序完成一定的功能,需要调用一系列子程序中的一个,而决定究竟调用哪一个由程序的计算值确定。跳转表是解决该问题的有效方案。跳转表是利用程序计数器PC在通用寄存器文件中的可见性来实现的类似中断向量表第19页/共107页2023/3/24信息学院-通信教研室-油海东20第4章 ARM汇编语言程序设计1.ARM汇编语言伪指令3.ARM汇编语言程序结构2.ARM汇编语言语句格式4.简单的ARM程序设计6.ARM汇编语言与C混合编程5.ARM
16、汇编语言集成开发环境第20页/共107页2023/3/24信息学院-通信教研室-油海东21简单的ARM汇编程序编写64位加法运算程序,要求实现R1:R0+R3:R2,结果放在R1,R0中。AREA add64 CODE READONLY ENTRY ADDS R0,R0,R2 ADDC R1,R1,R3 END请看例6第21页/共107页2023/3/24信息学院-通信教研室-油海东22数据串拷贝程序 AREA strcopy CODE,READONLY ENTRYstart LDR R1,=srcstr LDR R0,=dststr BL strcopystop MOV R0,0 x18 L
17、DR R1,=0 x20026 SWI 0 x123456 strcopyLDRBR2,R1,#1STRBR2,R0,#1CMPR2,#0BNEstrcopyMOVPC,LRAREAstringsDATA,REDAWRITEsrcstrDCB“first”,0dststrDCB“second”,0END请看例7第22页/共107页2023/3/24信息学院-通信教研室-油海东23练习1.把R2的高8位拷贝到R3的低8位中2.编写64位减法程序,R1:R0-R3:R2,结果存放在R1,R0中3.编写程序,把地址为1000H1030H中的数据搬移到2000H2030H中,并清空原始数据第23页/共
18、107页2023/3/24信息学院-通信教研室-油海东24第4章 ARM汇编语言程序设计1.ARM汇编语言伪指令3.ARM汇编语言程序结构2.ARM汇编语言语句格式4.简单的ARM程序设计6.ARM汇编语言与C混合编程5.ARM汇编语言集成开发环境第24页/共107页2023/3/24信息学院-通信教研室-油海东25ARM汇编语言集成开发环境开发环境开发流程工程的建立与配置编写软件源文件软件工程的编译链接软件调试可执行文件固化第25页/共107页2023/3/24信息学院-通信教研室-油海东26开发环境组成EmbestIDEARM开发板Embest仿真器EmbestIDE开发环境PCEmbes
19、t IDE(Integrated Development Environment),由深圳英倍特公司研发。第26页/共107页2023/3/24信息学院-通信教研室-油海东27开发环境的链接第27页/共107页2023/3/24信息学院-通信教研室-油海东28Embest仿真器增强型仿真器PowerICE120KByte/S标准型仿真器Emulator25KByte/S第28页/共107页2023/3/24信息学院-通信教研室-油海东29Embest IDE for ARMEmbest IDE for ARM集成了如下功能:编辑器编译器调试器工程管理器一种窗口开发环境第29页/共107页202
20、3/3/24信息学院-通信教研室-油海东30开发模型开发环境由软件(Embest IDE和PC机提供的软件支持)和硬件组成(仿真器和ARM开发板)Embest IDE采用主机(PC机)-目标机(ARM开发板)交叉开发模型主机和目标机通过仿真器(JTAG)链接在Embest IDE中编辑、编译程序,生成可执行文件,下载到目标机(RAM/ROM/FLASH),实现对程序的调试、分析。第30页/共107页2023/3/24信息学院-通信教研室-油海东31Embest IDE的特征支持所有ARM7,ARM9系列处理器;支持开发语言:C和汇编;支持Windows 98、XP、NT及2000等操作系统;源
21、码编辑器:支持标准的文本编辑功能,支持语法分色显示。使用优秀自由软件GUN的GCC编译连接器,同时支持ARM ADS/SDT编译工具。调试功能:可进行程序下载、断点设置、单步执行、异常处理等,可查看修改存储区、寄存器、变量丰富的例程:提供公司ARM处理器的调试程序示例和使用说明。配合Embest PowerICE仿真器,速度达120KB/s第31页/共107页2023/3/24信息学院-通信教研室-油海东32ARM汇编语言集成开发环境开发环境开发流程工程的建立与配置编写软件源文件软件工程的编译链接软件调试可执行文件固化第32页/共107页2023/3/24信息学院-通信教研室-油海东33开发流
22、程工程建立源文件编译调试固化vC语言程序*.cv汇编源程序*.sv链接脚本文件*.ldv命令脚本文件*.CSv存储区映像文件*.map第33页/共107页2023/3/24信息学院-通信教研室-油海东34源文件汇编文件.s一般用来作为硬件的初始化C文件.c一般用来编写应用程序第34页/共107页2023/3/24信息学院-通信教研室-油海东35链接脚本文件.ld在系统级别的嵌入式开发中需要使用链接定位文件,该文件描述代码链接定位的有关信息,包括代码段,数据段,地址段等,链接器必须使用该文件对整个系统的代码做正确的定位,该文件称为链接脚本文件(*.ld)第35页/共107页2023/3/24信息
23、学院-通信教研室-油海东36存储区映像文件.map在软件调试过程中访问非法存储区在部分处理器和目标板上会产生异常,如果异常没有处理,则会导致软件调试过程无法继续,为了防止以上问题并调整仿真器访问速度以达到最合适的水平,而提供的一种用于描述各个存储区性质的文件叫存储区映像文件(*.map)第36页/共107页2023/3/24信息学院-通信教研室-油海东37命令脚本文件.cs在集成环境与目标连接时、软件调试过程中以及目标板复位后,有时需要集成环境自动完成一些特定的操作,比如复位目标板、清除看门狗、屏蔽中断寄存器、存储区映射等。这些操作可以通过执行一组命令序列来完成,保存一组命令序列的文本文件称为
24、命令脚本文件(*.cs)类似于DOS的批处理文件第37页/共107页2023/3/24信息学院-通信教研室-油海东38ARM汇编语言集成开发环境开发环境开发流程工程的建立与配置编写软件源文件软件工程的编译链接软件调试可执行文件固化第38页/共107页2023/3/24信息学院-通信教研室-油海东39步骤建立软件工程配置处理器配置调试设备第39页/共107页2023/3/24信息学院-通信教研室-油海东40创建软件工程创建新工程选择File菜单项中的建立新工程选项输入工程名和要保存工程的路径名用户可以在工作区内自由添加各种文件第40页/共107页2023/3/24信息学院-通信教研室-油海东41
25、处理器配置配置ARM7ARM9配置芯片厂家配置具体芯片型号第41页/共107页2023/3/24信息学院-通信教研室-油海东42配置调试器第42页/共107页2023/3/24信息学院-通信教研室-油海东43ARM汇编语言集成开发环境开发环境开发流程工程的建立与配置编写软件源文件软件工程的编译链接软件调试可执行文件固化第43页/共107页2023/3/24信息学院-通信教研室-油海东44源文件的形式汇编文件启动程序文件C文件应用程序文件第44页/共107页2023/3/24信息学院-通信教研室-油海东45启动代码说明功能硬件初始化为高级语言编写的应用软件做准备特征汇编语言程序复位运行的入口点第
26、45页/共107页2023/3/24信息学院-通信教研室-油海东46启动流程设置中断、异常向量系统寄存器配置看门狗及外围电路初始化存储区电路初始化变量初始化数据区准备高级语言入口函数调用初始化栈指针请看示例第46页/共107页2023/3/24信息学院-通信教研室-油海东47ARM汇编语言集成开发环境开发环境开发流程工程的建立与配置编写软件源文件软件工程的编译链接软件调试可执行文件固化第47页/共107页2023/3/24信息学院-通信教研室-油海东48工程编译相关文件工程编译工程文件源代码文件链接文件函数库文件调试信息文件第48页/共107页2023/3/24信息学院-通信教研室-油海东49
27、文件类型工程文件(*.ews、*.prj)工作区文件*.ews 工程文件*.pjf 工程创建与配置自动生成,禁止用户修改链接脚本文件(*.ld)遵照脚本文件格式,用户复制示例或手工输入 编写根据用户软件设计和电路存储区安排函数库文件(*.lib、*.a)Embest IDE附带的标准嵌入式C函数库 用户自己编写的函数库第49页/共107页2023/3/24信息学院-通信教研室-油海东50链接脚本文件绝大部分嵌入式软件都涉及到链接定位脚本文件;链接定位脚本使得我们的目标代码组织更加灵活 链接定位过程一般由链接器根据链接定位脚本完成,比较简单的系统可以通过设置链接器开关选项取代链接定位脚本 第50
28、页/共107页2023/3/24信息学院-通信教研室-油海东51段的属性一个嵌入式开发源文件由很多段组成(代码段、数据段等)段的属性包括名称(Name)类型(Type)地址(Addr)偏移(Offs)大小(Size)固定单元大小(Es)标志(Flg)连接依赖(Lk)附加属性(Inf)字节对齐宽度(Al)地址地址(Addr):(Addr):描述了这一段在目标系统中的描述了这一段在目标系统中的地址地址 偏移偏移(Offs):(Offs):描述了该段在目标文件中的偏描述了该段在目标文件中的偏移移 大小大小(sizesize):):表示该段的实际长度表示该段的实际长度 假设:假设:.text.text
29、段的地址为段的地址为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/24信息学院-通信教研室-油海东52链接脚本示例SECTIONS.=0
30、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=.;.debug_info0:*(.debug_info).debug_li
31、ne0:*(.debug_line).debug_abbrev0:*(.debug_abbrev).debug_frame0:*(.debug_frame)赋当前地址,可能为RAM或Flash的访问地址后面的代码将从该地址开始存放只读区域基地址,启动程序中使用的符号=.表示该符号的值等于当前地址代码段,在这里标识开始放置程序代码只读区域长度,启动程序中使用的符号读写区域基地址,启动程序中使用的符号数据段,程序中已初始化的全局变量放在该段只读数据段,程序中静态全局变量等固定值放在该段清零区域基地址,启动程序中使用的符号包含未初始化的全局可用数据,如未初始化全局变量清零区域长度,启动程序中使用的符
32、号读写区域基长度,启动程序中使用的符号调试信息gcc库专用实际上是在这里声明了一个全局实际上是在这里声明了一个全局符号,我们可以在程序中使用该符号,我们可以在程序中使用该符号,它等同于在代码中声明一符号,它等同于在代码中声明一个全局变量,但它的值由链接器个全局变量,但它的值由链接器指定指定 第52页/共107页2023/3/24信息学院-通信教研室-油海东53链接脚本与程序的对应intA1;intA2=5;constintA3=10;voidmain()intA4;registerintA5;A4=A3;.text:*(.text);代码段,在这里标识从0开始放置程序代码.rodata:*(.
33、rodata);只读数据段,程序中静态全局变量等固定值放在该段.data:*(.data);数据段,程序中已初始化的全局变量放在该段.bss:*(.bss);包含未初始化的全局可用数据,如未初始化全局变量变量A1作为未初始化的变量将保存在.bss段中变量A2作为已初始化的变量将保存在.data段中常量A3保存在只读数据断.rodata段中main函数对应的代码保存在.text段中寄存器变量A5直接保存在ARM的一个寄存器中局部变量A4当程序执行到main函数时存放在main函数对应的函数栈中第53页/共107页2023/3/24信息学院-通信教研室-油海东54链接标准函数库链接排列顺序为-lm
34、-lc-lgcc-lgEmbestIDE附带的GNU标准函数库标准C函数库 libc.a -lc标准数学函数库 libm.a-lm标准函数库的支持库libg.a-lgGCC的支持库libgcc.a-lgcc第54页/共107页2023/3/24信息学院-通信教研室-油海东55编译器配置包含文件目录编译目标文件输出目录编译器预定义设置使用ARM指令、THUMB指令或交互方式设置编译的字节顺序第55页/共107页2023/3/24信息学院-通信教研室-油海东56汇编器配置包含文件目录;汇编输出文件目录汇编预定义ARM/THUMB指令或交互工作方式编码字节顺序第56页/共107页2023/3/24信
35、息学院-通信教研室-油海东57链接器配置设置使用的链接脚本文件设置输出的调试信息文件设置入口文件设置链接的用户函数库或标准函数库第57页/共107页2023/3/24信息学院-通信教研室-油海东58ARM汇编语言集成开发环境开发环境开发流程工程的建立与配置编写软件源文件软件工程的编译链接软件调试可执行文件固化第58页/共107页2023/3/24信息学院-通信教研室-油海东59调试步骤调试准备存储区映像文件命令脚本文件调试配置连接和下载控制执行调试信息观察第59页/共107页2023/3/24信息学院-通信教研室-油海东60存储区映像文件(.map)格式防止调试时访问非法存储区产生的异常文件格
36、式第60页/共107页2023/3/24信息学院-通信教研室-油海东61存储区映像文件示例用户一般不用关注以下选项总线宽度、访问尺寸、读等待、写等待、高速访问等待名称起始地址长度属性第61页/共107页2023/3/24信息学院-通信教研室-油海东62控制台调试命令调试命令列表BKPTCLEAR清除断点BKPTDATA设置数据断点BKPTINST设置指令断点BKPTLIST断点列表DISASM反汇编DOWNLOAD文件下载GO执行程序HELP显示帮助信息MEMREAD存储区读MEMWRITE存储区写REFRESH刷新窗口REGLIST寄存器列表REGREAD寄存器读REGWRITE寄存器写RE
37、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/24信息学院-通信教研室-油海东63命令脚本.cs文件命令脚本文件是目标板连接以后程序下载之前
38、对目标板进行的一系列初始化动作的脚本文件,主要的目的就是在目标板连接以后初始化RAM区,以使程序能够成功下载到RAM中命令脚本执行方法:在工程设置对话框调试选项中在“连接后行为”中指定连接后执行命令脚本 在集成环境连接目标板后,在调试命令窗口里执行 Script 命令脚本文件名 第63页/共107页2023/3/24信息学院-通信教研室-油海东64命令脚本文件常用命令命令命令语法语法说明说明参数参数gogo从当前从当前PCPC执行执行目标程序目标程序无无memwritememwrite-e地址地址数值数值 向存储区指定向存储区指定地址写入数值地址写入数值 地址地址/数值数值 -e:-e:大端格
39、式大端格式refreshrefresh刷新所有窗口刷新所有窗口 无无regwriteregwrite寄存寄存器名器名寄存器值寄存器值写寄存器写寄存器 寄存器名寄存器名寄寄存器值存器值resetreset复位目标板复位目标板无无stopstop停止目标板运停止目标板运行行无无第64页/共107页2023/3/24信息学院-通信教研室-油海东65命令脚本文件示例第65页/共107页2023/3/24信息学院-通信教研室-油海东66调试配置设置连接后执行的命令脚本设置调试信息文件设置下载文件设置下载到RAM区地址第66页/共107页2023/3/24信息学院-通信教研室-油海东67控制程序执行复位运
40、行停止重新运行单步进入函数单步执行单步跳出函数执行到光标设置断点禁止断点第67页/共107页2023/3/24信息学院-通信教研室-油海东68观察调试信息存储区窗函数栈窗观察窗变量窗寄存器窗外围寄存器窗第68页/共107页2023/3/24信息学院-通信教研室-油海东69寄存器与外围寄存器窗口值已修改寄存器窗外围寄存器寄存器树值已修改值已修改寄存器名值已修改寄存器组第69页/共107页2023/3/24信息学院-通信教研室-油海东70ARM汇编语言集成开发环境开发环境开发流程工程的建立与配置编写软件源文件软件工程的编译链接软件调试可执行文件固化第70页/共107页2023/3/24信息学院-通
41、信教研室-油海东71生成可执行文件源文件*.Elf*.Bin(编译)(Elf to Bin)(Elf to Bin)第71页/共107页2023/3/24信息学院-通信教研室-油海东72程序固化命令中断和退出执 行 Flash操作命令时,本按钮提供中断命令功能,其他情况时为关闭应用程序数据上载读 取 整 个FLASH芯 片数据或芯片部分扇区数据,并保存为BIN格式文件,文件名由用户在编程子对话框中指定。芯片保护对整个FLASH芯 片或芯片部分扇区执行保护操作。效验和读 取 整 个FLASH芯 片数据或芯片部分扇区数据,计算并显示所有数据的效验和(字节和基于2的补码)。文件校验读 取 FLASH
42、芯片数据,与选择的编程数据文件进行比较,如果遇到不同的数据,软件停止校验操作,并显示不同单元的地址。编程对整个FLASH或 部分扇区进行编程,用户可以设置编程前自动擦除以及编程过程中自动校验。芯片擦除根据用户设置擦除整个FLASH芯 片数据或擦除芯片部分扇区数据。全空检查检 查 Flash是否处于空白状态,当遇到非空单元时,软件退出检查,并显示非空单元的地址和数据。选择要编程的Bin文件选择上载的Bin文件保存路径和名称第72页/共107页2023/3/24信息学院-通信教研室-油海东73程序固化-CPU设置CPU编码方式设置读取目标板上所有写入寄存器列表中的寄存器数据,并显示在数值(Valu
43、e)栏显示当前选择处理器的内部功能寄存器名称、初始缺省值,写入数值,并可以修改。设置需要写入的存储区地址、数据以及宽度。选择CPU的型号复位电路;测试寄存器;测试存储区;测试RAM;读取FLASH标识第73页/共107页2023/3/24信息学院-通信教研室-油海东74程序固化-FLASH设置选择FLASH的型号选择使用的FLASH芯片数目:1、2或4片。选择数据访问宽度:8、16或32位。设置FLASH烧写地址按顺序显示该芯片包含的扇区编号、大小以及每个扇区的起始地址。选择FLASH要编程的扇区范围第74页/共107页2023/3/24信息学院-通信教研室-油海东75常用的文件扩展名-1扩展
44、名扩展名说明说明*.ews工作区文件,一个工作区可以有多个工程文工作区文件,一个工作区可以有多个工程文件件*.prg工程文件工程文件*.opt工作区状态文件工作区状态文件*.c/*.cppC源文件或源文件或C+源文件源文件*.s/*.asm汇编源文件汇编源文件*.hC/C+头文件头文件第75页/共107页2023/3/24信息学院-通信教研室-油海东76常用的文件扩展名-2扩展名扩展名说明说明*.inc汇编头文件汇编头文件*.mac汇编宏定义文件汇编宏定义文件*.map存储区映像文件存储区映像文件*.cs命令脚本文件命令脚本文件*.ld链接脚本文件链接脚本文件*.o编译后的目标模块编译后的目标
45、模块第76页/共107页2023/3/24信息学院-通信教研室-油海东77常用的文件扩展名-3扩展名扩展名说明说明*.a目标模块库目标模块库*.lib系统编译生成的或可调用的库系统编译生成的或可调用的库*.elf待调试的符号文件待调试的符号文件/可执行文件可执行文件/输出文件输出文件*.bin2进制可执行文件进制可执行文件第77页/共107页2023/3/24信息学院-通信教研室-油海东78示例下面以一个简单的嵌入式开发示例,来学习以下使用Embest IDE的使用方法。第78页/共107页2023/3/24信息学院-通信教研室-油海东79第4章 ARM汇编语言程序设计1.ARM汇编语言伪指令
46、3.ARM汇编语言程序结构2.ARM汇编语言语句格式4.简单的ARM程序设计6.ARM汇编语言与C混合编程5.ARM汇编语言集成开发环境第79页/共107页2023/3/24信息学院-通信教研室-油海东80ARM汇编与C混合编程ATPCS介绍ATPCS=ARM-THUMB PROCESS CALL STANDARD内嵌汇编C和ARM汇编程序间相互调用第80页/共107页2023/3/24信息学院-通信教研室-油海东81汇编与C/C+的混合编程汇编语言与C/C+之间的混合编程,有如下几种情况在C/C+代码中嵌入汇编指令在汇编程序和C/C+程序之间实现变量的互访汇编程序、C/C+程序之间的相互调用
47、混合编程中,要遵循一定的调用规则,即ATPCS规则。使用Embest IDE集成的GCC的C编译器的”-apcs-interwork”编译选项,可以使编译的C语言程序满足ATPCS规则。第81页/共107页2023/3/24信息学院-通信教研室-油海东82ATPCS规则ATPCS(ARM-Thumb Produce Call Standard)是ARM程序和Thumb程序中子程序调用的基本规则目的是为了使单独编译的C语言程序和汇编程序之间能够相互调用这些基本规则包括子程序调用过程中寄存器的使用规则数据栈的使用规则参数的传递规则。第82页/共107页2023/3/24信息学院-通信教研室-油海东
48、83ARM寄存器的ATPCS别名-1ARM寄存器寄存器 ATPCS别名别名说明说明R0-R3a1-a4参数参数/结果结果R4-R6v1-v3局部变量寄存器局部变量寄存器1-3R7v4/wr局部变量寄存器局部变量寄存器4/Thumb状状态工作寄存器态工作寄存器R8v5ARM状态局部变量寄存器状态局部变量寄存器5R9v6/sbARM状态局部变量寄存器状态局部变量寄存器6/RWPI的静态基址寄存器的静态基址寄存器R10v7/slARM状态局部变量寄存器状态局部变量寄存器7/数据栈限制指针寄存器数据栈限制指针寄存器第83页/共107页2023/3/24信息学院-通信教研室-油海东84ARM寄存器的AT
49、PCS别名-2ARM寄存器寄存器 ATPCS别名别名说明说明R11v8ARM状态局部变量寄存器状态局部变量寄存器8R12ip子程序内部调用的临时寄存子程序内部调用的临时寄存器器R13sp数据栈指针寄存器数据栈指针寄存器R14lr链接寄存器链接寄存器R15pC程序计数器程序计数器第84页/共107页2023/3/24信息学院-通信教研室-油海东85寄存器使用规则-2子程序间通过寄存器R0R3来传递参数,这时,寄存器R0R3可以记作a1a4。在子程序中,使用寄存器R4R11来保存局部变量。这时,寄存器 R4R11可以记作v1v8。在Thumb程序中,通常只能使用寄存器R4R7来保存局部变量 寄存器
50、R12用作子程序间的scratch寄存器(用于保存sp,在函数返回时使用该寄存器出栈),记作ip。寄存器R13用作数据栈指针,记作sp。寄存器R14称为链接寄存器,记作lr。寄存器R15是程序计数器,记作pc。第85页/共107页2023/3/24信息学院-通信教研室-油海东86寄存器使用规则寄存器别名特殊名使用规则R0a1参数/结果scratch寄存器1R1a2参数/结果scratch寄存器2R2a3参数/结果scratch寄存器3R3a4参数/结果scratch寄存器4R4v1ARM状态局部变量寄存器1R5v2ARM状态局部变量寄存器2R6v3ARM状态局部变量寄存器3R7v4wrARM状