

プリエンプティブマルチタスクなRTOS・C言語を使用して、  
センサの値を通信で他のマイコンボードに送信する機能を作っています。

用語

・センサタスク・・・センサ値を取得しセンサモデルにセット、センサドライバが実行される。  
・センサモデル・・・センサ値を保持する(排他制御有り)  
・通信タスク・・・センサ値を通信で送信、通信アプリが実行される。

センサタスク(タスク優先度高)で1ms周期でセンサ値をAD変換し、  
センサモデルにセンサ値をセットします。  
一方で、通信タスク(タスク優先度低)では10ms周期でセンサモデルからセンサ値を取得し、  
通信で他のボードへセンサ値を送信します。

センサモデルのデータは、  
データのセット、取得時にバイナリセマフォで排他制御を行っています。

センサタスクと通信タスクのタスク優先度の間には、  
他にも処理が重いタスクが複数あります。

問題：

通信タスクでセンサモデルからセンサ値を取得する際にセマフォを取得すると、  
センサタスクがセンサモデルにセンサ値をセットする際に、セマフォで待たされ、  
センサ値のAD変換の1ms周期が満たせなくなります。

この問題は、どのように回避すればいいのでしょうか？

センサデータのサイズがかなり大きいため、  
ダブルバッファ等を使わず、RAMの使用量を最小限に抑えたいです。

よろしくお願いします。


CC BY-SA 4.0
2021-09-16T14:36:55.063
82542
2021-09-16T14:36:55.063
13551
question
c
アプリ・ドライバ間のセマフォでの排他制御による処理遅延回避方法