浅谈C语言嵌入式系统编程注意事项

  使用C语言的位操作可以减少除法和取模的运算。在计算机程序中数据的位是可以操作的最小数据单位,,理论上可以用"位运算"来完成所有的运算和操作,因而,灵活的位操作可以有效地提高程序运行的效率。举例如下:/* 方法1 */int i,j;i = 879 / 16;j = 562 % 32;/* 方法2 */int i,j;i = 879 >> 4;j = 562 – (562 >> 5 << 5);

  对于以2的指数次方为"*"、"/"或"%"因子的数学运算,转化为移位运算"<< >>"通常可以提高算法效率。因为乘除运算指令周期通常比移位运算大。  C语言位运算除了可以提高运算效率外,在嵌入式系统的编程中,它的另一个最典型的应用,而且十分广泛地正在被使用着的是位间的与(&)、或(|)、非(~)操作,这跟嵌入式系统的编程特点有很大关系。我们通常要对硬件寄存器进行位设置,譬如,我们通过将AM186ER型80186处理器的中断屏蔽控制寄存器的第低6位设置为0(开中断2),最通用的做法是:

#define INT_I2_MASK 0x0040wTemp = inword(INT_MASK);outword(INT_MASK, wTemp &~INT_I2_MASK);

  而将该位设置为1的做法是:

#define INT_I2_MASK 0x0040wTemp = inword(INT_MASK);outword(INT_MASK, wTemp | INT_I2_MASK);

  判断该位是否为1的做法是:

#define INT_I2_MASK 0x0040wTemp = inword(INT_MASK);if(wTemp & INT_I2_MASK){… /* 该位为1 */}

  上述方法在嵌入式系统的编程中是非常常见的,我们需要牢固掌握。  总结  在性能优化方面永远注意80-20准备,不要优化程序中开销不大的那80%,这是劳而无功的。  宏定义是C语言中实现类似函数功能而又不具函数调用和返回开销的较好方法,但宏在本质上不是函数,因而要防止宏展开后出现不可预料的结果,对宏的定义和使用要慎而处之。很遗憾,标准C至今没有包括C++中inline函数的功能,inline函数兼具无调用开销和安全的优点。  使用寄存器变量、内嵌汇编和活用位操作也是提高程序效率的有效方法。  除了编程上的技巧外,为提高系统的运行效率,我们通常也需要最大可能地利用各种硬件设备自身的特点来减小其运转开销,例如减小中断次数、利用DMA传输方式等。

躲在某一时间想念一段时光的掌纹,

浅谈C语言嵌入式系统编程注意事项

相关文章:

你感兴趣的文章:

标签云: