II-25-2. 組み込みアプリケーション開発における留意点

スタートアップルーチンの実装や例外処理、安全化設計、ROM化において気をつけるべき点、低消費電力モード、Watch Dog Timer (WDT)の利用など、組み込みアプリケーション開発において留意すべき様々な事項を紹介する。

【学習の要点】

* スタートアップルーチンはスタックの確保に注意する。

* 例外処理はプログラムが肥大化することがある。

* ROM化は手間がかかるので、ROMライタを利用する前に十分にテストをする。

* 安全化設計では、バグが起きても被害を最小にするように設計する。

* ウォッチドッグタイマは異常が起きていないかを監視する目的で使用されるタイマで、暴走や異常処理を検知する。

図II-25-2. スタック領域確保不十分によるリークとウォッチドッグタイマ

 

【解説】

1) スタートアップルーチン

* コンピュータは電源が投入される、またリセットをされたときにブートとよばれる起動動作を行う。ことのときに最初に呼び出され、実行されるプログラムがスタートアップルーチンである。

* スタートアップルーチンはROMにあり、起動されると以下の動作を順に行う。

- CPUのレジスタを設定し、ハードウェア・ソフトウェアを初期化する。

- ソフトウェアを初期化し、プログラムが動作するために必要なヒープとスタックメモリを設定した後に、割り込み関連の設定を行う。

- OSが存在する場合は、まずOSを起動する。OSが存在しない場合はアプリケーションのメインルーチンにジャンプする。

* スタートアップルーチンの実装において気をつけるべきことは、スタックメモリの設定である。スタック領域の確保が十分ではないと、ヒープがスタックを浸食しデータを破壊するという事態になる。

2) 例外処理

* 一般的に例外処理をもつ言語系は、例外処理とデストラクタが一組になるように実装されている。これは、コンパイラにおいて生成されるコードが、例外処理が送出されるタイミングでデストラクタを実行するようになっていることである。このコードがプログラムの肥大化を招く事態になる。

* また例外が適切にコーディングされない場合、メモリインスタンスのリークが起きる場合がある。これを例外安全性の破綻という。

3) ROM化

* 組み込みにおいては、スタートアップルーチンなど電源投入により起動するプログラムはROM化する必要がある。このときにROMライタを利用するが、この作業は手間がかかるので、手戻りがないように十分にテストを行ってからROM化をする必要がある。

4) 安全化設計

* 特にミッションクリティカルな場面で組み込みシステムが使用される場合、バグが発生すると大きな事故や損害を招く事態になる可能性がある。これを防ぐ設計手法を安全化設計という。

* 安全化設計の基本は、アプリケーションのバグが発生してもシステム全体として、被害が最小になるようにとどめることである。これを実現するためには次の指針が必要である。

- リスクの軽重により、モジュールを分離する。

- シンプルな設計を採用し、バグの混入、例外の発生を抑える。

5) ウォッチドッグタイマ

* ウォッチドッグタイマはシステムから独立して暴走や異常処理が発生していないかを監視し検知する目的で使用されるタイマである。

* ウォッチドッグタイマの内部にはカウンタを持っていて、周期的にカウンタをカウントダウンすることで、カウンタ値が0になったらタイマ割り込みを発生させる。プログラムやOSは周期的にウォッチドッグタイマのカウンタを初期化することで、正常であることをウォッチドッグタイマに伝達する。正常ならば、カウンタが初期化し続けられ、タイマ割り込みが発生しないこということになる。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。

フォーラム会員企業専用

記事配信

コンテンツ配信

ユーザログイン