第五章基于ARM的嵌入式程序设计课件

上传人:我*** 文档编号:144716217 上传时间:2020-09-13 格式:PPT 页数:68 大小:11.71MB
返回 下载 相关 举报
第五章基于ARM的嵌入式程序设计课件_第1页
第1页 / 共68页
第五章基于ARM的嵌入式程序设计课件_第2页
第2页 / 共68页
第五章基于ARM的嵌入式程序设计课件_第3页
第3页 / 共68页
第五章基于ARM的嵌入式程序设计课件_第4页
第4页 / 共68页
第五章基于ARM的嵌入式程序设计课件_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《第五章基于ARM的嵌入式程序设计课件》由会员分享,可在线阅读,更多相关《第五章基于ARM的嵌入式程序设计课件(68页珍藏版)》请在金锄头文库上搜索。

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.1两种常见的ARM编译开发环境,ADS/SDT IDE开发环境:它由ARM公司开发,使用了CodeWarrior公司的编译器; 集成了GNU开发工具的IDE开发环境:它由GNU的汇编器as、交叉编译器gcc、和链接器ld等组成。,5.1.3 GNU编译环境下的伪操作和宏指令,

2、GNU编译环境下的伪操作可分为以下几类: 常量编译控制伪操作 汇编程序代码控制伪操作 宏及条件编译控制伪操作 其他伪操作,常量编译控制伪操作,.equ/.set: 给常量、标号等定义字符名称,并赋值 .global/.globl:声明全局变量 .extern: 声明全局变量,字符编译控制伪操作,汇编程序代码控制伪操作,宏及条件编译控制伪操作,其他伪操作,5.1.4ARM汇编语言的伪指令,5.2 ARM汇编语言程序设计,5.2.1 ARM汇编中的文件格式 5.2.2 ARM汇编语言语句格式 5.2.3 ARM汇编语言编程的重点 5.2.4 ARM汇编程序实例,5.2.1ARM汇编中的文件格式,A

3、RM源程序文件(可简称为源文件)可以由任意一种文本编辑器来编写程序代码,它一般为文本格式。 在ARM程序设计中,常用的源文件可简单分为以下几种:,ARM汇编语言程序格式,ARM汇编语言是以段(section)为单位来组成源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。 段分为代码段 (用.text标志,存放执行代码)和数据段(用.data标志,存放代码运行时需要用到的数据)变量段(用.bss标志,存放运行时需要用到的变量)等。 一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段、变量段。,举例说明ARM汇编语言源程序的基本结构,.global _sta

4、rtSWI_Handler: .text ldr lr, =Reset_Handler ldr lr, =Reset_Handler _start:mov pc, lr b Reset_Handler Reset_Handler: Undefined_Handler: ldr r1,=0 xf0000000 b Undefined_Handler ldr r2,r1b SWI_Handler /* - Prefetch_Handler: - /* b Prefetch_Handler mov r13, #1 Abort_Handler: mov r14, #2 b Abort_Handler

5、mrs r0,cpsr nop bic r0,r0,#0 x1f IRQ_Handler: orr r0,r0,#0 x10 b IRQ_Handler msr cpsr,r0 FIQ_Handler: mov r13, #3 b FIQ_Handler mov r14, #4 stop: b stop .end,5.2.4ARM汇编程序实例,简单的ARM指令程序 数据块复制 利用跳转表实现程序跳转 ADS编译环境下的汇编代码与GNU编译环境下有较多不同点,主要是符号及伪操作的不同。,Delay: NOP;空操作 NOP NOP SUBS R1,R1,#1;循环次数减一 BNE Delay ;

6、 计数未到0,跳转Delay继续 MOV PC,LR ;子程序返回,应用示例(延时子程序):,调用延时子程序 MOV R1,#1000 BL Delay ,子程序的嵌套调用及返回,.global start .extern sub2 .text .equ stack_top,0 x1000 ;定义堆栈指针地址_ start: MOV R13,#stack_top ;设置堆栈指针 BL sub1; 调用子程序sub1(第一层调用),下一指令地址存到R14 black1: ADD R0,R1,R2 stop: B stop ; 死循环,停止 sub1: STMFD R13!,R0-R7,R14;调

7、用第二层子程序前保护各寄存器的 BL sub2 ;调用子程序sub2(第二层调用), LDMFD R13!,R0-R7,PC;恢复,并返回到black1: sub2: MOV PC,LR; R14 .end,.global _start .text .equ NUM,20 _start:LDR R0,=srcSUBS R2,R2,#1 LDR R1,=dstBNE wcopy MOV R2,#NUM stop: B stop MOV SP,#0 x400 bcopy:MOVS R3,R2,LSR #3 BEQ cword .ltorg STMED SP!,R4-R11 src: ocopy:L

8、DMIA R0!,R4-R11 .long 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8 STMIA R1!,R4-R11 .long 1,2,3,4 SUBS R3,R3,#1 dst: BNE ocopy .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 LTMFD SP !,R4-R11 .long 0,0,0,0 cword:ANDS R2,R2,#7 .end BEQ stop wcopy:LDR R3,R0,#4 STR R3, R1,#4,B stop,.fill 20,4,0,实验一:3.2,.global _start .text

9、.equ num,2 _start:mov r0,#0 ;doadd: add r0,r1,r2 mov r1,#3mov pc,lr ;子程序返回 mov r2,#2dosub:sub r0,r1,r2 bl arithfunc;调用子程序mov pc,lr ;子程序返回 stop: b stop.end arithfunc: ;子程序开始 cmp r0,#num bhs doadd adr r3,jumptable ldr pc,r3,r0,lsl #2 jumptable: .long doadd .long dosub,2,#1,.global _startSWI_Handler: .

10、text ldr lr, =Reset_Handler ldr lr, =Reset_Handler _start:mov pc, lr b Reset_Handler Reset_Handler: Undefined_Handler: ldr r1,=0 xf0000000 b Undefined_Handler ldr r2,r1b SWI_Handler /* - Prefetch_Handler: - /* b Prefetch_Handler mov r13, #1 Abort_Handler: mov r14, #2 b Abort_Handler mrs r0,cpsr nop

11、bic r0,r0,#0 x1f IRQ_Handler: orr r0,r0,#0 x10 b IRQ_Handler msr cpsr,r0 FIQ_Handler: mov r13, #3 b FIQ_Handler mov r14, #4 stop: b stop .end,实验二:3.4,5.3 嵌入式C语言程序设计基础,5.3.1 C语言“预处理伪指令”在嵌入式程序设计中的应用 5.3.2 嵌入式程序设计中的函数及函数库 5.3.3 嵌入式程序设计中常用的C语言语句 5.3.4 嵌入式程序设计中C语言的变量、数组、结构、联合,5.3.1 C语言“预处理伪指令”在嵌入式程序设计中的应

12、用,“预处理命令”可以改进程序设计的环境,提高编程效率,一般以#号打头 ,可分为以下三种 :,文件包含:#include ;标准头文件 #include“头文件名.h” ;自定义头文件 #include 宏标识符 宏定义: 简单宏: # define 宏标识符 宏体 参数宏:# define宏标识符(形式参数表) 宏体 条件宏定义:预定义宏及宏释放。 条件编译:,#if(条件表达式1) #elif(条件表达式2) #elif(条件表达式n) #else #endif,条件宏定义: #ifdef宏标识符#ifndef 宏标识符 #undef 宏标识符#define 宏标识符 宏体 #define

13、 宏标识符 宏体#else #else#undef 宏标识符 #define 宏标识符 宏体#define 宏标识符 宏体 #endif#endif,5.3.2嵌入式程序设计中的函数及函数库,函数定义性说明格式 : 存储类说明符 类型说明符 修饰符 标识符 (参数表) 函数体 例: void main(void) extern void strcopy(char *d ),static: 局部函数 extern:全局函数 无:全局函数,(interrupt),函数名 *函数名 (*函数名) *(*函数名),函数库,44blib.h 44b.h是根据基于S3C44B0X处理器的开发板及其功能模块

14、编写的一个C语言函数库。定义了44B0X芯片及外围接口的硬件资源,它不属于C语言的标准库。 自定义C语言函数库: #include “44blib.h” #include “44b.h” #include “def.h” #include“option.h”,5.3.3嵌入式程序设计中常用的C语言语句,C语言语句格式为: 标号: 语句; C语言语句很多,常用到的有以下几种: 条件语句 swith语句 循环语句,5.3.4嵌入式程序设计中C语言的变量、数组、结构、联合,变量 存储类型 类型说明符 修饰符 标识符 初值 ,标识符初值; 数组 一维数组: 类型说明符 标识符 常量表达式初值,初值,;

15、 char 标识符 =“字符串”; 二维数组: 类型说明符 标识符mn 初值表,初值表; 指针数组和数组指针 类型说明符 *标志符 常量表达式 =地址,地址,; 类型说明符 (*标志符) =数组标识符;,结构说明 存储类说明符 struct 结构原型名 类型说明标识符,标识符; 类型说明标识符,标识符; 标识符=初值表 ,标识符=初值表; 联合说明 存储类说明符 union联合原型名 类型说明符 标识符,标识符; 类型说明符 标识符,标识符; 标识符 =初值表,标识符初值表;,5.4 嵌入式C语言程序设计实例,5.4.1 S3VCE40开发板测试程序实例 5.4.2 嵌入式C语言程序编写的简单构架 5.4.3 Flash测试代码介绍,5.4.1 S3VCE40开发板的测试程序实例,我们以S3VCE40开发板上的各个功能模块的整个测试程序为例,介绍如何运用C语言进行基于ARM的嵌入式程序设计。该程序完成的功能如下所示: 实验板加电时数码管八段全亮;LED1、LED2轮流闪烁(频率近1Hz);使用PC键盘操作;串口终端输出信息如图: 然后使用开发板上的PC键盘选择各部分功能测试操作,如下图:,程序源代码介绍,整个测试程序主文件main.c的代码构成图如下图所示,由

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号