[HWRelated]C语言中的底层技术

    问题描述: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:通常用在指向易变内存空间的指针的声明中,防止编译器优化只读取易变空间一次值。

你可能感兴趣的:(c,地址,位域)