typedef union
{
struct
{
uint8_t lowByte;
uint8_t highByte;
} refined;
uint16_t deviceId;
} bk_reg00;
/**
* @ingroup GA01
* [url=home.php?mod=space&uid=247401]@brief[/url] Chip ID
*
*/
typedef union
{
struct
{
uint8_t lowByte;
uint8_t highByte;
} refined;
uint16_t chipId;
} bk_reg01;
uint16_t shadowRegisters[2]; //!< shadow registers 0x00 to 0x01
// Device registers map - References to the shadow registers
bk_reg00 *reg00 = (bk_reg00 *)&shadowRegisters[REG00]; // 0
bk_reg01 *reg01 = (bk_reg01 *)&shadowRegisters[REG01]; // 1
创建2个联合体变量类型,里面通过结构体存在一个16位数据的不同位段变量,比如高字节和低字节。
这样既可以一次性操作这个16位的变量,还可以分别操作高8位和低8位。
然后定义一个数组用于存储两个变量类型对应的变量实体。
通过取地址符号&取出数组成员的实际地址,并通过强制转换转换为上面两个变量类型的地址类型。
并赋值给两个对应变量类型的指针。即指针里装有这两个实体变量的地址。
后面就可以通过reg00->deviceId 直接操作,也可通过reg00->refined.lowByte来操作低8位。
|