嵌入式代码优化

优化概述
代码优化:时间优化,空间优化
代码优化与程序的可读性矛盾
需要优先优化的代码对象:程序频繁使用的代码

一般情况下,编译器是保守的,以便使较坏的代码也能编译通过
因此高效的C程序可以通过研究编译器如何把C代码转换成ARM汇编代码,以帮助程序员区分快速和慢速的C代码,进而指导程序员进行C程序设计。

1.变量的数据类型选择
在32位系统架构下
①采用整形类型,省去了多余的移位操作
②尽量使用int类型,仅使用char short 的溢出归零特性
因为在32位系统架构下实现char类型要多一条与0xFF相与的汇编指令,使用短整型则需汇编语言的移位操作,增加了汇编指令,降低了程序效率。

2.循环优化
循环是代码优化的重点
C语言主要通过for和while来实现循环

固定次数的循环
采用减计数
ARM汇编中实现循环只需要两条指令
①减法指令用作循环计数,同时设置结果条件标志(减法指令的特性)
②一条条件分支指令

for (i=64;i!=0;i--)

从汇编语言角度来看,加法计数有3条指令作为循环的开销,减法指令只需2条

不定次数的循环

do...while()

的使用能展现出更好的性能和代码密度,前提是程序员要保证至少循环一次

循环展开

/*假设需要累加的个数是4的倍数*/
 int checksum(int *data,unsigned int n)
 {
     int sum = 0;
     do{
          sum += *(data++);
          sum += *(data++);
          sum += *(data++);
          sum += *(data++);
          n -= 4;
       }while(n != 0);
      return sum;
 }

假设n = 20 优化前执行83条语句,优化后执行53条语句
循环展开的缺点:代码量增加,cache空间占用问题
因此要具体问题具体分析找到平衡点

3.指针别名
别名:当两个指针指向同一个对象时,这两个指针被称作该对象的别名
增加局部变量避免多次提取

void timers_v1(int *timer1 ,int *timer2 ,int *step)
{ 
       *timer1 = *step;
       *timer1 = *step;
}
/*增加局部变量避免指针两次提取*/
void timers_v2(State *state ,Timers*timers)
{
       int step = state ->step;
       timers ->timer1 += step;
       timers ->timer2 += step;
}

4.结构体
地址对齐问题
数据存取的效率问题
结论:
要把所有八位元素安排在结构体的前面
依次安排16位、32位元素
把数组和大元素安排到后面
结构体太大的话,可以构建子结构体,编译器可以单独维持其指针

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ARM嵌入式系统代码优化是指通过各种手段提高ARM处理器在嵌入式系统中执行代码的效率和性能。在嵌入式系统中,资源有限且对功耗要求较高,因此代码的优化显得尤为重要。 首先,可以从算法上进行优化。选择更合适的算法可以有效降低代码的复杂度和执行时间。例如,可以通过减少循环次数、避免无用的计算、减少内存访问等方式来改进算法,从而提高代码的运行效率。 其次,需要注意ARM处理器的体系结构特点。ARM处理器具有多级流水线以及分支预测等特性,因此在编写代码时应尽量避免分支语句和循环嵌套过深,以减少流水线的切换和分支预测错误的影响。 此外,需要合理使用ARM处理器提供的优化指令和优化编译器选项。ARM处理器提供了一些能够加速代码执行的特殊指令,例如SIMD指令集、并行处理指令等。同时,合理选择编译器的优化选项,如优化级别、调整对齐方式等,可以显著改善代码的执行效率。 最后,还可以通过使用嵌入式操作系统和工具来进行代码优化嵌入式操作系统可以提供更好的资源管理和调度,从而提高代码执行的效率。此外,使用一些性能分析工具,如基于硬件的跟踪工具和性能分析器,可以帮助开发者找到代码中的性能瓶颈,并进行相应的优化。 综上所述,ARM嵌入式系统代码优化是一个综合性的工作,需要从算法、体系结构、指令集、编译器和操作系统等多个方面进行考虑和优化,以提高ARM处理器在嵌入式系统中的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值