【教学课件】第五章基于ARM的嵌入式程序设计.ppt
《【教学课件】第五章基于ARM的嵌入式程序设计.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第五章基于ARM的嵌入式程序设计.ppt(71页珍藏版)》请在三一办公上搜索。
1、第五章基于ARM的嵌入式程序设计,5.1 ARM汇编语言的伪操作、宏指令与伪指令5.2 ARM汇编语言程序设计5.3 嵌入式C语言程序设计基础5.4 嵌入式C语言程序设计实例5.5 嵌入式C语言程序设计技巧5.6 C与汇编语言混合编程5.7 基于Embest IDE for ARM 环境的软件开发实例,5.1 ARM汇编语言的伪操作、宏指令与伪指令,5.1.1 两种常见的ARM编译开发环境5.1.2 ADS编译环境下的伪操作和宏指令5.1.3 GNU编译环境下的伪操作和宏指令5.1.4 ARM汇编语言的伪指令,两种常见的ARM编译开发环境,ADS/SDT IDE开发环境:它由ARM公司开发,使
2、用了CodeWarrior公司的编译器;集成了GNU开发工具的IDE开发环境:它由GNU的汇编器as、交叉编译器gcc、和链接器ld等组成。,编译环境下的伪操作和宏指令,ADS编译环境下的伪操作可分为以下几类:符号定义(Symbol Definition)伪操作 数据定义(Data Definition)伪操作 汇编控制(Assembly Control)伪操作 信息报告(Reporting)伪操作 其他(Miscellaneous)伪操作,符号定义伪操作,数据定义伪操作,汇编控制伪操作,信息报告伪操作,其他伪操作,5.1.3 GNU编译环境下的伪操作和宏指令,GNU编译环境下的伪操作可分为以
3、下几类:常量编译控制伪操作汇编程序代码控制伪操作宏及条件编译控制伪操作其他伪操作,常量编译控制伪操作,汇编程序代码控制伪操作,宏及条件编译控制伪操作,其他伪操作,汇编语言的伪指令,5.2 ARM汇编语言程序设计,5.2.1 ARM汇编中的文件格式5.2.2 ARM汇编语言语句格式5.2.3 ARM汇编语言编程的重点5.2.4 ARM汇编程序实例,汇编中的文件格式,ARM源程序文件(可简称为源文件)可以由任意一种文本编辑器来编写程序代码,它一般为文本格式。在ARM程序设计中,常用的源文件可简单分为以下几种:,汇编语言语句格式,ARM汇编语言语句格式如下所示:symbol instruction|
4、directive|pseudo-instruction;comment 其中:instruction为指令。directive为伪操作。pseudo-instruction为伪指令。symbol为符号。comment为语句的注释。,ARM汇编语言程序格式,ARM汇编语言是以段(section)为单位来组织源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到的数据。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。,举例说明ARM汇编语言源程序的基本结构,AREA EXAMPLE
5、,CODE,READONLYENTRYstartMOV r0,#10MOV r1,#3ADD r0,r0,r1END本程序的程序体部分实现了一个简单的加法运算。,ARM汇编语言编程的重点,ARM数据处理操作设置条件码汇编语言子程序调用及返回 跳转表思想ARM与Thumb之间的状态转换及函数的相调用,ARM数据处理操作,ARM中数据的处理有以下三种形式:简单的寄存器操作 立即数操作寄存器移位操作,其中32位立即数在32位指令中的编码以及ARM特有的寄存器移位操作是数据处理方面的难点。,设置条件码,ARM的任何数据处理指令都能通过增加“S”操作码来设置条件码(N,Z,C和V)。,条件执行 ARM指
6、令集不同寻常的特征是每条指令(除了某些v5T指令)都可以是条件执行的。条件转移 在程序中可以通过条件码的使用让微处理器决定是否进行转移,还可用来控制循环的退出。,汇编语言子程序调用及返回,子程序的调用在ARM汇编语言中,子程序调用是通过BL指令来完成的。BL指令的语法格式如下:BL subname其中,subname是被调用的子程序的名称。子程序的返回在返回调用子程序时,转移链接指令保存到LR寄存器(r14)中的值需要拷贝回程序寄存器PC(r15)。,跳转表思想,在程序设计中,有时为使程序完成一定的功能,需要调用一系列子程序中的一个,而决定究竟调用哪一个由程序的计算值确定。跳转表是解决该问题的
7、有效方案。跳转表是利用程序计数器PC在通用寄存器文件中的可见性来实现的,如下例所示:,ARM与Thumb间的状态转换及函数的相调用,状态切换的实现 ARM/Thumb之间的状态切换是通过一条专用的转移交换指令BX来实现的。BX利用Rn寄存器中目的地址值的最后一位来判断跳转后的状态。当最后一位为0时,表示转移到ARM状态;当最后一位为1时,表示转移到Thumb状态,如下图所示。,ARM与Thumb间的状态转换及函数的相调用,ARM/Thumb之间的函数调用 在同一状态下的子程序调用,通常只需要一条指令实现调用:BL function 实现返回也只需要从LR恢复PC即可:MOV PC,LR 在不同
8、状态下的子程序调用中,就需要进行状态之间的切换,需要考虑到以下几点:,需要由BX来切换状态,因为BL不能完成状态切换。需要在BX之前先保存好LR,BX不能自动保存返回地址到LR。需要 用“BX LR”来返回,不能使用“MOV PC,LR”,返回时要仔细考虑保存在LR中最低位的内容是否正确。,汇编程序实例,简单的ARM指令程序数据块复制 利用跳转表实现程序跳转 ADS编译环境下的汇编代码与GNU编译环境下有较多不同点,主要是符号及伪操作的不同。,5.3 嵌入式C语言程序设计基础,5.3.1 C语言“预处理伪指令”在嵌入式程序 设计中的应用5.3.2 嵌入式程序设计中的函数及函数库5.3.3 嵌入
9、式程序设计中常用的C语言语句5.3.4 嵌入式程序设计中C语言的变量、数 组、结构、联合,语言“预处理伪指令”在嵌入式程序设计中的应用,“预处理命令”可以改进程序设计的环境,提高编程效率,一般以#号打头,可分为以下三种:,文件包含 宏定义条件编译,文件包含,文件包含伪指令可将头文件包含到程序中,头文件中定义的内容包括符号常量、复合变量原型、用户定义的变量类型原型和函数的原型说明等。编译器编译预处理时用文件包含的正文内容替换到实际程序中。文件包含伪指令的格式#include;标准头文件#include“头文件名.h”;自定义头文件#include 宏标识符,宏定义,宏定义伪指令分为:简单宏、参数
10、宏、条件宏、预定义宏及宏释放。,简单宏:#define宏标识符 宏体 参数宏:#define宏标识符(形式参数表)宏体条件宏定义:#ifdef宏标识符#ifndef 宏标识符#undef宏标识符#define宏标识符 宏体#define宏标识符 宏体#else#else#undef宏标识符#define宏标识符 宏体#define宏标识符 宏体#endif#endif,条件编译,条件编译伪指令是写给编译器的,指示编译器在满足某一条件时仅编译源文件中与之相应的部分。其格式如右框中所示:,#if(条件表达式1)#elif(条件表达式2)#elif(条件表达式n)#else#endif,嵌入式程序设
11、计中的函数及函数库,函数是C语言程序设计的核心。一个较大的C语言程序一般是由一个主函数和若干个子函数组成,每个函数完成一个特定的功能。函数之间也可以相互调用。函数的格式:,定义性说明格式:存储类说明符 类型说明符 修饰符 标识符(参数表)函数体 原型说明格式:extern 类型说明符修饰符 标识符(参数表)函数体,嵌入式程序设计中的函数及函数库,函数库是为了减少编程工作量,将一些常用的功能的函数放在函数库中供公共使用.它包括C的标准库函数,也包括一些用户自己编写非标准库。例如,44blib.h 是根据基于S3C44B0X处理器的开发板及其功能模块编写的一个C语言函数库。它不属于C语言的标准库。
12、,嵌入式程序设计中常用的C语言语句,C语言语句格式为:标号:语句;C语言语句很多,常用到的有以下几种:条件语句 swith语句循环语句,嵌入式程序设计中C语言的变量、数组、结构、联合,变量 存储类型 类型说明符 修饰符 标识符 初值,标识符初值;数组 一维数组:类型说明符 标识符 常量表达式初值,初值,;char 标识符=“字符串”;二维数组:类型说明符 标识符mn 初值表,初值表;指针数组和数组指针类型说明符*标志符 常量表达式=地址,地址,;类型说明符(*标志符)=数组标识符;,嵌入式程序设计中C语言的变量、数组、结构、联合,结构说明 存储类说明符 struct 结构原型名 类型说明标识符
13、,标识符;类型说明标识符,标识符;标识符=初值表,标识符=初值表;,嵌入式程序设计中C语言的变量、数组、结构、联合,联合说明 存储类说明符 union联合原型名类型说明符 标识符,标识符;类型说明符 标识符,标识符;标识符=初值表,标识符初值表;,5.4 嵌入式C语言程序设计实例,5.4.1 S3VCE40开发板测试程序实例5.4.2 嵌入式C语言程序编写的简单构架5.4.3 Flash测试代码介绍,S3VCE40开发板的测试程序实例,我们以S3VCE40开发板上的各个功能模块的整个测试程序为例,介绍如何运用C语言进行基于ARM的嵌入式程序设计。该程序完成的功能如下所示:实验板加电时数码管八段
14、全亮;LED1、LED2轮流闪烁(频率近1Hz);使用PC键盘操作;串口终端输出信息如图:然后使用开发板上的PC键盘选择各部分功能测试操作,如下图:,程序源代码介绍,整个测试程序主文件main.c的代码构成图如下图所示,由BootLoader启动程序进入C语言主函数main()入口。,嵌入式C语言程序编写的简单构架,#include预编译指令 个C语言代码,一般要用#include编译指令将所需要的头文件加到该程序中,这是很有必要的,尤其是对编写较大的程序代码时。随后是定义一些外部变量,并对程序中的函数进行声明。主函数main()的编写;在每一个C语言代码中,一定要有一个main()函数,在该
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第五 基于 ARM 嵌入式 程序设计
链接地址:https://www.31ppt.com/p-5662656.html