微机原理与接口技术 基于嵌入式芯片 教学课件 ppt 作者 徐惠民 chap5

上传人:E**** 文档编号:89496377 上传时间:2019-05-25 格式:PPT 页数:17 大小:225.50KB
返回 下载 相关 举报
微机原理与接口技术  基于嵌入式芯片  教学课件 ppt 作者 徐惠民 chap5_第1页
第1页 / 共17页
微机原理与接口技术  基于嵌入式芯片  教学课件 ppt 作者 徐惠民 chap5_第2页
第2页 / 共17页
微机原理与接口技术  基于嵌入式芯片  教学课件 ppt 作者 徐惠民 chap5_第3页
第3页 / 共17页
微机原理与接口技术  基于嵌入式芯片  教学课件 ppt 作者 徐惠民 chap5_第4页
第4页 / 共17页
微机原理与接口技术  基于嵌入式芯片  教学课件 ppt 作者 徐惠民 chap5_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《微机原理与接口技术 基于嵌入式芯片 教学课件 ppt 作者 徐惠民 chap5》由会员分享,可在线阅读,更多相关《微机原理与接口技术 基于嵌入式芯片 教学课件 ppt 作者 徐惠民 chap5(17页珍藏版)》请在金锄头文库上搜索。

1、微机原理与接口 -基于嵌入式芯片,第五章 ARM高级语言编程,第一节 ARM C/C+编译器,第二节 数据类型,基本数据类型 char 8bit short 16bit int 32bit long 32bit long long 64bit float 32bit double 64bit pointers 32bit bool 32bit,第二节 数据类型,浮点数 除法 运行时库的除法支持函数,第三节 汇编、C、C+程序相互调用,内联汇编 用法(P136) 注意事项: 无符号 不能直接向PC寄存器赋值 通常内联的汇编指令中不要指定物理寄存器, 只有指令B可以使用C程序中的标号 与armas

2、m汇编器的差异,第三节 汇编、C、C+程序相互调用,ATPCS规定: 函数的最前面4个整型参数通过ARM的寄存器r0-r3来传递,多于4个的参数用满递减堆栈来传递 不多于4个整型返回值可以用寄存器r0-r3来传递 双字类型的参数通过一对连续的寄存器传递 (请参考补充读物:ADS_DeveloperGuide),第三节 汇编、C、C+程序相互调用,C调用汇编 #include extern void strcopy(char *d, const char *s) int main(void) const char *srcstr=”First string-source”; char dstsr

3、t =”Second string-destination”; printf(“Before copying:n”); printf(“%sn %sn”,srcstr,dststr); strcopy(dststr,srcstr); printf(“after copying:n”); printf(“%sn %sn “,srcstr,dststr); return (0); ,第三节 汇编、C、C+程序相互调用,AREA SCopy, CODE, READONLY EXPORT strcopy strcopy ;寄存器R0存放第一个参数,即目标字符串的地址 ;寄存器R1存放第二个参数,即源字

4、符串的地址 LDRB R2,R1,#1 ;读取字节数据,源地址加1 STRB R2,R0,#1 ;保存读取的字节数据,目标地址加1 CMP R2,#0 ;判断字符串是否复制完毕 BNE strcopy ;没有复制完毕,继续循环 MOV PC,LR ;返回 END,第三节 汇编、C、C+程序相互调用,汇编调用C /*函数sum5()返回5个整数的和*/ int sum5(int a, int b, int c, int d, int e) return(a+b+c+d+e); /返回5个变量的和 5个参数,分别使用寄存器R0存储第1个参数,R1存储第2个数,R2存储第3个参数,R3存储第4个参数

5、,第5个参数利用堆栈传送。,第三节 汇编、C、C+程序相互调用,EXPORT example AREA example, CODE, READONLY IMPORT sum5 ;声明外部标号sum5,即C函数sum5() STR LR, SP, # -4! ADD R1, R0, R0 ADD R2, R1, R0 ADD R3, R1, R2 STR R3, SP,# -4! ADD R3, R1, R1 BL sum5 ADD SP, SP, #4 LDR PC, SP, #4 END,第三节 汇编、C、C+程序相互调用,汇编调用C+ struct S S(int s) : i(s) /本

6、结构没有基类和虚函数 int I; ; extern “C” void cppfunc(S *p) /被调用的C+程序使用关键词extern p-i+=5; /C+程序修改结构对象的数据成员值 ,第三节 汇编、C、C+程序相互调用,AREA example,CODE IMPORT cppfunc EXPORT f f STMFD SP!,LR MOV R0,#2 STR R0,SP,# -4! ;将实际参数存放在堆栈中 MOV R0,SP ;将实际参数在堆栈中地址放在R0寄存器里 BL cppfunc ;调用C+程序 LDR R0, SP,#4 ;从堆栈中将结构读取到寄存器R0中 ADD R0

7、,R0,R0,LSL #1 ;R0R0*3 LDMFD SP!,PC ;返回 END,第三节 汇编、C、C+程序相互调用,C+调用汇编 struct S / 本结构没有基类和虚函数 S(int s) : i(s) int i; ; extern “C“ void asmfunc(S *); / 声明汇编函数 int f() S s(2); / initialize s asmfunc( ,第三节 汇编、C、C+程序相互调用,AREA Asm, CODE EXPORT asmfunc asmfunc LDR R1, R0 ; ADD R1, R1, #5 STR R1, R0 MOV PC, L

8、R END,第四节 ARM中的C/C+库,ARM支持C/C+编译器,提供了C和C+的运行时库(runtime library),即C/C+编译器的函数库。 使用C/C+运行时库的方式: 在semihost环境下使用C/C+运行时库 在没有主机支持的环境下使用C/C+运行时库,如应用程序位于目标系统的ROM中 所谓semihost,是指可让ARM目标将输入/输出请求从应用程序代码传递到运行调试器的主机的一种机制。,第四节 ARM中的C/C+库,C/C+应用程序可以使用C/C+运行时库的函数: 1、建立C/C+应用程序环境,包括建立堆栈(stack);如果需要,建立堆(heap);初始化需要使用的

9、C/C+运行时库 2、运行main()程序 3、提供对ISO C标准规定的函数的支持 4、捕捉C/C+应用程序运行时产生的错误信息,并根据要求终结程序或退出运行。,第四节 ARM中的C/C+库,当应用程序中包含了函数main(),将会引起对C运行时库的初始化。如果应用程序中不包含函数main(),将不会引起对C运行时库的初始化。不使用C运行时库的C/C+程序称为裸机C程序。 如果应用程序不包含main()函数,而使用自己定义的启动代码,应用程序仍然可以使用很多C运行时库中的功能。 在ARM提供的C/C+运行时库中,以下划线或双下划线开头的函数都是可以被用户重新实现的函数。通过重新实现这些函数,可以对C/C+运行时库进行裁减。,

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

当前位置:首页 > 高等教育 > 大学课件

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