arm汇编语言和c c语言溷合编程的方法

arm汇编语言和c c语言溷合编程的方法

ID:8191319

大小:240.91 KB

页数:3页

时间:2018-03-09

arm汇编语言和c c语言溷合编程的方法_第1页
arm汇编语言和c c语言溷合编程的方法_第2页
arm汇编语言和c c语言溷合编程的方法_第3页
资源描述:

《arm汇编语言和c c语言溷合编程的方法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、电子测量技术第29卷第6期嵌入式技术ELECTRONICMEASUREMENTTECHNOLOGY2006年12月ARM汇编语言和C/C++语言混合编程的方法史斌(天津大学电子信息工程学院天津300072)摘要:文中首先对在嵌入式系统设计中广泛应用的ARM系列微处理器做了简要介绍;接着详细阐述了基于ARM核的嵌入式微处理器的汇编语言和C/C++语言混合编程的方法:包括代码简洁而功能有限的在线汇编技术和功能强大、基于模块化设计的ATPCS规则;最后给出了详细的示例代码和分析。关键词:嵌入式系统;ARM;汇编语言;在线汇编;ATPCS规则ProgrammingofARMwithb

2、othassemblyandC/C++languageShiBin(SchoolofElectronic&InformationEngineeringTianjinUniversity,Tianjin300072)Abstract:ThisarticlebrieflyintroducedARMserialmicroprocessor,whichisextensivelyusedinembeddedsystemdesign;andthengavethetwomethodsofARM2coreembeddedprocessorprogrammingwithbothassembly

3、andC/C++Languageincludingin2lineassemblywhichiscompactbuthavesomelimitsandATPCSruleswhicharepowerfulandmodularized.Atlast,thereissomesourcecodewithanalysisfordemonstration.Keywords:embeddedsystem;ARM;assembly;in2lineassembly;ATPCS{0引言MRSr0,CPSR;//将状态积存器的内容传递ARM是一种高性能、低功耗的32位RISC嵌入式处到r0理器系列。

4、目前在各种嵌入式系统中ARM获得了广泛的ORRR0,R0,0x000000C0;//通过或运算将应用。r0的第6,7两位置1,其它位不变ARM编程可以使用汇编语言和C/C++语言,使用MSRCPSR_c,r0;//将r0的低8位送到汇编语言编程目标代码效率较高,但较为繁琐,设计大型CPSR的低8位,以屏蔽FIQ中断系统时不易维护;而C/C++语言比较简洁明了,但代码}效率即使经过优化,也比汇编语言低,特别是在一些实时INTPND=0xffffffff;//清除全部中断标志位,性强和需要精细处理的场合,C/C++语言难以胜任。因C/C++代码此一个折中的办法是:使用C/C++语

5、言写整体框架,而}使用汇编语言实现局部模块,这就涉及到汇编语言和C/C因为CPSR是一个物理寄存器,没有存储器的I/O映++语言混合编程的问题。为此本文介绍了在ADS中常射,而ARM的C/C++语言使用的是ANSI标准,不像用的2种汇编语言和C/C++语言混合编程方法:在线汇KeilC51那样有诸如sbit和sfr的扩展,所以访问CPSR的编(in2lineassembly)和ATPCS(ARM2ThumbProduce唯一方法就是用汇编语言;通过在C/C++代码中插入一CallStandard)规则。段简短的汇编代码,来实现对CPSR的访问。再比如一些波形发生的场合,需要每

6、隔一段精确的时间向端口送数1在线汇编(in2lineassembly)据,那么C/C++代码经编译后产生的指令数是无法预知在线汇编的具体含义就是:在C/C++代码中插入一的,所以无法实现精确定时,因此就要使用在线汇编。段汇编代码,以实现某种C/C++无法达到的效果,例如:在线汇编通过__asm关键字实现,一般格式为:{⋯⋯//C/C++代码INTMSK=0xffffffff;//屏蔽所有的向量中断,__asmC/C++代码{__asm//插入一段汇编代码指令1;指令2;指令3;⋯⋯·89·第29卷电子测量技术指令n;指令n+1;⋯⋯是C/C++模块(代码段)和汇编模块(函数)

7、相互调用的⋯⋯一套规则(很多C/C++编译器都有类似的规则),其具体}//括号内为汇编代码内容为(不涉及ARM代码和Thumb代码的相互调用)。⋯⋯//C/C++代码2.1被调用模块的寄存器使用其中汇编指令的操作数可以是物理寄存器,也可以是调用模块和被调用模块通过r0r3传递参数,因此参数C/C++语言的变量、行号和表达式,这点是比纯汇编代码少于4个时可以随意使用剩余的寄存器而不必保存和恢最大的方便之处。其实写在线汇编代码的思路和纯汇编复;使用r4r11之前一定要先在堆栈中保存起来,退出时再差不多,但要

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。