浅析嵌入式C优化技巧

此外,我们还要避免不必要的函数调用,请看下面的代码:

void str_print( char *str ) {int i;for ( i = 0; i < strlen ( str ); i++ ){printf("%c",str[ i ] );} } void str_print1 ( char *str ) {int len;len = strlen ( str );for ( i = 0; i < len; i++ ){printf("%c",str[ i ] );} }

即20%的程序消耗了80%的运行时间,因而我们要改进效率,最主要是考虑改进那20%的代码.

for (j = 0; j < 30; j++) {for (i = 0; i < 10; i++){… …}} // 例子 1-1 for (i = 0; i < 10; i++) {for (j = 0; j < 30; j++){… …}} // 例子 1-2 如例 2-1比例 2-2 多执行了 K-1 次判断,而且由于前者频繁进行判断,打断了循环"流水线"作业,使得编译器不能对循环进行优化处理,降低了效率.

for (i = 0; i < 10000; i++) {if (条件)语句;else语句; } // 例子 2-1 程序简洁但效率低 if (条件) {for (i = 0; i < 10000; i++)语句; } else {for (i = 0; i < 10000; i++)语句; } // 例子 2-2 程序部简洁但效率高

把发生频率高的 case 标号放在最外层的 switch 语句中,发生相对频率相对低的 case 标号放在另外的 switch 语句中.如例 3 中,把发生率高的case 标号放在外层的 switch 语句中,把发生频率低的放在缺省

的(default)内层 switch 语句中.

switch (表达式) {case 值1:语句1: break;case 值2:语句2:break;… …/*把发生频率低的放在内层的switch语句中*/default:switch (表达式){case 值n:语句n: break;case 值m:语句m: break;… …} } 比如:128 / 8 ->> 128 >> 3;

优化算法和数据结构对提高代码的效率有很大的帮助.当然有时候时间效率和空间效率是对立的,此时应分析哪个更重要, 做出适当的折中.另外,在进行优化的时候不要片面的追求紧凑的代码,因为紧凑的代码并不能产生高效率的机器码.

14 使用Memoization,以避免递归重复计算

考虑Fibonacci(斐波那契)问题,Fibonacci问题是可以通过简单的递归方法来解决:

int fib ( n ) {if ( n == 0 || n == 1 ){return 1;}else{return fib( n – 2 ) + fib ( n – 1 );} }

个简单的技术,可以被用在递归,加强计算速度.fibonacci 函数Memoization的代码如下:

int calc_fib ( int n ) {int val[ n ] , i;for ( i = 0; i <=n; i++ ){val[ i ] = -1;// Value of the first n + 1 terms of the fibonacci terms set to -1}val[ 0 ] = 1;// Value of fib ( 0 ) is set to 1val[ 1 ] = 1;// Value of fib ( 1 ) is set to 1return fib( n , val ); }int fib( int n , int* value ) {if ( value[ n ] != -1 ){return value[ n ];// Using memoization}else{value[ n ] = fib( n – 2 , value ) + fib ( n – 1 , value );// Computing the fibonacci term}return value[ n ];// Returning the value } 除了编程上的技巧外,为提高系统的运行效率,我们通常也需要最大可能地利用各种硬件设备自身的特点来减小其运转开销,例如减小中断次数,利用DMA传输方式等.

对于嵌入式系统,C语言在开发速度,软件可靠性以及软件质量等方面都有着明显的优势.本文就嵌入式C语言在系统开发中,如何更好的利用系统资源,对代码进行优化进行了讨论.当然代码优化的方法还有很多,这里只是写出了一部分,希望能为开发人员提供一些帮助,也欢迎大家留言交流.

版权声明:本文为【借你一秒】原创文章,,转载请标明出处。

我们一直在旅行,一直在等待某个人可以成为我们旅途的伴侣,

浅析嵌入式C优化技巧

相关文章:

你感兴趣的文章:

标签云: