第2回は、組み込みシステムのハードウェア設計について主要な留意点について説明しました。第3回はソフトウェア設計方法について、その手順と各段階における留意点について説明していきます。ここでは小規模マイコンシステムに的を絞ってソフトウェア設計の要点を説明します。まず、このようなシステムのソフトウェア開発の手順は一般的に図1のようなステップで進めますが、それぞれの段階で留意する項目を示しています。
図1 ソフトウェア開発フロー図
1)要件定義、ハードウェア設計の確認の段階の留意点
組み込みシステムのソフトウェア開発での留意点は、一般的なアプリケーション開発と異なり、ハードウェアとの密接な連携や制約が多いので、要件定義やハードウェア設計の確認の段階で、十分な擦り合わせが必要です。その中での留意点は次のようになります。
① リアルタイム性の確保
組み込みシステムでは、応答時間や周期が短時間で重要な要素となることがほとんどです。つまりリアルタイム性が必須の要件となります。 想定したソフトウェア構成でそのリアルタイム性が確保可能かどうか、設計段階で見積もっておくことが最重要な課題です。
このときソフトウェアの実行速度だけでなく、接続される入出力デバイスの応答速度も考慮した見積もりをすることが必要です。それらのタイミング保証や処理の優先度により実行速度が制限されることも多く、ハードウェアの知識が必須となります。
このようなリアルタイム性の確保は、割り込みを使うことで解決することが多く、応答速度や待ち時間の有効活用などが可能となります。ソフトウェアの実行時間が制限要素となる場合には、より高性能なマイコンへグレードアップすることが必要となります。
比較的時間がかかる複数の機能を並列処理する必要がある場合には、RTOSを採用することも検討することになります。RTOSを使えば図-2のようにタイムシェアリング機能により複数の機能を同時並行処理することができます。
図2 RTOS によるタイムシェアリングで複数機能を並行実行
② 使う内蔵周辺モジュールの確認
最近のマイコンは内蔵周辺モジュールの機能が大幅にアップしていますから、これらをいかにうまく使うかがポイントになります。うまく使うことができれば、プログラム負荷を減らすことができますし、リアルタイム性の確保にも有効となります。したがって、接続するハードウェアを動かすために必要な内蔵周辺モジュールの設定やタイミングなどを細部にわたり詰めておく必要があります。
③ 電源オンオフ時の対策
マイコンで最も多いトラブルは電源に絡むものです。電源は常に安定とは限りません。頻繁にオンオフを繰り返したり、瞬時停電があり得る場合には、プログラムの異常動作などが発生しないように、十分対策を考慮しておく必要があります。
バッテリ動作の場合には電圧降下への対策や、電池交換時の処理も考慮しておく必要があります。いずれの場合もプログラムだけでは対策は難しい場合もありますから、ハードウェアによる対策も含めて検討が必要です。
④ 保守性の検討
組み込みシステムは長期運用されることが多いですから、機能変更やバグ対策などの際に必要となるソフトウェア更新方法も設計時に考慮しておきます。
2)ソフトウェア設計時の留意点
ソフトウェア設計では、機能や処理単位でモジュール化することが基本となりますが、その際の切り出し方とモジュールの名前の付け方が重要な設計項目となります。名前付けをうまくすれば、そのモジュールが何を実行するかが名前だけで分かりますから、全体の流れが分かりやすくなり、保守性も向上します。
このモジュール化はウォークスルーなど複数のメンバーで検討することが、最適な分け方をする方法として有効です。ウォークスルーは、複数メンバーで共同開発する場合の互いの分担内容の確認にも有効となります。
3)開発環境の構築時の留意点
開発言語の選択は開発効率に大きく影響しますから、重要な要素です。しかし、過去の資産や、マイコンメーカにより特定されたり、その他の制約条件から言語を特定されることもあり得ます。いずれにしても言語が決まれば、開発環境の構築をすることになりますが、その際に留意することは次のようになります。
① バージョン管理
開発環境を検討する中で重要なことは、バージョン管理を十分考慮することです。バージョン管理のための専用ツールを使ったり、使用する開発環境に組み込まれているものを使ったりします。特に複数メンバーで共同開発する場合にはバージョン管理は必須の作業です。これで大幅に手戻り作業を減らすことにつながります。
② デバッグ方法
プログラム開発そのものを効率よくするにはデバッグ方法が重要です。デバッグ用ツールを用意することはもちろんですが、簡易な方法としてLEDやシリアルモニタなども有効です。しかしこれらはあらかじめハードウェアとして用意しておく必要がありますから、ハードウェア設計とのすり合わせが必要です。
4)プログラム実装時の留意点
プログラム実装は決められた仕様通りに作成することが基本ですが、ソフトウェアの暴走や異常の検出方法と、そのリカバリ方法、ログ記録方法などを設計時から考慮しておくことが重要です。UART、SPI、I2C、BLE、Wi-Fiなどの通信を使う場合、それらが中断した場合の再接続処理や、タイムアウト処理を組み込むことでシステムの安定性を確保することができます。これらの高信頼化対策はコストに直結しますから、システムが要求される信頼度に合わせて必要十分な範囲で設計することが重要です。
5)評価、安定化の段階の留意点
評価段階では、機能の確認だけでなく、応答時間や処理時間の確認も必要ですから、ソフトウェア担当といえどもオシロスコープなどの基本的な測定器は使えることが必須です。これを人任せにするのは効率がわるいだけでなく、本当に必要なデータを得ることも難しくなります。プログラム実行時の異常を検出して再起動させるにはウォッチドッグタイマを使いますが、この検出方法にも注意が必要で、使い方を間違うと全く検出ができず役に立たなくなってしまうこともあります。最もトラブルが多い電源に絡むテストは、短時間のオンオフの繰り返しや、電圧変動のテストを十分に行います。
以上がマイコンのソフトウェア開発での留意点です。次回からはマイコンのインターフェースについて解説していきます。
PDF 資料請求
特別連載_MCU_3:ソフトウェア設計方法
著者プロフィール
後閑 哲也 Tetsuya Gokan
経歴 |
1971年 東北大学卒業後 大手通信機メーカにて各種の制御装置を開発 2003年 有限会社マイクロチップ・デザインラボ設立 |
---|---|
現在の活動 |
|
書籍 (技術評論社) |
|
特別連載「マイコン(MCU)システム開発入門編」リンク
- 第1回: 組み込みシステムのシステム設計とは
- 第2回: ハードウェア設計方法
- 第3回:ソフトウェア設計方法
- 第4回:マイコンのハードウェア設計留意点(10月公開予定)
- 第5回:デジタル入出力インターフェースの設計留意点(11月公開予定)
- 第6回:アナログ入出力インターフェースの設計留意点(12月公開予定)
- 第7回:シリアル通信概要と UART を使う場合の留意点(1月公開予定)