嵌入式系统原理及应用教程第4章.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式系统原理及应用教程第4章

下面通过一个例子来说明如何在汇编程序中访问C程序全局变量。 AREA asmfile,CODE,READONLY ;建立一个汇编程序段 EXPORT asmDouble ;声明可以被调用的汇编函数asmDouble IMPORT gVar_1 ;调用C语言中声明的全局变量 asmDouble ;汇编子函数入口 LDR R0,=gVar_1 ;将等于gVar_1地址的数据送入R0寄存器 LDR R1,[R0] ;将R0中的值为地址的数据送给R1。 MOV R2, #10 ;将立即数2送给R2 ADD R3, R1, R2 ;R3=R1+R2,实现了gVar_1= gVar_1+10 STR R3,[R0] ;将R3中的数据送给R0 MOV PC, LR ;子程序返回 END 3.C程序中调用汇编的函数   在C程序中调用汇编文件中的函数,主要工作有两个:一是在C中声明函数原型,并加extern关键字;二是在汇编中用EXPORT导出函数名,并用该函数名作为汇编代码段的标识,最后用MOV PC,LR返回。然后,就可以在C程序中使用该函数了。 下面是一个C程序调用汇编程序的例子,其中汇编程序strcpy实现字符串复制功能,C程序调用strcpy完成字符串复制的工作。 /* C程序*/ #include stdio.h extern void asm_strcpy(const char *src, char *dest); //声明可以被调用的函数 int main() //C语言主函数 { const char *s = seasons in the sun; //声明字符型指针变量 char d[32]; //声明字符型数组 asm_strcpy(s,d); //调用汇编子函数 printf(source: %s,s); //屏幕显示,S的值 printf( destination: %s,d); //屏幕显示,d的值。 return 0; } ; 汇编语言程序段 AREA asmfile,CODE,READONLY ;声明汇编语言程序段 EXPORT asm_strcpy ;声明可被调用函数名称 asm_strcpy ;函数入口地址 LOOP ;循环标志条 LDRB R4, [R0], #1 ;R0的地址加1后送给R4 CMP R4, #0 ;比较R4是否为零 BEQ OVER ;为零跳转到结束 STRB R4, [R1], #1 ;R4的值送入R1加1地址 B LOOP ;跳转到循环位置 OVER ;跳出标志位 MOV PC, LR ;子函数返回 END 4.在汇编程序中调用C的函数    在汇编中调用C的函数,需要在汇编中使用伪指令IMPORT 声明将要调用的C函数。 下面是一个汇编程序调用C程序的例子。其中在汇编程序中设置好各参数的值,本例有5个参数,分别使用寄存器R0存放第1个参数,R1存放第2个参数,R2存放第3个参数。 EXPORT asmfile ;可被调用的汇编段 AREA asmfile,CODE,READONLY;声明汇编程序段 IMPORT cFun ;声明调用C语言的cFun函数 ENTRY ;主程序起始入口 MOV R0, #11 ;将11放入R0 MOV R1, #22 ;将22放入R1 MOV R2, #33 ;将33放入R2 BL cFun;调用C语言子函数 END /*C 语言函数, 被汇编语言调用 */ int cFun(int a, int b, int c)//声明一个函数 { return a + b + c;//返回a+b+c的值 } 5.C++嵌入式系统中应用 C++和C是可以互相调用的,并且可以灵活的进行汇编语言、C语言、C++语言的混合调用。 前面讲述了C语言与汇编语言的互相调用,在这里我们将讨论C++和C语言的互相调用。当C++与C互相调用是必须使用伪指令“extern “C”{….}”,例如,extern “C”{include “cHeadfile.h”}。 extern C包含双重含义,其一:被它修饰的目标是“extern”的;其二:被它修饰的目标是“C”的。 (1)被extern “C”限定的函数或变量是extern类型的 extern是C/C++语言中表明函数和全局变量作用范围(可见

您可能关注的文档

文档评论(0)

kakaxi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档