BMP280温度センサー・その4(I2C通信スレッド)
簡易目次 実際のプログラムに入る前にプロジェクトフォルダーをGitHubに作成しました。 GitHubプロジェクトフォルダ ブログにまとめていないだけでプログラム自体はそれなりに進んでいます。その都度参照していこうと思います。 まずはI2Cとの通信の実装から行います。I2Cとの通信はI2Cマスター毎に動作する専用のスレッドとスレッドに関連付けられたクラス内で行っていきます。 I2Cとの通信を受け持つクラスとして「SPI2C::CSPI2CManager」と言うクラスを実装します。クラスのインスタンスは別スレッド内で実行され、クラス内にはミューテックスで保護されたリストがあり、そのリストに並んでいるI2Cデバイスアクセス用のクラスをFIFOでリストからチェックアウトして、I2Cとの通信を行うことにより様々なデバイスとのアクセスを一元的に行っていくことにします。説明だけでは分かりにくいのでソースを提示します。 CSPI2CManagerクラス(抜粋) namespace SPI2C { class CSPI2CManager { public: static void * ThreadProc( void * pVoidParameter ); CSPI2CManager(const char * pcszI2CName); virtual ~CSPI2CManager(); void AddDeviceAccess( class CSPI2CDeviceAccessBase * pDevice ); inline void StopThread() { this->m_bStopLoop = true; } protected: void ReleaseAllDevice(); class CSPI2CDeviceAccessBase * CheckoutAccess(); class CSPI2CDeviceAccessBase * m_pFirstAccess; class CSPI2CDeviceAccessBase * m_pLastAccess; bool CommunicationLoop(); bool WriteI2C( uint8_t ui8DeviceAddress, CSPI2CD