我有一个 16 位变量data
,即:
volatile uint16_t data;
我需要根据外部传感器上两个 8 位寄存器的内容来填充这个值。这些通过 I2C/TWI 访问。
我的 TWI 例程是 async*,并且具有以下签名:
bool twi_read_register(uint8_t sla, uint8_t reg, uint8_t *data, void (*callback)(void));
reg
这会将on的值读sla
入*data
,然后调用callback()
。
如果我知道uint16_t
在内存中被安排为 ,MSB LSB
那么我可以这样做:
twi_read_register(SLA, REG_MSB, (uint8_t *)&data, NULL);
twi_read_register(SLA, REG_LSB, (uint8_t *)&data + 1, NULL);
但是,我不喜欢在我的代码中加入对字节序的依赖。有没有办法以独立于字节序的方式实现这一目标?
(旁注:我目前的实际解决方法涉及使用结构,即:
typedef struct {
uint8_t msb;
uint8_t lsb;
} SensorReading;
但我很好奇我是否可以用一个简单的方法做到这一点uint16_t
)
编辑
(*我所说的异步是指分阶段,*data
即将在将来的某个时间设置,此时callback
如果请求,将通过函数通知被调用者)