私は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));
regonの値を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要求された場合に関数を介して呼び出し先に通知されます)