对于以 2 的指数次方为"*"、"/"或"%"因子的数学运算,转化为移位运算"<< >>"
通常可以提高算法效率。因为乘除运算指令周期通常比移位运算大。
C 语言位运算除了可以提高运算效率外,在嵌入式系统的编程中,它的另一个最典型的
应用,而且十分广泛地正在被使用着的是位间的与(&)、或(|)、非(~)操作,这跟嵌入
式系统的编程特点有很大关系。我们通常要对硬件寄存器进行位设置,譬如,我们通过将
AM186ER 型 80186 处理器的中断屏蔽控制寄存器的第低 6 位设置为 0(开中断 2),最
通用的做法是:
#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
outword(INT_MASK, wTemp &~INT_I2_MASK);
而将该位设置为 1 的做法是:
#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
outword(INT_MASK, wTemp | INT_I2_MASK);
判断该位是否为 1 的做法是:
#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
if(wTemp & INT_I2_MASK)
{
… /* 该位为 1 */
}
运用这招需要注意的是,因为 CPU 的不同而产生的问题。比如说,在 PC 上用这招编写的
程序,并在 PC 上调试通过,在移植到一个 16 位机平台上的时候,可能会产生代码隐患。
所以只有在一定技术进阶的基础下才可以使用这招。
第五招:汇编嵌入
在熟悉汇编语言的人眼里,C 语言编写的程序都是垃圾"。这种说法虽然偏激了一些,
但是却有它的道理。汇编语言是效率最高的计算机语言,但是,不可能靠着它来写一个操作
系统吧?所以,为了获得程序的高效率,我们只好采用变通的方法--嵌入汇编,混合编程。