问题描述:C语言适合编写嵌入式软件,其中就涉及到许多C的底层技术,如移位操作、按位与或非等,还有与硬件平台相关的寄存器操作。以下是通用C语言底层技术学习的一点记录。

   结构中位域:这个功能用于节省存储空间,如一个布尔变量只需要一位即可,没必要声明成int型。除了单片机中的直接按位寻址操作,还可以用结构中的位域来处理,

struct file_data {
unsigned int day: 5; // 前5位用于day成员的存储
unsigned int month: 4; // 紧接day后面4位用于month成员的存储
unsigned int year: 7; // 接着的7个bit用于year成员的存储
};

   位域的类型建议使用unsigned int,signed int类型,使用int会引起二义性,一些编译器将位域的最高位作为符号位,而一些编译器不会。

   通常意义上位域没有地址,C语言不允许将&运算符用于位域。

   指针当作地址用:

BYTE *p;

p = (BYTE *)0x1000;

   volatile:通常用在指向易变内存空间的指针的声明中,防止编译器优化只读取易变空间一次值。