MPLAB X IDEのSCLでデバッグ(3)

PICマイコンの開発環境であるMPLAB X IDEに備わっているデバッグ用のプログラミング言語Stimulus Control Languageを使って、自作のPICプログラムをデバッグしてみる記録です。今回はプロセスとwaitについて調べてみます。

プロセス

デバッグ用のコードはprocessブロックに記述する。僕の趣味で、公式ユーザーズガイドとインデントの付け方が違っています。なんかSCLは懐かしのPascal言語っぽいので、Pascal流のインデント方式に統一しています。

testbenchブロックの中には、1個以上のprocessブロックを含む。2個以上のプロセスを記述する場合は並べて書けばよい。こんな感じ。processを1個も含まないからのtestbenchも一応許されるみたい。

2つめのprocessブロックは1つ目のprocessブロックの実行が終了し次第実行されるようだ。ちなみにこのプロセスの動作はマニュアルに書いてないので、推測が入っています。

プロセスには名前を付けることができる。名前は任意で良いがtestbench中で重複してはならない。現在のバージョンではプロセス名自体に意味を持たないが、将来のバージョンで何かに使われるかもしれないらしい。
プロセス名の書き方は2種類ある。

またはこれ。プロセス名の後ろに”is”が付くか付かないかの違い。僕の趣味的には前者の方が好きかな。

上の例では「プロセス名」と日本語で書いているが、実際に日本語が使えるかは今のところ不明。半角英文字だけにしておくのが無難かもしれない。

wait

ここからprocessブロックの中で記述する具体的な文が出てきます。まず命令実行を一時停止するwait文について。
SCLが普通の言語と違うのは、ループ構造を指定しなくてもprocessブロック内の文を上から順に実行し、一番下の文を実行するとまた先頭に戻って繰り返すということです。

この例では、statement1→statement2→statement3と実行すると自動的に先頭に戻って再びstatement1から実行することになります。

そこでprocessブロックの実行を一時停止するか終了するにはwait文を実行する必要があります。もしprocessブロック中にwait文が無いとprocessブロックの実行が止まりません。これはデバッガがハングアップすることを意味ます。
ここでデバッガ内部の動作を見てみます。

デバッガはユーザプログラムを1命令ずつ実行します。そして1目入れ実行するごとに、SCLのプロセスを実行するのですが、もしSCLプロセスが止まらなければ永遠に(2-3)の処理を続けてしまうため、次のユーザ命令を実行することができなくなります。そこでprocess中にwait文を挿入することによって、(2-3)から抜け出すタイミングを作ることができるのです。
予期しないハングアップを防ぐため、IDEがSCLを読み込む際にprocessブロック内のwait文有無をチェックし、もし無いとエラーとなるようになっています。

さて、wait文には4つの形式とその組み合わせの形式があります。

簡素Sait (Unadorned Wait)

プロセスを終了させます(現在のprocessブロックから抜けるということ)。

感度Wait (Sensitivity Wait)

値が変化するまで一時停止します。

条件Wait (COndition Wait)

真偽値が真になるまで一時停止します。

タイムアウトWait (Timeout Wait)

指定した時間が経過するまで一時停止します。

組み合わせWait (Combined Wait)

タイムアウトWaitと、感度Waitまたは条件Waitを組み合わせていずれかが真になるまで一時停止することができます。要するに各種条件にタイムアウトを設定できるということですね。


SCL記事一覧

投稿者: けむしろう

プログラミング、サーバ構築、電子工作、旅行が好きです。

コメントを残す

メールアドレスが公開されることはありません。