これは実際には質問ではありません。パッチ付きのバグレポートです。
ジャイロが不要なときに FXAS21002_Idle() を呼び出すと、割り込みがスタックしたままになる可能性があることに気付きました。FXAS21002_Idle() は、センサーを準備モード (アクティブではなく) に設定し、ドライバーに初期化されていないことを示すフラグを設定します。これは大丈夫です。ただし、FIFO にはまだデータが残っている可能性があり、センサからの割り込みがアサートされたままになります (割り込みを使用している場合)。センサーは初期化されていないとマークされているため、FIFO を空にして割り込みをクリアするための FXAS21002_Read() の呼び出しは、何も実行されずに返されます。これにより、割り込みがハングしたままになります。
修正方法は、センサーを準備モードにした後、isInitialized を 0 に設定する前に、FXAS21002_Idle() で FXAS21002_Read() を呼び出すことだと考えます。isInitialized がまだ true であるため、FXAS21002_Read() は成功し、FIFO を空にして割り込みをクリアします。センサは現在準備モードになっているため、FIFO でこれ以上のデータは収集されません。
差分は次のようになります。FIFO ウォーターマーク割り込みを有効にするためにドライバーに他の変更を加えたため、ライン オフセットは異なります。より完全な解決策は、FXAS21002_Read() の戻りステータスを確認することです。
int8_t FXAS21002_Idle(構造体物理センサー *センサー、SensorFusionGlobals *sfg)
int32_t 状態;
センサが初期化されている場合(F_USING_GYRO) {
ステータス = センサ_I2C_Write(sensor->bus_driver, &sensor->deviceInfo, sensor->addr, FXAS21002_IDLE);
+ /*
+ * センサーをマークする前にFIFO内のデータをクリアしてください。
+ * 初期化されていません。
+ */
+ FXAS21002_Read(センサ、sfg);
センサ->isInitialized = 0;
sfg->Gyro.isEnabled = false;
} それ以外 {