这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » 嵌入式中的软件优化

共1条 1/1 1 跳转至

嵌入式中的软件优化

专家
2010-05-12 08:33:32     打赏
这是我在编写程序过程中总结出来的一些建议
1、在编码过程中,程序员应该尽可能地为编译器提供更多的信息,协助编译器更好地进行优化。程序员与编译器主要通过C语言关键字进行交流。以C标准库函数strcpy为例,它的原型为:char *strcpy(char *dst,const char *src ),而不是char *strcpy(char *dst, char *src )。虽然它们只是相差了一个const,但是在编译器看起来却相差甚远,如果使用const修饰src,表明src指向一个常量字符串,编译器可直接从寄存器或者告诉缓存中访问它们,而不必每次都要从存储器中读出它们的内容。这一不仅提高了执行速度,且编译器也可以捕获对src指向的字符串的修改。
2、手动优化:计算密集型优化,如:a、如果b>0并且b*c不会饱和,那么可以使用乘法代替除法,将(a/b)>c代替为a>(c*b) 。b、如果乘法运算中的乘数或者除法运算中的分母为2的倍数,那么可以使用移位操作代替乘法。c、加法要快于乘法的,(a+a+a)代替为a*3
3、尽可能少使用全局变量,由于全局变量的全局可见的,可以在多个地方对其进行修改,因此编译器不能再寄存器中缓存全局变量的值。这样,读或写全局变量时,都必须访问存储器以装载或存储它们,并且在访问全局变量时 ,为了保证其完整性必须确保操作是原子的,这又会增加开销
4、局部性原理,优秀的代码倾向于展示良好的局部性,它包含两个方面的含义,一,倾向于在极短时间间隔内,多次引用同一存储器,二,倾向于在极短时间间隔内,引用当前访问的数据项附近的数据项。比较一下下面2种方法来求二维数组的和。由于C语言以行优先顺序存储数组,因此行优先累加方法的局部性优于列优先累计方法
#define M 100
#define N 100
/*行优先累加方法*/
int sumarrayrows(int a[M][N])
{
  int i,j,sum=0;
  for(i=0;i<M;i++)
    {
    for(j=0;j<N;j++)
    sum+=a[i][j];
    }
  return sum;
}
/*列优先累加方法*/
int sumarraycols(int a[M][N])
{
  int i,j,sum=0;
  for(i=0;i<N;i++)
    {
    for(j=0;j<M;j++)
    sum+=a[i][j];
    }
  return sum;
}



关键词: 嵌入式     中的     软件     优化    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]