2022.7.10
前へ
次へ
ホームページトップへ戻る


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第20回]



●TEXT型インタプリタ

前回「ソフトウェアの設計方針を大転換することになってしまいました」と書きました。
PIC−USBIO用のBASICは開発当初からTEXT型でいくことに決めていました。
TEXT型というのはBASICプログラムをTEXTのまま読み込んで(またはキーボードから入力して)それをそのまま逐次解読しながら実行するという原始的なBASICインタプリタのことです。
TINY BASICはその原形といえるでしょう。
TEXT型は命令や変数名などの文字列を読み込む都度解読しながら実行していきますからインタプリタ自体の構造は比較的シンプルなものにできます。
欠点は実行に時間がかかる点です。
プログラム例で説明をします。

上のプログラムでは変数abcとラベル*loop、それから計算式とprint、if、gotoが使われています。
TEXT型のインタプリタでは1行ごとに先頭から文字列を確認しながら進みます。
30行、50行のprint、40行のif、gotoを行の先頭から読んで解読し各命令の処理を行ないます。
文字列の解読は8ビットのマイコンでは1字ずつ行なうことになりますからかなり負担が大きい作業です。
しかしPIC−USBIO用のBASICはCコンパイラで作成していますから文字列の解読は1文字ずつ行なうのではなく文字列単位で行ないます。
その点では8ビットマイコンほど非効率ではありません。
それにND80Z3.5などの8ビットCPUとWindowsパソコンのCPUとではCPUクロックも桁が違います。
8ビットCPUのクロックがMHzであるのに対しWindowsパソコンのそれはGHzです。
WindowsパソコンのCPUが32ビットまたは64ビットであることも考慮すれば処理能力の差は数万倍、ひょっとすると数十万倍にも及ぶと考えられます。
ならば。
手間暇をかけてわざわざ中間言語型のBASICインタプリタにしなくても原始的なTEXT型でもよいではないか、と考えたことが当初TEXT型でいこうと決めた主な理由でした。
さらに言えば今回BASICを作ろうと思い立ったのは、汎用のBASICを作ろうというのではなくてあくまでその目的はPIC−USBIOを制御するための専用BASICを作ることです。
PIC−USBIOはUSBを通じて制御しますがそのUSB通信部分はHID方式です。
HID方式は専用のドライバを必要としないという軽便さが最大の利点ですが通信速度が遅いことが難点といえば難点です。
そうは言ってもPIC自体の動作クロックはMHzですしそもそも外部IOは一般的に遅いとしたものですし、IOを高速動作させるためにはそれなりのハードウェアの知識経験や技術を必要としますから、IOを高速で動作させるということはあまり一般的ではありませんでしょう。
あくまで汎用的なごく普通のIO制御を主な用途と考えればHID方式でも十分でしょうし、それならばそれを制御するためのBASICもTEXT型のインタプリタでも十分といえるでしょう。
やたらBASICだけが速くてもIOのところが遅ければPIC−USBIO専用のBASICとしてはある意味オーバースペックであるともいえるでしょう。
そのように考えてTEXT型のBASICインタプリタを、それも必要と思われる最低限の機能にしぼって、かつ実数型演算を除外して整数型演算と文字型の処理のみに範囲を限って開発をスタートしたのでした。

ところが。
当初考えていた最低限の機能についてはほぼ組込みを完了するころになって、だんだんと不満が高まってきてしまいました。
たとえば上のプログラム例で言いますと、goto *loopで*loopの行に行くためにはプログラムの先頭から*loopを捜していかなければなりません。
上のプログラム例では*loopは2番目の行にありますからすぐに検出できます。
しかしプログラムが大きくて*loopがずっと下の方、100行、200行(行番号の100、200のことではありません)も下の行にあったとすると、*loopを捜すために先頭から100行、200行もの行を全部読み込みながら文字列の検出作業を行なうことになります。
さらに言えば。
上のプログラム例ではその作業を4回繰り返しています。
もしもそれが1000回、10000回の繰り返しだったならば。
おそらく人間ならばこんな馬鹿な作業はやってられないよお、なんて職場放棄をしてしまうでありましょう。
しかしそこは従順なマシンでありますから不平など申しませぬ。
ですけれど。
どうにも面白くないのですよねえ。

まあ、本来TEXT型のインタプリタとはそういうものなのですから、仕方がありませんでしょう。
と、そのように割り切ってしまえばよいことかもしれませんが。

もう自分自身が納得できなくなってしまいました。
まことに困った性分であります。

次回に続きます。

PIC−USBIO using BASIC[第20回]
2022.7.10upload

前へ
次へ
ホームページトップへ戻る