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


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第53回]



●プログラム名を埋め込む

このところホームページの更新間隔が長くなっています。
サボっているのではありませんし猛暑でダウンしているなんてことでもありません。
寒いのは嫌いなのですが昔から夏の暑さには耐性があります。
相変わらず元気です。
病知らずでがんばっています。
このところあれこれちょいと難しい作業に取り組んでいるのですが時たま理解不能な怪現象に出くわして(悪霊の仕業じゃ)さっぱりわけがわからず悩んだりすることがあります。
それを退治するのに数日かかったりするととてもホームページを更新する余裕などなくなってしまいます。
あれこれ取り組んで得た成果は順次ホームページにアップする予定ですので気長にお付き合いいただきますようお願いいたします。

さて。
今回のテーマです。
PICBASICコンパイラは簡単な操作でBASICのソースプログラム(テキストプログラム)をPICのマシン語コードに変換してそれをPICを実装したターゲットボードに書き込みます。
その作業の多くは自動的に行なわれ、しかもそれにはなんとPIC WRITERは不要なのです。
これは特筆すべきことです。
Cなどに比べて習得が極めて容易なBASICを使ってそれをPICのマシン語に翻訳できるというソフトウェア上の利点とともにPIC WRITERを必要としないでPICにマシン語のプログラムコードを焼き込んでしまうことができるというハードウェア上の超利点が当PICBASICコンパイラシステムの「売り」です。
使ってみるとその便利さがいやでも実感できてしまいます(自画自賛です。まあ宣伝というものは本来そうしたものです)。
PICを実装したボード上のPICのフラッシュメモリ(フラッシュROM)にマシン語のプログラムを書いてしまいますから電源を切ってもそのプログラムは消えません。
プログラムを書いたPICターゲットボードをWindowsパソコンから切り離して単独で電源ONして起動させることができます。
最終的にPICにマシン語プログラムを書いてしまってからの動作は普通にPIC用のCコンパイラやアセンブラでプログラムを作成してそれをPIC WRITERでPICに焼き付けてのち回路基板に実装した場合と同じですがそこに至る過程が極めて容易なのです。

さらに言えば。
その動作の確認などのためにいちいちUSB経由のシステムからPICターゲットボードを切り離して別途電源を供給して立ち上げなければならないというような面倒なことはする必要はありません。
このあたりはCコンパイラとPIC WRITERを使う一般的な使い方に比べて格段の利便性があります。
WindowsパソコンにPICUSBIFボードを介して接続した状態でBASICのテキストプログラムをLOADするとすぐにBASICコンパイラが起動してPICのマシン語コードの生成までが自動的に行なわれます。
そのあと/RUNコマンドを入力するとシステムに接続されているPICターゲットボードのPICにマシン語プログラムコードが書き込まれてそのプログラムが直ちに実行されます。
まるでBASICインタプリタを使っているかのような感じです。
ひとたびそのようにしてPICマシン語コードを書き込んだPICターゲットボードは上の方で書きましたようにシステムから切り離して単独でスタンドアロン実行することもできますし、いつでもまたPICUSBIFボードを介してWindowsパソコンに接続して今度はBASICプログラムをLOADすることなく/RUNコマンドを入力するだけで書き込み済みのプログラムを実行することができます。

おお、いいじゃないの。
われながら良くできたシステムではないか。
と、悦に入っていたのでありますが。
そこにさらにちょいとした改良を加えることでさらに利便性が高まることに気が付きました。
前振りが長くなりました。
それが今回のテーマです。
実例で説明します。

システムの改良やその動作の検証などで繰り返しPICにプログラムを書き込んだりしているとどんなプログラムを書いたのかあるいは全く書いていないPICなのかわからなくなってしまいます。
そんなときはとにかくシステムに接続してまずは/RUNコマンドで実行してみることで何らかの情報を得ることができます。

これはBASICプログラムがまだ書き込まれていない状態のPICに対して/RUNコマンドを実行したときの画面です(ターゲットボードのPICにはBASICコンパイラの動作に必要なシステムサブルーチンは書き込み済みです)。
no source program
というのはLISTコマンドなどの対象になるBASICテキストプログラムがLOADされていませんという警告でエラーではありません。
ターゲットボードのPICにシステムサブルーチンが書き込み済みの場合には/RUNコマンドはエラーにならずに正常に実行されますがユーザーのBASICプログラム(をコンパイルしたマシン語プログラムコード)がまだ書き込まれていませんからすぐにシステムにリターンしてきてしまいます。
この場合に
/pmrd 80,0
と入力するとプログラムが書き込み済みであるかどうかの情報が表示されます。
no obj program
と表示されました。
マシン語プログラムコードが何も書かれていないことを示しています。
ここが今回システムを改良して追加した機能です。

なんだ、そんなこと?
まま、お待ちください。
これだけでも十分役に立ちます。
普通にCコンパイラやアセンブラなどで作成したプログラムをPIC WRITERでPICに書き込むやり方の場合、書き込み済みのPICなのか別のプログラムを書いたPICなのかがわからなくなったら万事休すであります。
もっとも上の例と同様未書き込みのPICかどうかはPIC WRITERでチェックすることはできます。
しかしそこにどんなプログラムを書きこんであるかということまでは余程詳細な記録を取っておかないことには判別できません。
そういう事態を避けるためには忘れないうちにそのPICにシールなどを貼ってメモをつけておくなどの対策が必須であります。

そこまではそういうことなのですが、今回追加した機能にはまだ続きがあります。
その確認のためにまずはいつものように簡単なテストプログラムをLOADしました。

BASICプログラム(テキストプログラム)をLOADするとBASICコンパイラが起動してテキストプログラムからPICのマシン語プログラムコードが自動生成されます。
そのあとLISTコマンドでBASICプログラムを表示しました。
LIST表示は必須ではありませんがプログラムの確認のためにはしておきたい作業でしょう。
今回の機能の説明のためにこの画面は重要です。
あとでここに戻って確かめることになります。

/RUNコマンドを実行しました。

上で生成されたPICマシン語プログラムコードがターゲットボードのPICに送られてそのPICのフラッシュメモリに書き込まれたあと
続けてその書き込まれたプログラムが実行されました。
システムプログラムのデバッグのために余分なデータ表示が行なわれていますがそこは無視してください。
program started
でマシン語プログラムが実行されて
break program end
でプログラムの実行が終ってシステムに戻りました。
このプログラムはターゲットボードに接続したLCD表示器に文字を表示するプログラムです。
LCD表示器に表示されているところの写真は省略します。
今思うとLCD表示ではなくてコマンドプロンプト画面に表示するプログラムにしたほうがわかりやすかったですね。

今回の機能を説明するためにここで一旦システムを終了します。


そのあとすぐにもう一度PICBASICコンパイラシステムを起動しました。

ここは説明のためにすぐに再度システムプログラムを起動しましたが時間が経ってからでも別の日でも構いません。
ターゲットボードのPICにはマシン語プログラムコードを書き込み済みですからいきなり/RUNコマンドでプログラムを実行することができます。
この画面ではわかりませんがプログラムが実行されてターゲットボードに接続したLCD表示器には正しく文字表示が行なわれています。
今回はプログラムが正しく実行されたことでPICに書き込まれているプログラムがどういうプログラムであるかの確認はできてしまいます。
しかしプログラムはLCD表示を行なうものだけとは限りません。
プログラムによっては反応無しになることだって考えられます。
CコンパイラなどとPIC WRITERを使ってPICにプログラムコードを書き込んだ場合には上に書きましたようにPICにメモなどを貼り付けておかないと大変なことになります。
PIC WRITERで書き込み済みのマシン語プログラムコードを読み出してそれをLISTファイルなどと突き合せてチェックするしかありません。
プログラムが長い場合にはそんなことはとてもやってられませんでしょう。

実は今回の機能追加を行なう前まではPICBASICコンパイラシステムでも同じことでした。
ターゲットボードのPICに書き込まれたマシン語プログラムコードは/pmrdコマンドで確認することができます。
/pmrdコマンドの詳細については今のところ説明を省略しますがパラメータを指定することでPICターゲットボードから書き込み済みのマシン語プログラムコードを32バイトずつ読み出して表示することができます。
そのようにして表示したコードを/LOAD実行時に作成されたLISTファイルと付き合わせればPICの中身を確認することができますがプログラムが長い場合には大変な作業になってしまいます。

そこで今回の機能追加です。

/pmrd 80,0
と入力すると16進コードの文字列表示に続いてPICに書き込まれているマシン語プログラムコードのもとになったBASICソースプログラムのファイル名が表示されます!
obj=bsprintt1nb
と表示されました。
ずっと上のほうで/LOADコマンドでLOADしたときのファイル名と同じです(確認してみてください)。
マシン語コードが書き込まれていない場合には今回の最初の画面で説明しましたように
no obj program
と表示されます。

PICBASICコンパイラ[第53回]
2023.7.17upload

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