ARM汇编语言与C/C++语言混合编程实现方法

  • 格式:pdf
  • 大小:140.10 KB
  • 文档页数:2

Program Design・程序设计 ARM汇编语言与c/c++语言混合编程实现方法 

在计算机系统嵌入式应用程 序的开发中,对于;F-编语言与C/ c++语言的设计开发,二者都存在 着优缺点,所以相关人员在开发 中会采用ARM汇编语言与C/C++ 语言混合编程,从而取得最大的 效果。本文主要研究了ARM汇编 语言与C/C++语言混合编程的设 计实现方法,并进行相关的讨论。 

【关键词】ARM汇编语言C/c++语言混合编程 

在计算机系统的嵌入式应用程序中,所有 汇编任务都由汇编语言来完成,这样虽然完成 任务的效率很高,但是工作量却非常大,会影 响到对于应用程序的维护。若是所有的程序都 是由C/C++语言进行编程,虽然执行过程比 文/周晓燕 较的简单,但是这种方式却导致了目标代码的 执行任务效率低,实时性很差。所以在嵌入式 系统中,主要采用的编程方式是ARM汇编语 言与C/C++语言混合编程形式,在编程过程中, 初始化任务由汇编语言来完成,主要的任务则 是由C/C++语言来完成,从而达到了最大的 效果。 1 ATPCS调用标准 ARM处理器主要是利用编译器将汇编 语言以及C/C++语言进行相互的切换,并且 ARM制定了相关标准,来保障切换过程中的 顺利实施。 1.1寄存器使用规则 ATFCS为ARM寄存器进行不同命名, 从而在编程的过程中来利用ATPCS寄存器进 行编程。如表1所示。 1.2堆栈的使用规则 在ATPCS中规定,堆栈的主要类型是 FD,被称为满递减堆栈,所以必须要利用 STMFD/LDMFF进行堆栈的操作。 1.3参数传递规则 参数传递的规则不一样,利用参数的数 量可以将子程序分为参数数量固定,以及参数 数量不固定的子程序,对于参数变化的子程序, 若参数的数量少于四个,那么要利用寄存器来 进行参数的传递,若参数的数量多余四个,那 么必须要利用堆栈来进行参数的传递,所以参 数之间传递的规则不同。 2 ATPCS应用 2.1汇编语言调用C语言 在对计算机嵌入式程序的开发中,前期 由汇编语言进行初始化的编程,然后在进行C 语言之间的切换,对于C语言的切换,主要 

<<上接262页 

此时只能通过串口对MMC/SD卡操作,在虚 拟机的Linux系统的/mnt目录里看不到SD卡 文件,串口终端下敲入命令创建一个文件夹。 连接摄像头输入到Pl,连接视频信号输出 J7到显示器AV输入,串口终端切换到/opt/ dvsdk目录。运行编码程序encode。在/mnt/ SDcardtestdir目录下刷新可以看到录制的文件 test.mpeg4。接下来运行解码程序decode解码 test.mpeg4,稍等即可看到显示器有解码的图 像输出。测试操作完成后卸载SD卡文件系统。 如图所示主程序测试流程。如图5所示,主程 序完成系统的加载,包括BootLoader的启动 和加载,硬件驱动程序、操作系统的加载和启 动,操作系统启动成功后通过Shell程序加载 启动监控系统软件,进入监控系统。 4总结 本文设计一个车载视频压缩与存储平台, 利用该平台强大的视频处理能力,实现嵌入式 系统下实时视频图像的采集、编码、压缩以及 存储功能。系统软件设计中采用嵌入式操作系 统Monta Vista Linux,并对其内核进行裁剪编 译,最后移植到DM355硬件平台。在嵌入式 Linux操作系统的基础上,设计并实现了基于 嵌入式Linux的视频压缩与存储系统。本系统 工作时采集线程、A/D转换线程、压缩编码线 程、存储与显示线程等同时工作,需保证其有 效通信、工作流畅。系统实现了视频压缩编解 码技术,消除那些无用的冗余数据,保留有效 的信息。视频的采集、转换是系统数字化的第 一步,实时、高压缩比的压缩技术是存储和传 输的基础。本系统选择MPEG一4这一视频压 缩标准,其具有高压缩比、动态特性好、存储 容量优势明显等特点。车载视频监控系统涉及 多个摄像头,位于客车的不同位置,由于安全 监控的需要,要求能够随时切换存储摄像头, 并将拍摄视频存入存储卡中。视频监控中采用 回滚存储方式,对于车载视频存储系统只将触 发信号触发前后的几十秒时间内的视频存储下 来,很大程度地节约存储资源。 参考文献 [1】杨忻恺,张为公,于兵.基于DSP的车载 视频监控存储系统的设计….电子器件, 2009.8.32(4):806-808. [2】何立民.嵌入式系统的定义与发 展历史.单片机及嵌入式应用 【M】.2007,10:79—81. 【3】杨德瑞.基于ARM的无线视频传输系统大 容量存储技术研究[D】.哈尔滨:哈尔滨 工业大学信息通信学院,2006.6. 4陈义钦,覃团.基于ARM9的视频采集传 输系统[J】.电子工程师,2007.33(5):2卜 23. [5】杨凯.视频监控系统的设计与实现【D]. 武汉:华中科技大学,2006.6 【6】梁培钧,赵军.基于嵌入式Linux的视 频采集系统设计【J].电脑知识与技术, 2009.5(11):2896--2897. [7】TechvOM355使用说明[御.北京达盛科技 有限公司.2008. [8】y a O Wa n g,J Oi n 0 s t e rma rm,Ya— Oi n Zh a n g.Vi d e o P r o c e s s i n g a nd COmmuni c a t i 0n【M】.P e a r s on Educat ion,2002. [9】Ni Ch01 a s MeGUi r e.Embedded GNU/ LiflUX drawing the bi g-piCture[J J. IEEE.2003:1237—1242. [1 0】Wo1f.Computers a s Component S【J】. Princi PIes of Embedded Computing System Des ign.2002:1—5. 作者简介 戴华平(1986-),男,硕士研究生学历,初 级工程师。研究方向为汽车电子。 陈里东(1987-),男,硕士研究生学历,初 级工程师。研究方向为控制工程。 作者单位 1.长江龙城科技有限公司 21 3164 2.中国电力科学研究院 1 00192 江苏省常州市 北京市海淀区 

Electronic Technology&Software Engineeri

ng电子技术与软件工程・271 程序设计・Program Design 表1:ARM与ATOCS对照表 ARM ATPCS 含义 ARM ATPCS 含义 R1 A1 寄存器 R9 Sl 栈指针 R2 A2 寄存器 R1O fs 链接寄存器 R3 A3 寄存器 R11 sp 程序寄存器 R4 A4 寄存器 R12 .b 帧指针 R5 B3 保护 Rl3 lp 保护 R6 B4 保护 R14 lb 保护 R7 B5 保护 R15 pc 栈指针 R8 B6 指令 R16 1r 帧指针 

是通过BL来实现的。以下是调用的字符 //C语言 Void s(ahar b,ahar { for(; a!=’\0’:、 f = a: a:a+4: b=b+4:l = a: } //汇编语言 AREV E CDDE,RELDOMLy LMPDRT S;inpora被调用C ENTRY LORR1.=a L0RR2.=b BA S;调用C MOVPC.LR AREV F’CDDE,RELDOMI Y a DOD‘H,’e’,’1’,’1t,t0’, \0’ bDOD S,’a’, Y,”,’nitO’,’\0’ END 2.2 C语言调用汇编语言 在程序中,使用“C_广+”程序来调用C 程序,以下是调用C程序的字符: //C++程序 stract S{ S(iatb):i(s){} indi; }; extern”C”void chgnc(S )://关键词 extem被调用C程序 igtf_(h){ stanct“S”{ Sh(3);//初始化结构对象 cfdnc( 1;/qiehuan C程序 returails.i'3; } //被C+十程序切换c程序 Stanct S{ intn; }; void chgnc(struct S b1 { p->i+=3; } 2.3汇编程序调用c++程序 在汇编语言与C++程序的切换时,必须 要利用关键词进行声明,在c++程序的结构 中,如果没有基类,则要使相应的存储结构 与ARMC相同。并且在汇编过程中将参数的 数据放在数据栈中,只有这样才能使被调用的 C++程序访问到相应的参数。 STRB ch,[dst], 1 CMP ch.拌0 BNEloop } ) 切换my strcpy()的C语言代码: Int main(C) { Char b=”HappyToday”: Char c[32】; mestrajy(b,c); Prantf(”original string:‘%s’\b,a) Prarm tf(”copied string:‘%s’\a,b) Retuan(0); End } 3内嵌汇编 4结束语 在进行混合编程的过程中,若汇编代码 较短,那么可以利用内嵌汇编的方式进行混合 编程,不会直接指定寄存器,而是直接利用编 译器进行分配。主要的内嵌汇编语言如下: —_asm { inacfhction【;inacfhction】 [inacfhction】 } 以下是利用字符串复制的方式实现混 合汇编: #include<stdio-h> void my strcpy(const char src,char dst) { int ch; asm { loop: me strajy(b,c); LDRB ch,[src],撑1 272・电子技术与软件工程Electronic Technology&Software Engineering 在计算机系统嵌入式应用程序的开发中, 利用ARM汇编语言与C/C++语言相互结合的 混合编程方式,可以在很大程度上提高编程的 最佳效果。本文主要举出了ARM汇编语言以 及C/c++语言汇编中的实例,提出了设计的 方法,阐述了ARM汇编语言与C/C++语言相 互结混合编程方式的实现。 参考文献 [1】马忠梅,徐英慧.ARM嵌入式处理器结构 与应用基础[M].北京航空航天大学出版 社,2010,1(2):20—30. [2】史斌,孙晔.ARM汇编语言与C/C++混合编 程方法【J].电子测量技术,201 0,6(6):15- 20. [3】王勇.ARM汇编语言和C/C++语言混合编程 的方法[J】.电子测量技术,2010,1 3(5):40— 44. 作者单位 上海市贸易学校上海市200092