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

セサミアン3人組

tag: 組み込み

技術解説 2003年5月14日

●非同期呼び出し

 「非同期呼び出し」とは,ある実行場面で特定の関数fooが呼び出されても,その実際の実行は別のタイミングで行われる可能性がある場合に使う表現です.つまり,呼び出しの時期と実行の時期が同期していないので,非同期呼び出しと言うのです.

 冒頭に挙げたエアコンの例で,ボタンを押されたという外部イベントが生じて初めて暖房運転する関数(例えばheating())が実行されるようにしたいという場合がこれにあたります(図5-2)

 このように説明すると,C言語をご存じの皆さんは「ボタンの押下を検出する入力レジスタを繰り返しチェックして,押されたとわかってからheating()を呼べばよいのだから,非同期呼び出しは不要だ」と思われるかもしれません.また,「割り込み関数の宣言を使うことと何が違うのかわからない」という方もいらっしゃることでしょう.

 ここでおもしろいのは,実務上,このボタン押下に対処するには,

a)ポーリングを繰り返し実行してボタン押下を検出する
b)ボタン押下をハードウェア割り込みとして検出する
c)OSやJavaVMにボタン・デバイスの変化を検出させる

など,いくつもの手法が存在することです.そして,その手法のいずれを使うかは,要求されるボタン押下の検知速度や検知の信頼性,採用した言語,開発容易性などの複数の要因で決まります(たかがボタン,されどボタン).ちなみに,上記の3種類の実装方法のうち,a)は同期呼び出し,b)は完全な非同期呼び出し,c)は不明(OSやJavaVMの実装によって異なる),というのが現実です.

 ところが,設計実務をこなしているとき,こうした検知のしくみを細かく検討する前に考えるべきことはまだたくさんあります.例えば,押下を検出した直後に何をするべきかは重大な問題です.吸気口が詰まっているのに予熱の処理を行ってしまったら火事のもとです.検出の方法をあれこれ考えるより先に,予熱の準備手続きとして,通気性チェックなど(仕様書に書いてある方法)を実行する関数を呼び出しておくべきでしょう.

f05_02.gif
〔図5-2〕暖房運転(heating)は準備が整った時点で行いたい
accept_command関数は,その行に制御が移ると同時に実行される(同期呼び出し).一方,heating関数は,冒頭では割り込みによる呼び出しを許可しておくだけで,実際には準備が整った後に呼び出される(非同期呼び出し).

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! 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日