2018年1月25日现代信息科技第2卷第1期Modern Information Technology Jan.2018 Vol.2 No.1关于嵌入式C程序设计优化及应用的探索分析蔡泽鹏(富泰华工业(深圳)有限公司,广东 深圳 518110)摘 要:从单片机到ARM,从智能手机到工业4.0物联网,嵌入式的开发技术、应用在这10年间日新月异,嵌入式系统得到了广泛的应用。越来越多的程序员参与到嵌入式的开发中,而由于C语言本身的特点,同时具有高级语言及低级语言的特性,成为众多嵌入式应用开发的选择。因此本文通过对嵌入式系统的分析理解,结合C语言的特性,根据实践工作中的相关经验,对嵌入式C程序设计优化及应用进行探索分析,帮助开发人员提升程序开发、执行效率。关键词:嵌入式;C语言;优化;开发与应用中图分类号:TP312.1;TP368.11 文献标识码:A 文章编号:2096-4706(2018)01-0035-02The Exploration and Analysis on the Optimization and Application of Embedded C Program DesignCAI Zepeng(FuTaiHua Industry(ShenZhen)CO.,LTD.,ShenZhen 518110,China)application has been changing rapidly in the past Abstract:From MCU to ARM,from smart phone to industrial 4 internet of things,embedded development technology and 10 years.The embedded system has been widely applied.More and more programmers are involved in the development of embedded system,and because of the characteristics of C language and the characteristics of high-level language and low-level language,it has become the choice of many embedded application development. Therefore,by analyzing and understanding the embedded system,combining the characteristics of C language,and exploring the analysis and optimization of embedded C programming optimization,we can help developers improve the efficiency of program development and execution.Keywords:embedded;C language;optimization;development and application0 引 言存在着一些短板,比如不能访问某些寄存器,其本身是面向嵌入式系统是软件和硬件的结合的系统,其特点之一就过程的语言,扩展性较其他面向对象的语言较差。因此需要是软硬件可裁剪,因此需要一门既能够控制硬件也能便于编利用其它语言的特性结合C语言中嵌入式中的设计应用特程、易移植的语言。C语言本身的特点,与嵌入式的特点一点做优化。拍即合,非常适合与嵌入式的开发。C语言的应用最广泛应2 嵌入式C程序系统的设计与开发属Uinix、Linux操作系统,目前智能手机操作系统使用最广泛的Android、IOS内核都是基于Linux、Unix修改的。2.1 开发环境但是随着嵌入式的发展,新的挑战也让C语言开发遇到了嵌入式系统在开发期间,与传统PC机存在较大不同,对手,其他的语言如Java,Object-C,Python也广泛被嵌比如在PC上的Windows操作系统,我们可以用在其平台入式程序员所接受,因此,在使用C语言作为嵌入式开发下编译工具直接编译开发针对Windows系统的程序,即本应用的时候,需要尽可能对其进行优化,使其适应当前快速机编译,而在嵌入式平台如ARM,由于ARM目标平台有发展的需求。限的存储空间和运算能力,我们只能借助PC平台的交叉编译器进行编译,然后将其生成的可执行文件拷贝到ARM平1 嵌入式C语言优缺点台进行运行,这个我们称为交叉编译[1]。在嵌入式开发中,C语言是一门高级语言,拥有高级语言的特性,能够实如果需要目标程序进行调试,其中一个方法是在调试主机上现一些上层的应用开发,具有较高的可读性,便于程序员编通过JTAG协议转换器与目标调试系统通信,完成调试。写代码,也拥有低级语言的特性,面向底层,能通过指针读2.2 C编译过程写内存和寄存器,从而便于访问硬件。C语言中定义了一套当完成C源代码工作后,需要对其进行编译。一般来说,标准库,最大程度使程序员所编写的程序适用于所有的编译在编译的过程中需要通过相应的汇编编译器将C代码编译器中的库,易于编译移植。嵌入式采用C语言来编程,也为汇编代码,为了能在目标机上运行,我们还需要进一步将其与其他文件链接为目标机识别的可执行二进制文件。收稿日期:2017-11-02因此汇编在编译的过程起到了一个桥梁的作用,如果我们2018.135现代信息科技 1月.indd 352018/3/16 17::20第1期现代信息科技能够处理好C语言与汇编语言之间的调用关系将能提升代嵌入式发展要求,可以将Lua与C结合起来应用到嵌入式码效率。的开发中。随着动态语言的发展,Lua能够帮助程序完成更3 嵌入式C程序设计与应用优化多的功能并简化编程人员的工作。因此这里探讨Lua与C结合的优点。首先Lua是一门脚本语言,是为了解决传统开3.1 灵活利用汇编与C进行混和编程发语言需要经过编码-编译-链接-执行这个过程而创建在C程序实际执行过程中,C语言在C程序中将无法的一个编程语言,不同于高级语言,它本身不需要编译,而完全实现硬件控制功能,比如:对中断控制寄存器进行修改。是在执行的时候进行“解释执行”,因此它可以省去编译的汇编语言是面向机器的低级语言,其保持了机器语言的优点,过程从而减少开发时间。Lua脚本本身非常小巧,对比其他执行效率方面比C更高。结合上文的讨论,可以在C程序脚本语言如Python,它的运行速度快而且内存占用少,这中直接嵌入汇编语句,利用汇编语句对程序进行优化。当然,对于内存资源有限的嵌入式设备来说非常适合。其次,Lua该方法也是存在一些缺陷,C环境容易被破坏而且会降低可是开源免费的,Lua本身就是用C语言实现的,代码非常简读性、移植性,因此需要合理的使用汇编语言。使用的嵌入洁短小,因此很容易移植到C程序中,几乎可以在所有的汇编语句方法较为简单,仅仅在汇编语句的左、右等将汇编平台上编译,因此不用担心难移植,硬件大消耗的问题。嵌的依据使用小括号括住,并且在括号前增加asm标识符号。入式系统的特点要求软件需要良好的移植性,因此Lua也被比如:具体表示为:asm(“汇编语句”)。在C程序中,很多嵌入式开发人员所接受。最后Lua的扩展性很好,定义将C程序直接嵌入到汇编语句中,其最为典型的应用方式的变量没有类型,采用了面向对象而非面向过程的设计是控制DSP芯片或者一些硬件资源[2]。结构,这些弥补了C语言在设计上一些短板[5]。通过这3个3.2 寄存器和参数传递优点,Lua与C结合是嵌入式应用开发一个不错选择,可以在C程序嵌入汇编语言时需要注意寄存器的应用也将Lua的解析器移植到C程序中,在程序提供一套接口供需要遵循一定原则。比如:在子程序之间,要使用寄存器Lua调用,程序员只需要编写简单的Lua脚本来调用这些接RO-R3来传递参数,对局部的变量则用R4-R7寄存器。口,通过UART串口或者USB传送Lua文件给嵌入式设备当返回的时候,可以利用R0和R1进行返回。在实际的进行解析,就能完成一系列的控制而不必修改C程序代码。处理中还需要遵守一些特殊寄存器的使用,例如:寄存器比如在工厂的机械手臂作业,需要更换操作动作,我们可以R14,在ARM中其也称为一种链接寄存器,记为LR,它通过Lua与C的结合,通过编写Lua脚本就可以实现一组是PC寄存器的备份,用于保存子程序的返回地址。在闲置新的操作动作,而不必再次经过修改程序-编译-运行的的时候可以当作通用数据寄存器来使用,比如用于程序计数过程,大大的提高了开发效率。器[3]。在参数传递应用中,整体上,可以将数据有顺序的传4 结 论递到寄存器上,如果传递的参数在4个以上的时候,可以把其余的字数据传递到数据栈中。如果发现入栈的顺序和参数基于以上的分析和研究可以发现,虽然C语言在嵌入是相反的,可以将最后一个参数先入栈。根据这种规则和顺式开发中是一个强大的开发语言,但是随着嵌入式的发展以序,一个浮点参数可以在寄存器下进行传递,也能在数据栈及其他编程语言的兴起,我们需要对C语言的编程及应用之间进行传递,也可以对其一半进行寄存器的传递,其他数充分分析和掌握,才能提升嵌入式C程序的适用性,在对据经过数据栈进行传递。如果参数为固定的,在传递期间,其积极开发和利用过程中,也需要深入研究实际电子硬件系可以基于用户的选定的ATPCS类型,并将其与C语言库进统,并在开发设计中,合理地采用嵌入式C语言结合汇编行连接,当在对语言程序进行汇编的时候,则根据用户选定语言、Lua语言等其他来实现某些功能和进行扩展,就可以的ATPCS类型来进行。在进行汇编混合编程的时候要注意实现部分高级语言不能完成的功能,也能提升程序开发和执不要直接使用R12,比如在计算一些表达式的值的时候可能行效率。会被用来保存值。参考文献:因此,在利用汇编混合编程的时候,要按照一定原则来[1] 许鹏程,李小波.MATLAB与STM32 CubeMX联合的嵌实现,以促进嵌入式C程序的设计和优化,保证在整体上入式开发方法 [J].单片机与嵌入式系统应用,2016(10):14-16.对其充分应用[4]。[2] 张枫,张晓民.基于ARM嵌入式的免耕播种机盘刀轴承故障诊断 [J].农机化研究,2017(12):58-62.3.3 设计应用扩展[3] 王应军,曲培新,赵晨萍.ARM汇编语言与C语言混合从上文的分析中,可以看到C程序的编译需要经过编编程的实现方法 [J].科技信息,2010(3):12-13. 译→链接→可执行的过程,因此在调试以及现在控制应用的[4] 刘良江,李庆先,田健,等.基于流程图的嵌入式软件能时候难免需要再次完成这个编译的过程,C语言是面向过程耗模型 [J].计算技术与自动化,2016(3):115-118.的语言,在开发一些上层应用如UI,没有面向对象语言那[5] 邓正阳,陈和平,苏鹏.动态脚本语言Lua与C++交互么易扩展、维护。因为为了将C程序的应用进行扩展,采方法的研究与实现 [J].计算机系统应用,2010(5):198-201.用对Lua的支持来适应当前的需求。Lua脚本语言已经成功作者简介:蔡泽鹏(1985-),男,汉族,广东人,技术课长,地应用到网络游戏,分析其特点,结合C语言的特性以及助理工程师,学士。研究方向:嵌入式开发。362018.1现代信息科技 1月.indd 362018/3/16 17::20