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

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

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

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

Parallels_desktopscreensnapz011xx

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

|

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

RZ1Basic」カテゴリの記事

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

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

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/221673/42740477

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

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