IMU ストアと接地センサストアは,1つの MCU に置く。
この MCU は,SBC と I2C でつなぐ。
ここで,2つのストアの実現方法が問題になる。
MCU は,構造上,これらを2つの実行プログラムとして置けるようにはなっていない。
MCU に置ける実行プログラムは,1つだけである。
そこで,つぎを機能とする実行プログラムを導入する:
サブルーチンとして,2つのストアを実現
これを,「ストアの複合体」 ということで,「ストアコンプレクス (store complesx, SC)」 と呼ぶことにする。
SCは,つぎのように位置づく:
移動覚NN 接地覚NN
ストア ストア
│ │
│ │ <SBC> │ │
└───┼───────┼───┘
│ I2C │
┌───┼───────┼───┐
│ │ <MCU> │ │
┌──┼───────┼──┐
│ │ SC │ │
│ IMU 接地セ │
│ ストア ストア │
└─────────────┘
SC は,ストアがテナントとして入居する設備である。
SC がすることは,
・通信インフラの提供
・ストア間のタイムシェアリング
SC のしてはならないことは::
ストアの処理プロセスへの割り込み
- 通信インフラ
通信は,回路 I2C1 と I2C2 の2つを使い,それぞれ
移動覚NNストア ── IMU ストア
接地覚NNストア ── 接地センサストア
の通信にあてる。
特に,I2C に使用するピンは,2組になる。
I2C 通信
- タイムシェアリング
SC は,つぎの構造体:
IMUストアと接地センサストアを,
サブルーチン (内部関数) の形で実現
この構造により,IMUストアと接地センサストアは,「ルーチンの切り替え」により交互に動くものになる。
したがって,厳密に言えば,「ストア」 の条件とした 「マイペースを保持」 からは,外れる。
しかし,実質的には 「マルチタスク」 になる。
なぜか?
ストアの処理ループは,1周の中で 「何もしない」 時間が,長い。
例えば,センサーが 0.001秒周期で計測値を出力するのに対し,ストアは 0.02秒周期でデータを回収する,という具合。
そこで,切り替えのタイミングをつぎのようにする:
IMU ストア
START
│
A1→│
↓
IMU から
データを取得
成形 (→ OUT)
│
│
周期時間経過?
Yes│ │No
↓ ↓
A1へ A2へ
|
|
接地センサ ストア
START
│
A2→│
↓
接地センサから
データを取得
成形 (→ OUT)
│
│
周期時間経過?
Yes│ │No
↓ ↓
A2へ A1へ
|
これは,実質的につぎの 「マルチタスク」 の実現となる:
START
│
A1→│
↓
IMU から
データを取得
成形 (→ OUT)
│
│←B1
周期時間経過?
Yes│ │No
↓ ↓
A1へ B1へ
|
|
START
│
A2→│
↓
接地センサから
データを取得
成形 (→ OUT)
│
│←B2
周期時間経過?
Yes│ │No
↓ ↓
A2へ B2へ
|
|