您好, 访客   登录/注册

嵌入式C语言系统开发代码优化研究

来源:用户上传      作者:薛亚 朱娅晶

  摘要:在嵌入式系统的应用过程中,对于应用软件有着非常高的要求。在对嵌入式系统进行C语言开发的过程中,务必要注意对程序代码的优化操作,通过该方法的应用能够有效提升代码的运行效率,促进代码的执行质量。虽然在一定程度上C编译器能够为代码提供一定的优化服务与帮助,但是从本质上来分析,C编译器为其提供的优化技术仅仅能做到速度和代码量的平衡。而无法实现提高代码运行效率以及促进代码执行质量。针对这一问题,有效的解决方法是:设计一个有效又快,且能够实现代码执行速度和代码量有效平衡的系统结构。研究将针对这一内容对其进行分析,并提出如何有效优化C代码的方法与措施。
  关键词:嵌入式系统;C语言;代码优化;方法应用
  中图分类号:TP311 文献标识码:A
  文章编号:1009-3044(2020)29-0227-02
  1 引言
  就当前情况而言,C语言已经成为嵌入式系统研究和开发的主要应用方法,且作为一种系统设计语言,C语言具备简单、高效的特点,以及兼容多种高级语言的功能。其本身具备强大的可移植功能和應用特征。特别是在嵌入式系统的开发和应用中.能够实现低成本、低消耗的产出,实现高质量、高效率的系统开发和应用。但是,在这一过程中需要探索的问题为:在这一背景下,基于C语言开发和设计的嵌入式系统在储存容量以及计算能力等方面的效率较低,所以,研究将针对这一问题提出如何有效提升嵌入式C语言系统开发代码的应用效果,实现对C语言代码的优化与完善。
  2 C代码优化
  目前的C语言编译器能够在设计和开发系统的过程中对相关代码进行自动优化,但是这一优化模式是基于代码的长度与执行命令的速度基础上实现的,且是为了平衡两者之间的关系。如果在这一基础上想要实现能方便、更搞笑的C语言代码执行效率,就需要对其进行深度优化操作,且需要通过程序员对其进行人工优化,这样便可以有效提成C语言对嵌入式系统开发的应用质量和应用效率。
  2.1 变量使用
  在对嵌入式系统进行研究与设计的过程中,需要通过变量的使用对其进行有效的分析,以此实现对系统的完整架构,进而提升C代码的优化质量。在变量使用过程中,可以通过全局变量的方法对其进行应用,该方法的应用比向函数传递参数的效果更好,且能够避免函数在被调用的过程中出现出栈和入栈的情况。但是,在应用全局变量的过程中同样有“副作用”,比如,变量的次序会让映像数据布局发生改变,而且在声明变量的应用中,还需要通过严密的设计方法对其进行控制储存器的有效分配与精确分布。在这一过程中,最高效的应用办法为:在编程的过程中,需要将相同的变量融合在一起对其进行应用和定义操作。而且在变量声明的过程中需要通过英文缩写对其进行表示,这样能够大大降低内存的占有空间,且可以提升运行速度。另外,针对不同类型的数据,设备生成的代码长度差异性加大,在这一过程中需要尽量选用长度较短的代码。如,应用int相比long的速度更快。
  2.2 数组使用
  首先,需要对数组进行初始化操作,为了提升运行速度,可以在初始化的过程中预留数组范围,这样程序的运行效率会加倍提升。其次,可以寻找代替数组的方法,如,利用指针代替数组能够有效解决这一问题。一般情况下,指针的位置就是数据的储存位置,而数组是所有变量的综合表现方式。在这一情况下,便可以通过指针的运行来反应数组的索引,进而实现目标代码编辑的速度与质量不断提升。相比数组索引,指针运算效率更快,占内存空间更小,而且应用多为数组的差异也会更显著。在数组的使用过程中,任意一次的循环都需要对其进行下标“i”值的标记与计算,并且要在C语言编译器中观察其指令周期,一般情况下为一次循环占有四个指令周期。当指针“p”位于array数组位置的时候,任意一次循环仅需要对“p”进行增量的操作,而且在这一背景下一次循环只占有两个指令周期。通过以上两种方法的应用,相比较之前的运算效率与命令执行能力,速度可提升一倍。
  2.3 宏的使用
  在应用C语言对嵌入式系统进行开发和设计的过程中,如果想要实现对代码的完整优化,就务必要应用宏对其进行支撑和帮助。这样,能够从根本上提升程序的运算效率,促进程序对命令的执行速度。从本质上分析,宏并非一种函数表现形式,只是在应用过程中接近于函数模式。在对函数进行调用的过程中,需要通过系统栈对其进行储存,而且CPU在函数调用的过程中还要做好对数据的恢复准备。在这一背景下,可以有效进行出栈和进栈的操作。由此可见,占用CPU实践的除了代码本身之外,对函数进行调用也需要占据一定的时间。但是,通过宏定义对其进行设计便可以规避这一问题。宏定义能够提前做好代码嵌入工作,且可以将之融人开发系统中,进而省略函数调用环节,从占用CPU的时间转变为了占用较小的储存空间。该方法的应用还能够摆脱参数压栈、返回参数、C语言call调用以及执行return的操作步骤。在提升程序运行速度与执行效率的同时降低了操作的烦琐性。
  2.4 循环程序处理
  在系统的多重循环过程中,需要程序员将最长的循环内容设置在系统的最内层,同时需要将最短的循环内容设置在系统的最外层。这样,能够有效提升CPU的运行效率,促进CPU的跨切循环次数。另外,如果在系统的循环过程中需要进行逻辑判断,且循环的次数相对较大,就需要将循环判断从系统内部嫁接到系统的外部。通过该方法的应用,能够实现高效率且频繁的操作,且可以打破原有模式下的流水线作业方式,进而使得编译器在对代码优化的过程中能够实现对整体代码的高效处理。
  2.5 优化分支语言
  从发生的频率排序对其进行分析,在按照条件选择执行语句的时候,需要结合系统的顺序对其进行比较,并且进行相应的匹配处理,以此实现满足条件的语句执行方法应用。同时,为了有效提升分支语句优化的速度,还可以结合实际情况对其进行发生相对频率的排序处理,在这一背景下需要将最有可能发生的放在最前端,然后将发生可能最小的放在最末端,这一方法的应用能够有效提升程序的计算与执行速度。在进行switch语言编译的过程中,语言编译器会自动生成if-else-if嵌套代码,在此需要程序员对其进行顺序性比较,然后再对其进行匹配处理,进而实现满足条件的语句执行跳转。在switch语句中,case标号较多,在此需要程序员对其进行次数的控制,在这一过程中需要将发生频率较高的往前设置,将发生频率相抵较低的往后放置。抑或者可以将整个switch语句进行转化,利用嵌套语句的模式将之应用起来,然后将发生频率相对较高的编号放在外层,将发生频率较低的标号放在内层。另外,如果在switch的任意一种模式中都有很多任务需要完成,便可以将switch语句进行指向函数指针的代替,以此提升任务完成的效率,降低任务完成的难度,并实现代码替换的目的。   2.6 利用数字优化程序
  在对程序进行编写的过程中,需要几何相应的数学计算方法对其进行程序的运算与处理.并且需要在这一背景下对程序进行相应的检测,以此实现程序对命令的执行能力和执行效率,提升程序的运行效率级别。这是程序设计与开发过程中的一个重要环节,但是也是容易被人忽略的部分。而且对于部分经验欠缺的技术人员来说,这一部分的操作相对较为困难。比如,需要求证程序中1-100的总和。在此,可以通过以下两种方法对其进行求证:
  第一是inti,sum=0:
  for(i=1:i<101:i++)
  {sum+=i;
  第二是int sum;
  Sum= 100*(100+1)/2;
  通过以上两种方法我们可以分析得出,在第一种方法中,系统需要循环100次才能解决这一问题,换言之,徐彤最少需要应用100个赋值才能对其进行100次准确的判断,而且在这一过程中还需要通过200次的加法计算才能得出最终结果。而在第二种应用方法中,系统仅仅需要完成1次加法、1次乘法和1次除法便可以将之准确的计算出来。从以上两种方法的应用中可以看出,第二种方法不论从简便性、效率还是代码编写的长度等方面均优越与第一种。因此,在对其进行嵌入式程序设计的过程中,可以首先选择应用第二种犯法对其进行程序运行效率的提升与发展。
  2.7 应用位操作代替乘除法
  在计算机的应用程序中,数据是其中的最小位,也是可以直接操作的单位。正常情况下,对数据的操作需要借助硬件来完成,在硬件的控制下,数据可以得到相应的变化,完成相应的需求。在此,为了提升应用位操作的效率,并代替乘除法的计算模式,可以对其进行运行效率灵活性的提升。因为乘除法在CPU中无法直接运行,而是需要在一定条件下来实现。
  如,除法的应用为:int height,le n;
  height= 128/8;
  le n=256%8:
  乘法的应用为:int height,le n;
  height= 128>>3;
  le n=256 - (256 >>3<<3);
  结合以上两种模式,代码生成过程中调用了出发和取余函数,所以,在这一过程中出现了函数调用的情况,同时还形成了寄存器参与运算的行为。由此可见,通过第二种方法对其进行代码的生成更加高效快捷。
  3 总结
  在日常系统设计过程中,嵌入式系统开发与设计中代码的优化工作需要应用到较大的成本,而且有很多开销项目属于“隐藏项目”。同时工作较为复杂,且消耗的资源相对较大。在这一过程中,编程需要尽量通过程序优化的方式降低以上问题的发生概率,缩减不必要的运算环节,在控制成本的过程中提升系统开发的整体效率与质量。研究分析了如何有效地提升代码的运行效率,但是在现实环境汇总,代码效率在得到提升和优化之后依然会出现其他方面的弊端与问题,甚至会对程序的整体运行造成严重的影响。比如,较为常见的有:代码大小的控制失效、程序可读性降低等。所以,在后续的嵌入式系统开发与设计中,需要通过科学合理的办法对其进行代码的优化,切不可一味追求速度,也不可一味追求稳定。
  参考文獻:
  [1]杨毅刚,范安宇,郑一超,等,基于C语言的宿舍管理系统设计 与开发[J].电脑编程技巧与维护,2017(23):50-52.
  [2]张祎.C语言在单片机开发中的应用分析[J].江苏科技信息,2017(18):47-48.
  [3]胡晓燕,谭跃生,李海荣,等.基于Android系统的移动学习环境开发与应用[J].中国现代教育装备,2016(11):12-14.
  [4]封婉.基于C程序设计语言的计算机编程分析[J].职大学报,2015(6):88-89.
  【通联编辑:代影】
  作者简介:朱娅晶(1980-),女,江苏常州人,高校副教授,硕士,研究方向:计算机软件。
转载注明来源:https://www.xzbu.com/8/view-15358415.htm