SH2A hew 最適化リンカ 出力ファイルの分割

初心者のIKUZOでございます、アドバイスお願いできないでしょうか?

①現在のやりかた

●セクションの設定
0C000000 DVECTTBL DINTTBL
0C000800 PResetPRG PIntPRG
0C001200 プログラムの開始 P C C$BSEC C$DSEC D B R
2C001000 PCACHE
2CFBF800 BUSB_BUFF usbのバッファ
2DFC0000 BETH_BUFF BETH_DESC etherのバッファ
FFF80000 B_LAN_BUF tcp/ipのバッファ
FFF87C00 S

これで.MOTファイルを出力させて、そのMOTファイルをバイナリ変換する際に

0x0C080000以上のアドレスは上位アドレスを切り捨ててデータを上書きしてバイナリを生成しております

これで問題なく動作しております

②改善したやりかたをしたい

最初からバイナリで出力できないものか?

まず.BINファイルを出力させるとサイズがとても大きくなる、その原因はSHがキャッシュ無効の領域にアドレス上位を使用しているためにその領域までの全てのデータを出力する、これは当たり前の(正常な動作)なのですが、実際に実行されるのは0x0C000000~0x0C080000なので、なにか方法はないものかと思いまして、SH2A hew 最適化リンカ 出力ファイルの分割を指定してやってみると(ファイル名、0x0C000000~0x0C080000等指定)確かに①の方法で求めたファイルサイズと同じになるのでデータも同じとおもいきや、内部データは抜けております、これは大体想像が付くのですが、つまりキャッシュ領域が抜けている、①の方法は特別な方法で変換しているためです、

そこでお伺いしたいのが、.BINファイルを出力させる時にキャッシュ領域も含めた状態でなおかつ実行部分のみ取り出すような方法ってあるのでしょうか?

Parents
  • わわいです
    うちでは、
    PCACHE=RPCACHE
    として、RPCACHEを0C001000に割り当てる、ということをしてますねー
    これでそのままバイナリ出せばいいです
  • わわいさん
    アドバイスありがとうございます、この考えに至ったのが以前のわわいさんの投稿のヒントを受けまして、できるのかな、思った次第です、今自分作成の変換ツールを通しているので信頼度はどうかと、できればhew自体からできるのであれば信頼度も向上が望めるのではないかと、「PCACHE=RPCACHE」ということですが、これはどこに記入したら良いのでしょうか?お教えくださいませんでしょうか。
  • わわいです
    初期値付きのデータは、まずROM領域に配置されていて、プログラムの初期化時にRAM領域にコピーされ、実行時にはRAM領域が参照されます。
    まあ、これと同じことをPCACHEにもしてやればいいってことで、PCACHEをROM領域に配置しておいて、実行時にはRPCACHE領域で走るってことですな(このときはコピーしてはいけないw)
    リンカの設定で、ROMからRAMへマップする、とかなんとかの設定があるはずですんで、いろいろやってみてください
  • わわいさん
    意味がわかりました、なるほどですね、リンカの設定でなんとかなるということですね、「ROMからRAMへマップする」を試してみたいと思います、PCACHEを2C001000から0C001000に変更して
    0C000000 DVECTTBL DINTTBL
    0C000800 PResetPRG PIntPRG
    0C001000 PCACHE →ROMからRAMへマップする(2C001000へマップ)
    0C001200 プログラムの開始 P C C$BSEC C$DSEC D B R
    ということですよね。
  • わわいです
    HEWでは、最適化リンカ>カテゴリ出力>オプション項目ROMからRAMへマップするセクション、での設定ですね
    #遅ればせながらHEWを起動して確認しましたw
    要するにセクションの配置アドレスと実行アドレスの話なんですが、ルネのコンパイラだとROMやらRAMやらとなんかピンとくる設定名でもないですねえ。
    ましかし、ほとんどのひとはデータセクションの配置のためでしかこいつは使わないんで、この方がとっつきやすいですわな
  • わわいさん

    やってみました、うまくいきました!、これで一安心です、解決です、ありがとうございました。

Reply Children
No Data