CS+RX631でバイナリファイルを生成させる方法について

お世話になりますIKUZOです
CS+でRX631でバイナリファイルを生成させる方法についてお伺いできませんでしょうか?
HEWではわわいさんから伺った方法でうまくいっているのですが
HEWの設定画面


プログラムのセクション画面


出力されたバイナリファイル(理想的)

 


CS+のプログラムのセクション画面


CCRXのプロパティ→ヘキサ出力オプション→分割出力ファイルを設定するのですが
出力をバイナリにするとCS+はまずとても大きなバイナリファイルを作成してから
指定の分割出力をするようで、ギガ単位のファイルを作成してから切り出します
CS+ではいろいろやってみるのですがうまくいかないようです
そのため、対応策としてmotファイルを出力して
自分のプログラムでこのmotファイルからバイナリに変換しています
元からバイナリを出力させることが出来ないのでしょうか?

  • わわいです
    まず、motファイルからどういうアドレスエリアが含まれているか調べてみましょう
    どーもFIXEDVECTあたりでなんか定義してませんか?

    で、今回の件とは関係なさげですが、セクション割当てが(標準のスタートアップコードからすると)ちと意味不明です
    RAMに割り当てるべきBセクション、RセクションがいっしょくたにROMに割り当てられていますが、これは意図してやってることでしょうか?

    #ああ、FIXDVECT ってベクタエリアなのね。。これ含めてもバイナリサイズは120M程度ですなー(追記

  • バイナリファイルにはアドレス情報を含む事が出来ないので、アドレス範囲を指定しなければ変換ツールでは実データがある先頭~末尾のアドレス範囲でデータを出力します。

    セクションをSDRAMに配置しているようですが、実データの配置は0x08C0_0000~0xFFFF_FFFFですので、この範囲がほぼ4Gバイトのバイナリファイルとして出力されます。

    SDRAMに配置しているという事はローダーか何かでバイナリイメージをコピーすると思いますが、ローダーで転送するデータの範囲を把握してバイナリ変換する必要があります。

     

    ちなみに、私の手元のCS+では「ヘキサ出力オプション」の画面でF1キーを押すとヘルプが表示されます。

    バイナリ出力に関しておよそ必要そうな情報はこのヘルプに書かれていますが、表示されないのでしょうか?

  • In reply to windypon:

    わわいさんお助けありがとうございます

    「RAMに割り当てるべきBセクション、RセクションがいっしょくたにROMに割り当てられています」

    これはSDRAMですから、ROMの部分もRAMの部分もSDRAM部分になります

    セクションリスト

    「これ含めてもバイナリサイズは120M程度ですなー」のはずですが、

    FIXDVECTがあるので超大なものになるのではないでしょうか.

  • In reply to IKUZO:

    windyponさんお助けありがとうございます
    「この範囲がほぼ4Gバイトのバイナリファイルとして出力されます。」納得です
    現行ではmotファイルを出力して
    自分のプログラムでこのmotファイルからバイナリに変換しています
    その際にFIXDVECT部分は無視しています、
    これで調子よく動作するのですが、変換時間かかりますし、コンパイラーは
    そもそもバイナリを作成してからmotファイルを作成するのですから
    元から指定したバイナリを出力してくだされば負荷も軽くなり速度も速くなると思った次第です、
    「ヘキサ出力オプション→画面でF1キー」これを何度も読み返して
    何度もやってみました、これはCS+がmotあるいはbinを生成後に切り出しを行うもののように感じました、
    そのため超大なファイルを出力してから処理をするため、時間がすごくかかるように思います、
    なにか間違っていたのでしょうか?
    FIXDVECTを除く方法がありましたらご教授お願いできませんか?
    もしかしたら、SDRAMビルド時にこの部分をコメントアウト?
    やってみます、できたらご報告。
  • In reply to IKUZO:

    わわいです
    FIXDVECTは0xffffffd0 ですか。読み間違ってました。たしかにこれだとwindyponさんの仰る通り、4Gのバイナリができますな。
    #なんでそこだけ9桁Hexなんだよっw
    で、そうなるのは当然の設定でそうなっている。というはなしですが、これをどうしたいのでしょうか
    なんかその前提となる説明が元の質問文にないのでなにを答えればいいやら。。
    FIXDVECTが不要というなら削除すればいいだけだけど、それが不要のものかどうかこっちでは判断できませんし。

    #これまた質問とは外れるけど、全体がSDRAMに展開されるという話なら、R*セクションは不要なんでは?

  • In reply to わわい:

    わわいさん
    「そうなるのは当然の設定でそうなっている。」まさにそのとうりということですね、
    この周りがどうなっているのか、自分が掴めなくて、この投稿でお助けしていただき、
    はっきりしました、次に何をすべきか解りました、
    「R*セクションは不要なんでは?」R*セクションというのが何であるか、
    DセクションのRセクションですか、
    なるほどSDRAMだからDセクションでRセクションを初期化する必要はありませんね、
    DセクションをRセクションとして使用すればいいわけで
    また頭がこんがらがって来たようです、
    この点についても、初期化ファイルsbrkあたりを弄る必要がありそうですね、
    先はまだまだですね。
  • In reply to IKUZO:

    わわいさん
    「FIXDVECTこれをどうしたいのでしょうか」これは使用しません、手順は以下です
    1.ROMのFIXDVECTから起動します
    2.ROMのプログラムでSDカードからSDRAMへSDRAM用のプログラムをロードします
    3.ROMからSDRAM用のプログラムへ分岐します
    以上ですからSDRAM用のプログラムはFIXDVECTを必要としません。

  • In reply to IKUZO:

    わわいです
    なら、FIXDVECTセクションのソースを削除して、リンカオプションのセクション割当からFIXEDVECTを削除すればそんでいいです。
    #FIXEDVECTを定義してるソースは、あなたの目の前にあるんでがんばって探しましょう。
    #全てはあなたの目の前にあります(こればっか
  • In reply to わわい:

    わわいさん
    励ましありがとうございます、ちょっと今他の仕事、終わり次第やってみます
    たぶんうまく行くのではないかと期待しています

  • In reply to IKUZO:

    わいさん、windyponさん

    1.セクションのマップからFIXDVECTを削除

    2.vecttbl.cのソースコードの最初に#ifdef DEFAULT最後に#endif //DEFAULTを入れて

    コンパイルしましたところ下のように理想的なバイナリが生成されました

     

    お世話になりました、ありがとうございました。

  • In reply to IKUZO:

    わわいさん、windyponさん
    実行させましたところ、全く問題なく動作しております、ありがとうございました。