Wizioのプラットホームでは、リアルタイムOSもサポートされているので、FreeRTOS+POSIXの組み合わせでリアルタイムOSの状況を確認しました。動作確認サンプルとしては、動作状況が判りやすいので、複数の小形LCDを並列表示させる事にしました。具体的には次の4つの処理を同時に実行させました。
1.I2Cの「OLED 0.96"」の表示処理
2.SPI の「Nokia 5110」 LCDの表示処理
3.SPIの「ST7735 1.44"」LCDの表示処理
4.基板上のLEDのブリンク処理
回路図
今回は、単に並列処理の様子を見るだけなので、複数のスレッドで共有するものが無いように2つのSPI方式のLCDには別々のものが利用できる様に割り当てました。(2つのSPI方式では利用している関数内で共有する部分が有る様で、最終的には Nokia のLCDの方はソフトSPIで対応しました。)
動作デモプログラム
各LCDには過去に作った表示デモを実行させ、基板上のLEDは1秒毎に点灯と消灯を繰り返す様にしました。
動作状態は次のYouTubeから見られる様にしました。
テスト結果
並列処理に関しては、最終的には次の様な処理で対応しました。
1.I2C のOLEDはハードウェアポートでスレッド処理
2.Nokia のLCDはソフトウェアポートでスレッド処理
3.ST7735 のLCDはハードウェアポートでメインループ処理
4.LEDブリンクはスレッド処理
2つのSPI方式のLCDに関しては次の様な状況でした。
1.2つのSPIを別々のポートで利用しても、両方とのハードウェアで対応すると動作しない。
2.2つのSPIの片側をソフトウェアにしても、両方ともスレッド処理にすると、ソフトウェア側の動作が止まってしまう。
これらの原因としては、2つのSPIで共有している部分が競合している事が想定されますが、今回の目的がマルチスレッドの様子を見る事でしたので、2つのSPIをスレッドで利用する事が有る時に再度対応策を検討する事にしました。
コード等のダウンロード先
作ったコード等は次のURLからダウンロードできます。
<コード> : https://drive.google.com/file/d/10vdKJdF7f_uW2sxWf4cTHCTZ5vUObgT2/view?usp=sharing
<参考資料> : https://drive.google.com/drive/folders/1ZtgqstOp_YG8u2bUlenPdwt6Y6y-IqGk?usp=sharing