私は16ビット変数を持っていますdata
、すなわち:
volatile uint16_t data;
外部センサーの 2 つの 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
)
編集
(* async とは分割フェーズを意味します。つまり*data
、将来のある時点で設定され、その時点で、callback
要求された場合に関数を介して呼び出し先に通知されます)