« 第1回バトルカップ 学内も混雑? | トップページ | RZ1Basic v0.4.4 公開 »

オブジェクト"ファイル"が壊れる現象

先日、yukiさんから「roboBASICのオブジェクトファイルに不可解な現象が発生する」とメールを頂きまして、私はほとんど何もやってませんが、いろいろテストしてみた結果、オブジェクトファイルに関して判ったことを、大げさに報告しますhappy01sweat01

不可解な現象

  • 暇にまかせてネットから拾ったモーションデータや、デアゴHPでの皆さんの投稿データを元に、マップ切替タイプのリモコンテンプレートを作成されてるそうです。
  • プログラムを追加するたびに、チェックも兼ねて、roboBASICで、コンパイルしていたそうです。
  • しかし、ある時、エラーも出ず、一見、正常にコンパイルされているんですが、オブジェクトファイルが変になってしまったそうです。
  • ところが、RZ1Basicを使うと、正常にコンパイルされ、オブジェクトファイルは問題なく生成されたそうです。

検証
yukiさんから添付して頂いた問題ありのコードと、問題なしのコードを、私もRZ1BasicroboBASICを使ってコンパイルしてみました。

  • roboBASICで問題なしのコードをコンパイル:
    RZ1Basic=Rz1basicscreensnapz046
    roboBASIC=Parallels_desktopscreensnapz118
  • roboBASICで問題ありのコードをコンパイル:
    RZ1Basic=Rz1basicscreensnapz045
    roboBASIC=Parallels_desktopscreensnapz117

これを見る限り、RZ1BasicroboBASICも、問題ありも、問題なしも、コンパイル結果は同じバイト数ですし、確かにエラーも出ず、roboBASICに問題があるようには感じませんでした。

なんで、最初は「な〜んだ、問題ないじゃん」と思いましたが、roboBASICによって作られたオブジェクトファイルをよくよく見てビックリsign01、なんと、オブジェクトファイルが変になっているじゃあ〜りませんかsweat01

ROBOBASICのプログラムは、MR-C3024の外付けEEPROMに転送されます。そのメモリーの容量は64KBです。なんで、私は64KBまでプログラムが扱えると思っていました。

2バイトの変数の扱いには、

  • 符号なし2バイト整数:0から65535 (65536/1024=64KB)
  • 符号あり2バイト整数:-32768から32767 (32768/1024=32KB)

があります。

オブジェクトファイルが問題なく作られているのは、32767以下で、それ以上の場合、オブジェクトファイルに問題が生じていることがわかりましたので、この時点で、roboBASICを使った場合、32KB以上のプログラムを作ることができないのかと思いました。

なかなか32KBを越えるプログラムも書けないですし、オブジェクトファイルまでチェックしていないので、32KB以上でオブジェクトファイルに問題が生じることなんて、簡単には気が付きませんよね。

転送と起動

apple32KBを越えるプログラムは転送できる?起動できる?
RZ1Basicでは、32KBを越えてもオブジェクトファイルには問題がなかったため、最終的にParallels_desktopscreensnapz116になるプログラムを、RZ1Basicで転送し、起動を調べてみた結果、32KBを越えるプログラムでも動かすことができることが確認されました。

bananaroboBASICは32KB以上のプログラムを扱える?
roboBASICでは、32KBを越えるとオブジェクトファイルが壊れてしまいますが、RZ1Basicと同じ様に、最終的に合計43905バイトになるプログラムを転送してみました。

roboBASICで転送したデータを、外付けEEPROMの43900から16バイト分を読込んでみると、"2F 2B C4 7E AB"となっており、ちゃんと43905バイト転送されているようです(RZ1Basicのコマンドテスト機能を使用)。
Parallels_desktopscreensnapz119

下の図から、その転送されたコードが、正しいことが確認できます(RZ1Basicのオブジェクトコード表示機能)。
Rz1basicscreensnapz047

実際に、正常にロボットを起動させることも確認できました。

まとめ

以上の結果から、

  • roboBASICでは、オブジェクトコードが32KB以上になるプログラムにおいて、オブジェクトファイルが破損する。
  • オブジェクトファイルが破損していても、転送されるオブジェクトコードには問題はなく、ロボットを正常に起動させることができる。
  • オブジェクトコードには問題はないことから、オブジェクトコードをファイルとして保存する際に破損する。

ことがわかりました。

資料

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

|

« 第1回バトルカップ 学内も混雑? | トップページ | RZ1Basic v0.4.4 公開 »

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

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

コメント

コメントを書く



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




トラックバック

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

この記事へのトラックバック一覧です: オブジェクト"ファイル"が壊れる現象:

« 第1回バトルカップ 学内も混雑? | トップページ | RZ1Basic v0.4.4 公開 »