1. 关于while(1)与for(;;):
在功能上,都是实现死循环,但是代码效率是否完全一样,取决于编译器。有些编译器编译出来的代码,for(;;)的效率比while(1)高,有些编译器编译出来的则完全一样。考虑代码的移植性和效率,建议使用for(;;)循环。
2. 别把“位域”的概念和“bit"数据数据类型搞混了:
在C语言的标准中,为了节省内存空间,有“位域”的数据结构,但是却没有bit数据类型。bit数据类型是嵌入式开发工具中的编译器扩展的一种数据类型,目的也是为了节省内存空间(bit数据类型只占1位)。这类数据类型除bit外,还有sbit,sfr,sfr16。
3. 别忘记给循环变量加关键字volatile:
如果开启了编译器优化选项,嵌入式开发环境的编译器通常会把循环变量优化导致错误,这时就需要在循环变量前加关键字volatile,以告诉编译器不要对此变量进行优化。
当读取一个变量时,为了提高读取速度,编译器进行优化时通常会先把变量读取到一个寄存器中,以后再读取变量值时,就直接从寄存器中读取。变量如果加了voletile修饰,则会从内存中重新装载内容,而不是直接从寄存器中拷贝内容。
还需要注意的是,这里的循环变量,不只是for循环,还有while循环,比如:
volatile unsigned short i;
for(i=0;i<1000;i++)
{
......
}
volatile unsigned short j = 2000;
while(j--)
{
......
}
复制代码
480

被折叠的 条评论
为什么被折叠?



