ある程度規模が大きい「組込み制御ソフトウェア」では、複数の異なった種類のデバイスを通じて、データを入力することでしょう。アナログセンサーからの信号、ディスクリートデジタル信号、シリアル通信、バス通信、ユーザインタフェース等など、複数のデバイスから入力したデータを、組み合わせて計算し、結果を出力する事になります。
いくつかの組込みプログラミングの教科書や、簡単なサンプルプログラムでは、入力割込みを使って、デバイスからデータを入力し、計算する方法が紹介されています。だだし、目的としている、製品出荷前テストをできるだけ短期間で終わらせるためには、工夫が必要です。
まず、外部から入力したデータは、モニターすべき重要な情報につき、前章で説明した通りグローバル変数に取込みます。それらデータをモニターする時は、計測器などで信号をモニターする場合と同様に、サンプリングタイミング(モニター周期)を設定して値を評価できる様にします。
さらに、入力データをグローバル変数に設定するのは、それらを使った制御処理の開始前に終わらせておくことが必要です。また、入力データを設定したグローバル変数は、それらを使った計算によって求めた、出力値を入れたグローバル変数をモニターするタイミングまで、値を保持しておく事が重要です。これは、当たり前のように聞こえますが、いつくかの組み込みプログラミングの教科書や、簡単なサンプルプログラムでは、入力割込みを使って、デバイスからデータを取り込みます。割込み処理の作り方によっては、入力データを設定したグローバル変数が、予期しないタイミングで勝手に更新されてしまうことがあります。そのような意図しないタイミングで、モニターしたい変数が更新されないように、ソフトウェアを設計する必要があります。具体的には、「入力処理」→「計算処理」→「出力処理」という順番を守り、入力割込み処理が取り込んだデータは、一旦「入力処理」の実行タイミングで、”そろえて”から、「計算処理」を開始します。「計算処理」や「出力処理」の途中で、入力割り込みが発生しても、モニターする入力データを書き換えてはいけません。入力割込みで取り込んだデータは、「入力処理」を実行するタイミングで取り出します。一時的にデータを蓄えるためのバッファ用のメモリを消費してしまうことになるでしょうが、ある程度規模の大きく複雑な「組込み制御ソフトウェア」の開発を対象としているので、そこは受け入れることが可能と考えます。
「組込み制御ソフトウェア」では、複数の制御周期を持つ場合もあるでしょう。例えば、アナログのセンサー入力は速い制御周期で処理する一方で、バス経由の信号、GPSの信号などは、遅い制御周期で処理する必要がある場合、遅い方の制御周期は、速い制御周期の分周(数回に1回)で実行できる周期とすることで、お互いにデータを渡すタイミングをそろえることができ、値のモニターも簡単になります。
このように、モニターする変数の更新タイミングをそろえることで、ソフトウェア設計者が、観測したい変数の更新タイミングを管理できます。これは、「組込み制御ソフトウェア」の動きを、明確に管理し、把握できることを意味します。
ここでも、製品出荷前のテストで発生する「不具合」を、出来るだけ短期間で発見することを目的で、重要なグローバル変数を、サンプリングタイミングでモニターできるように、ソフトウェアの設計を決めています。

