ARM嵌入式系统第9讲

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

void
;给变量a、b赋初值 ;调用MAX子函数,把最大值给c
《ARM嵌入式应用技术基础》第4章
9
更多资料下载
htt p://
4、子程序设计
o 调用程序与子程序之间传送的信息为参数时称为参数传送。 o 参数传送有两种方法: 当参数比较少时,可以通过寄存器传送参数; 当参数比较多时,可以通过内存块或堆栈传送参数。 o 子程序中采用的返回语句: MOV STMFD PC,LR SP!,{R0-R7,PC} ;恢复PC的值 ;将PC值从堆栈中返回
《ARM嵌入式应用技术基础》第4章
6
更多资料下载
htt p://
3、循环程序设计
例:计算1+2+3+...+100的结果
… MOV MOV CMP BHS ADD ADD B … R0,#0 R2,#1 R2,#100 FOR_E R0,R0,R2 R2,R2,#1 FOR ;初始化R0=0 ;设置R2=0;R2控制循环次数 ;判断R2<100? ;若条件失败,退出循环 ;循环体,R0=R0 + R2 ;R2=R2 + 1
《ARM嵌入式应用技术基础》第4章
13
更多资料下载
htt p://
2.统一合理的命名规则
② 避免命名冲突 o 常量全用大写的字母,用下划线分割单词; #define MAX_COUNT = 100; const int MAX_LENGTH = 100; o 局部变量和参数用小写字母开头的单词组合而成; BOOL flag; int drawMode; o 全局变量用大写字母开头的单词组合而成; BOOL Flag; int DrawMode; o 公有的函数接口定义在软件架构分析之后由分析师统一命名规则, 命名可根据函数所处的软件模块领域或文件名来添加相应的前缀。 Void guiReadPiont(……); //gui 图形
//禁止中断程序 //定义临时变量,后面使用 //内嵌汇编程序的关键词 tmp,CPSR tmp,tmp,#80 CPSR_c,tmp //把状态寄存器加载给tmp //将IRQ控制位置1 //加载程序状态寄存器
《ARM嵌入式应用技术基础》第4章
21
更多资料下载
htt p://
汇编语言与C的相互调用与访问
《ARM嵌入式应用技术基础》第4章
19
更多资料下载
htt p://
1、内嵌汇编指令的语法格式
在ARM的C语言程序中我们可以使用关键字__asm来加入一段汇编语 言的程序,格式如下: __asm { 指令[;指令] … [指令] } /*注释*/
《ARM嵌入式应用技术基础》第4章
20
Array
AREA
;取得数组Array首地址 ;装载数组第1项字数据给R2 ;装载数组第5项字数据给R3 ;R2 + R3→R2 ;R1=8 ;保存结果到数组第9项
《ARM嵌入式应用技术基础》第4章
3
更多资料下载
htt p://
2、分支程序设计
例.判读X、Y两个变量的大小,从而给变量Z赋予不同的值
《ARM嵌入式应用技术基础》第4章
18
更多资料下载
htt p://
汇编语言与C/C++语言的混合编程
C/C+ +与汇编混合编程处理策略: 若汇编代码较短,则可在C/C++源文件中直接内嵌汇编语言实 现混合编程;
n
n
若汇编代码较长,可以单独写成汇编文件,最后以汇编文件的 形式加入项目中,通过ATPCS规定与C程序相互调用及访问。
AREA Buf,DATA,READWRITE DCD 0x11,0x22,0x33,0x44 DCD 0x55,0x66,0x77,0x88 DCD 0x00,0x00,0x00,0x00 Example,CODE,READONLY ENTRY CODE32 LDR R0,=Array LDR R2,[R0] MOV R1,#4 LDR R3,[R0,R1,LSL #2] ADD R2,R2,R3 MOV R1,#8 STR R2,[R0,R1,LSL #2] END ;定义数据段Buf ;定义12个字的数组Array
1、汇编程序访问C/C++ 程序变量
o o o o 在C/C++ 程序中声明全局变量; 在汇编程序使用IMPORT/EXTERN伪指令声明引用该全局变量; 使用LDR伪指令读取该全局变量的内存地址; 根据该数据的类型,使用相应的LDR指令读取该全局变量;使用 相应的STR指令存储该全局变量的值。
C/C++ 语言中的变量类型 unsigned char unsigned short unsigned int C/C++ 语言中的变量类型 Char Short 带后缀的LDR和STR指令 LDRB/STRB LDRH/STRH LDR/STR 带后缀的LDR和STR指令 LDRSB/STRSB LDRSH/STRSH 描述 无符号字符型 无符号短整型 无符号整型 描述 字符型(8位) 短整型(16位)
《ARM嵌入式应用技术基础》第4章
4
更多资料下载
htt p://
2、分支程序设计
… MOVI MOV B Next1 MOV Next2 …
R0 , #76 R1 , #88 R0 , R1 R2 , #100 R2 , #50
更多资料下载
htt p://
2、内嵌汇编指令的应用举例
void enable_IRQ(void) { int tmp; __asm { MRS BIC MSR } } void dianable_IRQ(void) { int tmp; __asm { MRS ORR MSR } } //使能中断程序 //定义临时变量,后面使用 //内嵌汇编程序的关键词 tmp,CPSR tmp,tmp,#80 CPSR_c,tmp //把状态寄存器加载给tmp //将IRQ控制位清0 //加载程序状态寄存器
《ARM嵌入式应用技术基础》第4章
12
更多资料下载
htt p://
2.统一合理的命名规则
① 命名直观明了
n
标识符应当直观且可以拼读,可望文知意。 n 标识符最好采用英文单词或其组合,便于记忆和阅读。 n 标识符通常采用“大小写”混排的方式,如AddView。 n 标识符的长度应当符合“最小长度 && 最大信息”原则。变量的名字应 当使用“名词”或者“形容词 + 名词”。 float count; float oldCount; float newCount; n 全局函数的名字应当使用“动词”或者“动词 + 名词”(动宾词组)。类 的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。 DrawBox(); // 全局函数 Box->Draw(); // 类的成员函数
在程序中,往往要求某一段程序重复执行多次,这时候就可以利用 循环程序结构。 循环结构由以下两部分组成: 1、循环体:要求重复执行的程序段部分; 2、循环结束条件:在循环程序中必须给出循环结束条件,否则程 序就会进入死循环。 在C语言中,有for和while语句实现这两种循环。 在汇编语言中,用跳转指令实现这两种循环。
《ARM嵌入式应用技术基础》第4章
14
更多资料下载
htt p://
2.统一合理的命名规则
③ 命名风格一致 一旦确定了命名规则,整个软件开发的过程都应该遵循该规则, 确保命名风格一致。在确定命名规则之前,尽量参考所采用的操作系统 或开发工具的命名风格。 为了防止某一软件库中的一些标识符和其它软件库中的冲突,可 以为各种标识符加上能反映软件性质的前缀。例如三维图形标准 OpenGL 的所有库函数均以gl 开头,所有常量(或宏定义)均以GL 开 头。

使用堆栈来恢复处理器的状态时,注意STMFD与LDMFD要配合使用。
《ARM嵌入式应用技术基础》第4章
10
更多资料下载
htt p://
编程规范
n
良好的书写风格具有的效果: 1、容易看懂,干净整齐,可理解性好,可维护性好; 2、具备良好的兼容性,可移植性好。(uC/OS-II)
n
《ARM嵌入式应用技术基础》第4章
17
更多资料下载
htt p://
4.组织有序的文件结构
文件类型 汇编引入文件 汇编源文件 C或C++头文件 C语言源文件 C++源文件 扩展名 .INC .S .H .C .CPP
头文件在我们组织软件结构时相当有用。公共的数据结构定义和函数 声明都可以放入头文件(*.h)中,然后用一个定义文件(*.c/*.cpp)实 现该头文件声明的函数,其他文件如果想使用头文件中声明的函数,只 要include该头文件即可使用。
短整型1drshstrshshdrsbstrsbch描述带后缀的ldr和str指令语言中的变量类型无符号整型drstdrhstrhdrbstrb描述带后缀的ldr和str指令语言中的变量类型汇编语言与c的相互调用与访问更多资料下载httyxarmnet23arm嵌入式应用技术基础第4在汇编程序中用exportglobal伪指令声明该符号为全局标号可以被其他文件应用
《ARM嵌入式应用技术基础》第4章
15
更多资料下载
htt p://
3.美观良好的编辑风格
① 程序段落风格 空行起着分隔程序段落的作用。空行得体将使程序的布局更加清晰。 例:函数之间的空行
void Function1(…) { …… } // 空行,分隔两个函数 void Function2(…) { …… }
例:函数体内的空行
while (condition) { …… if (条件为真) { …… } else { …… } }
16
《ARM嵌入式应用技术基础》第4章
更多资料下载
htt p://
3.美观良好的编辑风格
② 代码行风格
void Function(int x) { …… if (condition1) { …… if(condition2) { …… } } else { …… } }
R0 , #76 R1 , #88 R0 , R1 Next R2 , #50 Next2 R2 , #100
//if-else结构 int x=76,y=88; if(x>y) z=100; else z=50;
《ARM嵌入式应用技术基础》第4章
5
更多资料下载
htt p://
3、循环程序设计
FOR
FOR_E
sum=0; for(i=0; i<100; i++ ) sum=sum+i;
《ARM嵌入式应用技术基础》第4章
7
更多资料下载
htt p://
3、循环程序设计
例:编写循环语句实现数据块复制。
LDR R0, LDR MOV LDMIA STMIA SUBS BNE =DATA_DST R1,=DATA_SRC R10,#20 R1!,{R2-R9} R0!,{R2-R9} R10,R10,#1 LOOP ;指向数据目标地址 ;指向数据源地址 ;复制数据个数20×N个字 ;N为LDM指令操作数据个数 ;从数据源读取8个字到R2~R9 ;将R2~R9的数据保存到目标地址 ;R10-1
LOOP
《ARM嵌入式应用技术基础》第4章
8
更多资料下载
htt p://
4、子程序设计
例子 程序实现比较两个数,取出其最大值 。
int MAX( int i,int j) ;声明子函数MAX { if(i>j) return(i); else return(j); } main(void) { int a,b,c; a=19;b=20; c=MAX(a,b); } ;主函数
第9讲 汇编程序设计
主讲人 刘凯
源享嵌入式教学论坛 出品
1
更多资料下载
htt p://
程序结构
1、顺序程序设计
例:通过查表操作实现数组中的第1项数据和第5项数据相加,结果保 存到数组中 。
《ARM嵌入式应用技术基础》第4章
2
更多资料下载
htt p://
程序清单4.1
增强程序的可理解性、可维护性的方法: 1、恰当完备的注释、 2、统一合理的命名规则、 3、美观良好的编辑风格、 4、组织有序的文件结构。
《ARM嵌入式应用技术基础》第4章
11
更多资料下载
htt p://
1.恰当完备的注释
注释的遵循规则: 1、注释应当准确。 注释的位置应与被描述的代码相邻,并尽量避免在注释中使用缩 写,不要让人对代码产生误解。 2、注释应当简明扼要。 重要复杂的代码段或代码行一定要有简明扼要的注释。 3、注释不可喧宾夺主。 注释是对代码的“提示”,但是过多的、花哨的注释会让人眼花缭 乱,反而妨碍了理解。
相关文档
最新文档