« 制限の勧め | トップページ | WiFi 802.11b Serial Module »

プログラムの作成、転送、削除について

デアゴのROBOZAKのページのお助け掲示板の「コントローラーの情報について(全般)」のスレッドで、「プログラムの削除」に関しての話があったので、改めて、「プログラムの作成、転送、削除」について調べてみました。

roboBASICには、プログラムの作成、転送、削除に関して、以下の図のようなボタンがあります。

Parallels_desktopscreensnapz011xx

それぞれのボタンには次のような機能になります。

  1. プログラムの作成:ROBOBASIC言語で書かれたソースコードを、コンパイルしてオブジェクトコードを作ります。
  2. プログラムの転送:オブジェクトコードをMR-C3024の外付けメモリーに転送します。注意点は、この機能は転送しか行わないということです。
  3. 作成転送:プログラムのソースコードをコンパイルし、作られたオブジェクトコードをMR-C3024へ転送します。つまり、1と2を合わせて行います。
  4. プログラムの削除:MR-C3024に転送されているプログラムを削除します。実際には「END」とだけ書かれた「無題」というプログラム名のコードを作成転送しています。従って、メモリーの中をゼロや255で埋めるというのではありません。

プログラムの作成とファイルとして保存されるオブジェクトコードとメモリー(パソコン)内のオブジェクトコード
この操作により、ソースコードがコンパイルされて、オブジェクトコードが(メモリー内に)作られ、さらに、作られたオブジェクトコードは、Objという拡張子を持ったファイルとして保存されます。注意点は、以前「オブジェクト"ファイル"が壊れる現象」で書きましたが、オブジェクトコードが32Kバイトを超えると、オブジェクトファイルが壊れます。ただ、メモリー内に作られたオブジェクトコードは壊れてないことと、プログラムの転送で転送されるオブジェクトコードは、ファイルからのデータでなく、メモリー内のデータが転送される様なので、大きな問題にはならないことが判りました。

プログラムの削除とMR-C3024のメモリー内
あるプログラムを転送してあるMR-C3024のメモリー内の値を最初から160バイト分を以下に示しました。
Miscreensnapz001
この状態で、「プログラムの削除」すると、以下のようになります。
Miscreensnapz002

プログラムの削除とは、MR-C3024のメモリー内をゼロまたはFFで埋めるという訳でなく、「END」とだけ書かれた「無題」というプログラム名のソースコードで作られたオブジェクトコードが転送されるのと同じになります。

そのオブジェクトコードは、プログラム名、日時、サイズの16バイトのヘッダーと、ENDのオブジェクトコード3バイトと、プログラムの終了コードの3バイトの計22バイトになります。

実際の転送では、128バイトごと転送されますので、22バイト目以降128バイト目までゼロで埋められた状態になります。

128バイト目以降は、前に転送されていたオブジェクトコードが途中から残っている形になっています。プログラムの削除を行うと、削除後、「メモリークリア完了」とメッセージがでますが、クリアされているのは、最初の部分だけです。
Parallels_desktopscreensnapz018

プログラムの削除後のプログラムの転送
「プログラムの転送」は、その名の通り、オブジェクトコードを転送します。注意点は、(パソコンの)メモリー内にあるオブジェクトコードを転送するだけで、新たにオブジェクトコードを作りません

さて、ここで、プログラムを削除した後、プログラムを転送しようと、このボタンをクリックしても、(パソコンの)メモリー内にあるオブジェクトコードは、プログラムの削除際に作られた時のオブジェクトコードなので、つまり、また、もう一回、削除しているのと同じことになります。プログラムの削除後は、新たにオブジェクトコードを作成してから転送する必要がありますので、注意が必要です。

プログラムの削除後の作成転送の挙動
プログラムの削除後は、上記で書いたように、新たにオブジェクトコードを生成する必要があります。「作成転送」のボタンは、オブジェクトコードを作成した後、オブジェクトコードの転送を行います。

これを実際にやってみると、以下の様な表示になります。
Parallels_desktopscreensnapz008

プログラムの名前が、「無題」でないのに、オブジェクトコードのサイズが「22バイト」のハズがないのに、まるで、削除の為のコードが転送されるように思えます。グラフの動きから、削除されてから、新たなコードが転送されているようにも見えます。

さて、実際、どんなデータが送られているのか、ラインモニターで見てみたところ、表示だけが「無題」の「22バイト」となっているだけで、削除の為のコードも転送されることなく、普通に(正常に)オブジェクトコードが転送されていることが判りました。

プログラムは上書きで
ロボザック?号にはプログラムを「削除」してから「作成転送」すると書いてあるそうなんですが、普通は、いちいち削除する必要はありませんので、転送の際は、「作成転送」のみ行えば大丈夫です。

------------------------

さて、ということで、プログラムの作成、転送、削除の挙動の解析は以上ですが、この解析をしていて、RZ1Basicの「プログラムの削除」に重大なバグを発見してしまいました基本プログラムの削除はする必要がないので、常に上書きで使うようにして下さい。次バージョンアップで修正します。

----------------
にほんブログ村 科学ブログ ロボットへ
にほんブログ村

|

« 制限の勧め | トップページ | WiFi 802.11b Serial Module »

RZ1Basic」カテゴリの記事

週刊 ロボザック」カテゴリの記事

工作・改造・解析」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: プログラムの作成、転送、削除について:

« 制限の勧め | トップページ | WiFi 802.11b Serial Module »