加快程序运行速度的写法

本文详细介绍了嵌入式系统中如何通过优化算法、编写技巧、利用逻辑运算、指针寻址、内存对齐等方式提高程序运行速度。包括使用++、--、位移操作符加速计算,减少分支语句,使用指针减少数组引用次数,避免不必要的内存寻址,以及函数和变量的优化策略,如inline函数、减少函数参数、使用register变量等。通过这些方法,可以显著提高代码的执行效率。

嵌入式系统 编程技巧之:
加快程序运行速度的写法
影响程序运行速度的因素:
1) 算法:同样的计算结果,不同的算法,速度差距很大;
2) 写法:巧妙的写法,也可以加快运行速度,特别是遇到大循环的时候;
一个程序的运行速度提高,需在平时就采成良好的代码编写习惯,每个地方“一点点”,累积起来才见分晓。
1) 计算:
计算机计算方法中,最快的:++,-- , << , >> & | ^ ~
第二级: + - *
第三级: /
第四级: 三角,开方等
有以下优化写法:
a) X = y / a/b/c 应写为: x = y / (abc)

b) 整数乘除2的指数时,应采用:<< , >>
优化成:x >>=n ; x<<=n;

c) 取二进制的余,x = y%16 , 优化为:x = Y&0x0f;

d) x = x +1 ; 应优化成:x++,x–
x++ : 在很多CPU中,仅 1T
   x= x +1 ; 可能需要 3 T

    e) 若程序中存在 除以某个不变数(比如:某个设定的参数,设定之后大量引用),应将这个参数取倒数,改除为乘;
    如: 若程序中需频繁地 / z ,则应优化:
    对于不变的常数: #define  Z  1/z 
       在某个过程中不会变的,则先: Z = 1/z
      在程序中,改成 x = y*Z;

2) 充分利用逻辑运算 0或1 的结果:
If( x > y )
{
Z = y *2;
}
优化成: z = y<<(x>y);

 同理:   m += (X>Y);
          A.0 = (X>Y)
          A.0 |= (X>Y)

CPU运算速度对分支很敏感,这样就避免了分支,大大加快。

3) 充分利用指针寻址:
主要面对数组的同一元素多次引用时,应采取指针法
如: A(i).n =
A(i).m =
………
同一个A(i)多次此用
应优化为:
pA = &A(i);
pA->n =
pA->m =
此用量越大,效果越明显;

4) 在一个逻辑条件语句中常数项永远在左侧。
错误:if( 1 == x ) // 优点:不容易笔误,但相对慢
正确:if( x == 1 ) // 容易笔误成 x = 1 , 特别是初学者
理由:绝大多数CPU都有直接与常数操作的指令

  1. 确保声明和定义是静态的,除非您希望从不同的文件中调用该函数。
    在同一文件函数对其他函数可见,才称之为静态函数。它限制其他访问内部函数,如果我们希望从外界隐藏该函数。现在我们并不需要为内部函数创建头文件,其他看不到该函数。静态声明一个函数的优点包括:
    (1)两个或两个以上具有相同名称的静态函数,可用于在不同的文件。
    (2)编译消耗减少,因为没有外部符号处理。

  2. 尽量使用与CPU位宽相同的数据类型
    如:32位机,尽量使用32位的数据,也有些“伪32位”的CPU,如:TI的C2000系统,期数据基本位宽是16位。

7)、内存对齐
减小内存消耗,加快寻址速度,以32位机为例
struct
{ int16 A;
Float32 C;
Int16 B;
}ABC;
内存中的占用为:
A:16/32
C: 32
B: 16/32
共:3个32位空间
应优化为:
struct
{

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值