如何写出高效的单片机C语言程序代码
结果:数组a
例子4:在大端模式下(8051
方法1:逐位赋值。
typedef
{
UINT8
UINT8
UINT8
UINT8
UINT8
UINT8
UINT8
UINT8
}BYTE2BITS;
BYTE2BITS
Byte2Bits._bit7=0;
Byte2Bits._bit6=0;
Byte2Bits._bit5=1;
Byte2Bits._bit4=1;
Byte2Bits._bit3=1;
Byte2Bits._bit2=1;
Byte2Bits._bit1=0;
Byte2Bits._bit0=0;
UINT8
a|=
a|=
a|=
a|=
a|=
a|=
a|=
a|=
结果:a=0x3C
方法2:强制转换。
typedef
{
UINT8
UINT8
UINT8
UINT8
UINT8
UINT8
UINT8
UINT8
}BYTE2BITS;
BYTE2BITS
Byte2Bits._bit7=0;
Byte2Bits._bit6=0;
Byte2Bits._bit5=1;
Byte2Bits._bit4=1;
Byte2Bits._bit3=1;
Byte2Bits._bit2=1;
Byte2Bits._bit1=0;
Byte2Bits._bit0=0;
UINT8
a
结果:a=0x3C
例子5:在大端模式下(8051
方法1:逐位赋值。
typedef
{
UINT8
UINT8
UINT8
UINT8
UINT8
UINT8
UINT8
UINT8
}BYTE2BITS;
BYTE2BITS
UINT8
Byte2Bits._bit7=a&0x80;
Byte2Bits._bit6=a&0x40;
Byte2Bits._bit5=a&0x20;
Byte2Bits._bit4=a&0x10;
Byte2Bits._bit3=a&0x08;
Byte2Bits._bit2=a&0x04;
Byte2Bits._bit1=a&0x02;
Byte2Bits._bit0=a&0x01;
方法2:强制转换。
typedef
{
UINT8
UINT8
UINT8
UINT8
UINT8
UINT8
UINT8
UINT8
}BYTE2BITS;
BYTE2BITS
UINT8
Byte2Bits=
12.
使用全局变量比函数传递参数更加有效率。这样做去除了函数调用参数入栈和函数完成后参数出栈所
需要的时间。然而决定使用全局变量会影响程序的模块化和重入,故要慎重使用。
13.
switch
发现匹配时,就跳转到满足条件的语句执行。使用时需要注意。每一个由机器语言实现的测试和跳转仅仅
是为了决定下一步要做什么,就把宝贵的处理器时间耗尽。为了提高速度,没法把具体的情况按照它们发
生的相对频率排序。换句话说,把最可能发生的情况放在第一位,最不可能的情况放在最后。
14.
当switch
套switch
层,发生相对频率相对低的case
低的情况放在缺省的case
UINT8
void
void
void
void
……………
void
switch(ucCurTask)
{
case
case
case
case
………………………
case
default:break;
}
可以改为
UINT8
void
void
void
void
……………
void
switch(ucCurTask)
{
case
case
default:
switch(ucCurTask)
{
case
case
………………………
case
default:break;
}
Break;
}
由于switch
UINT8
void
void
void
void
……………
void
if
else
else
{
if
else
………………
else
}
15.
当switch
可以运用函数指针来取代switch
和网络实验代码。
UINT8
void
void
void
void
……………
void
switch(ucCurTask)
{
case
case
case
case
………………………
case
default:break;
}
可以改为
UINT8
void
void
void
void
……………
void
void
调用方法1:(*szTaskTbl[ucCurTask])();
调用方法2:
16.
循环在编程中经常用到的,往往会出现循环嵌套。现在就已for
UINT8
for(i=0;i<255;i++)
{
for(j=0;j<25;j++)
{
………………
}
}
较大的循环嵌套较小的循环编译器会浪费更加多的时间,推荐的做法就是较小的循环嵌套较大的循环。
UINT8
for(j=0;j<25;j++)
{
for(i=0;i<255;i++)
{
………………
}
}
17.
在C++中,关键字inline
码替换所有对于指出的函数的调用。这样做在两个方面快于函数调用。这样做在两个方面快于函数调用:
第一,省去了调用指令需要的执行时间;第二,省去了传递变元和传递过程需要的时间。但是使用这种方
法在优化程序速度的同时,程序长度变大了,因此需要更多的ROM。使用这种优化在inline
用并且只包含几行代码的时候是最有效的。
如果编译器允许在C
足够大,就可以考虑加上inline
18.
很多编译器都具有偏向于代码执行速度上的优化、代码占用空闲太小的优化。例如Keil
译时可以选择偏向于代码执行速度上的优化(Favor
Size)。还有其他基于GCC
-O2
19.
汇编语言是效率最高的计算机语言,在一般项目开发当中一般都采用C
之后会影响平台的移植性和可读性,不同平台的汇编指令是不兼容的。但是对于一些执着的程序员要求程
序获得极致的运行的效率,他们都在C
注意:如果想嵌入汇编,一定要对汇编有深刻的了解。不到万不得已的情况,不要使用嵌入汇编。
评论