復刻:キーワードガイダンス第5回「メインループ」
2014-03-22


初出:技術評論社「組込みプレスVol.7」(平成19(2007)年5月7日発売)

●メインループとは

OS のない組込みシステムでは,CPU がリセットされてプログラム実行開始用の
先頭アドレスから動き始めると必ずどこかで永久にループしていなければなりません.
もし,ループするための分岐条件が命令コードにないのであれば,その CPU 上のアドレス空間のデータを順番に命令コードとして実行し,まっすぐに最終アドレスまで実行してしまいます.
ですが,アドレスを表現するレジスタのサイズによっては,最後のアドレスまで実行したら次のアドレスは最初のアドレスを指すことになり,先頭に処理が戻ります.
このような場合も結局はループするということです.
もしくは,そのようなアドレスをアクセスすることが不正な状況ということで,割り込み処理に分岐して,また,元に戻る,ということを繰り返すかもしれません.
これも大きな意味でループを構成しています.

一般的にはこのような不正な状況を検出してのループを構成するのではなく,意図的に大きなループを構築します.

このように,CPU を動作させている意図的な大きなループのことを
「メインループ」と呼びます.

もし,ループを構成しないで,ある時点の処理でCPU が眠ってしまう,という命令があった場合,かつ,復帰するための割り込み処理も存在しないのだとすると,そのシステムは停止してしまいます.
パソコンの利用環境では俗に「ハングアップ」という状態です.
組込みシステムではこのようなハングアップする状態は絶対に避けなければなりません.

一方,パソコンのOS(Operating System)上で実行される一つのアプリケーションプログラムが永久にループするような処理を構成している場合は,OS の実装の仕方によっては全体のパフォーマンスに影響を与えるためにループすることを避けなければなりません.
つまり,「ハングアップ」の状況には以下の二通りのパターンがあります.

(1) アプリケーションで局所的に永久ループを構成して,メインループに戻ってこない.
(2) メインループの途中でCPU 自体が停止して復帰する条件が発生しない.

したがって,システム全体としてはメインループでループしている必要がありますが,個々のアプリケーションプログラムでループしてしまうのは不具合ということになります.

特定の目的がはっきりした組込みシステムの場合は,このようにメインループ以外のアプリケーションで処理を抜けてこない永久ループが存在すると,CPU が他のアプリケーションを実行できなくなり,システムの深刻な欠陥になります.

●アプリケーションタスク

大きなメインループの中である目的をもって処理を実行するプログラムをアプリケーションタスクと呼びます.
OS 上で動作しているときだけ,タスクという呼び方をするわけではありません.

続きを読む

[組込み]
[キーワードガイダンス]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット