「組み込み」ならではの基礎知識 ――スタートアップ・ルーチンからハードウェアまで

セサミアン3人組

tag: 組み込み

技術解説 2003年5月14日

5 時間の制御問題(同期と非同期呼び出し)

 組み込みソフトウェアで目的の機能を実現しようとするときに必要なのが,時間にかかわる制御です.そして,時間にかかわる問題をじょうずに設計するときに役立つのが「非同期呼び出し」という技術です.

 実は,へたな設計でもよいという場合には,この技術は不要です.読者の皆さんにはぜひじょうずな設計技術を身に付けていただきたいので,ここで説明します.

 組み込みシステムでは,(コンピュータから見て)外の世界のようすや状態の変化に応じて次の動作を決める場面が数多く存在します.例えば,家庭用のエアコンは,100Vが通電されていてもふだんは何もしません.室温を表示する以外はひたすら待機しています.運転ボタンが押されて初めて,冷暖房の動作を始めます.

 このように,組み込みシステムでは「外界の変化が生じるまで待機する」という動作が必要になります.同期/非同期呼び出しは,その動作を実装する前段階の設計概念です.

●同期呼び出し

 時間にかかわる説明の前に,時間にかかわらない設計を考えてみましょう.例えば,パソコンなどで数学的な計算問題を処理する場合,通常,計算に必要な最初のステップのデータがそろってからプログラムを起動します.この場合,起動後にあらためて何かの変化を待つ(変化が起きるまで何もしない)という状況を考慮する必要はないわけです.

 計算の式が複雑であったり,計算のステップで同じ式を何ヵ所かで適用する場合,C言語では同じ式を関数としてまとめ,プログラム中からその関数を呼び出すように記述します.「1.プログラムはどのように動くのか」のところで出てきた階乗計算などが良い例です.

 以下に,階乗計算の関数factを何度も呼び出す関数fooの例を示します.

  long foo(a,b){ 
   ... 
   x=fact(a); 
   y=fact(b); 
   z=x/y; 
   return z; 
  }

 この例では,xに代入する階乗計算値はfact(a)が呼び出されると同時に計算されます.この計算が後回しにされることはC言語の仕様からいってありえません.すなわち,zを求める計算であるx/yを実行する時点で,xとyの値は確定しているわけです.これを構造化設計手法で図示すると,図5-1のようになります.

 このように,関数factを呼び出す式を実行すると同時に関数factが実行されるという約束にある呼び出しを,設計上の用語として「同期呼び出し」といいます.

f05_01.gif
〔図5-1〕同期呼び出し(構造化設計手法で示した)
同期呼び出しは,親の機能から子の機能への実線矢印で表現する.呼び出しに伴うパラメータは,○記号に矢印を小さく付けて名まえとともに示す(これをカップルと呼ぶ).戻り値も同じようにカップルで示される.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日