組み込みマイコンのプログラムを開発しているときにいつも陥る罠・・・、についてちょっとご紹介します。リアルタイムOSが搭載できるような規模の場合は、OSに各種タスク管理を任せることができるのですが、全容量が256kとか、それ以下の組み込みマイコンのプログラムなどは、OS無しで作成していくことが多いです。

 

このようなとき、いつもバグってしまうのが、複数の割込み処理です。つまり、割込みのネスト、ですね。割込みも、決まったタイミングで発生することが分かっていたり、マンマシンインターフェース、たとえばキースイッチなどは、比較的制御が楽なのですが、通信関係はなかなかそうはうまくいきません。ホストPCからの通信による割込みや、機器内部の通信に関連する割込みなどは、発生するタイミングが不規則なことが多いので、割込みのネスティングが必ず発生します。もちろん、割込みコントローラの優先順位設定などを利用しますが、それだけでは回避できないネスティングも出てきます。

 

エンジ系業務においては、ARM系のSTM32シリーズのプロセッサを使用することが多くなっています。しかも、通信系には複数シリアル通信(USART)チャネルを多用しているため、プログラムの実行速度と、シリアルでの通信レートとの速度差によって、タイミング制御がうまく図れないことが多いです。

 

力づくでソフトウエアを書く私(笑)は、この、時間軸上のタイミング制御がいつもパズルを解く作業になっています。「このときあれが、こう発生して、でもまだ、こっちが終了してなくて・・・」みたいなお念仏を、一人ぶつぶつ唱える日々なのです。

 

現実逃避、でした。