C言語ライブラリーモージュルだけをROMにするのは可能でしょうか?

現在CS+でRX63Nでソフトを作成しております

なにぶんRAMが128K Byteのようで、これをまだまだ先になりそうですが

SDカードやLANやUSBからファームを転送してRAM上で動作させるといいんじゃないかと

その場合ROMは大容量なのでC言語ライブラリーモージュルだけをROMにもたせることができれば

いいのじゃないかと素人考えで、そんなことは可能なんでしょうか?

Parents
  • わわいです
    可能です。
    お使いのツールチェインのライブラリ生成ツールのオプションにライブラリのセクションの指定をして、そのセクションをリンカのオプションにてROMのアドレスに割り当て、そして、ビルドした生成物からROMのアドレスのモジュールを抜き出し、それをROMに書き込む、という手順になります。
  • わわいさん
    高度な技術を教えてください
    1.ライブラリ生成ツールのオプションとは「ライブラリ・ジェネレート・オプション」タブの内容のことでしょうか?
    2.リンカのオプションにてROMのアドレスに割り当て
    これは「リンク・オプション」のタブの中であると思いますが
    3.ビルドした生成物からROMのアドレスのモジュールを抜き出し
    これはコピー用のファームを別途用意して
    RAM実行用のファームを後で使用というような内容なんでしょうか?
  • わわいです
    >1.ライブラリ生成ツールのオプションとは「ライブラリ・ジェネレート・オプション」タブの内容のことでしょうか?
    RXのツールチェーンのマニュアルを見てるわけでないのでちとアレですが、おそらくそうだと思います。マニュアルになんか記述はないでしょうか。
    >3.ビルドした生成物からROMのアドレスのモジュールを抜き出し
    SH+HEWの場合だと、リンカオプション>出力>出力ファイルの分割、という項目があり、アドレス範囲あるいはセクション名指定で、バイナリファイルで分割出力できるようになってます。RXの場合でも、それに類似するようなオプションが有ると思われますんで、そこら辺調べてみてください。
    まー、LANやUSBメモリからブートアップさせるためには、そこからブートコードを読み出すスタートアップコードもROMに配置しておく必要があるので、それをするつもりがあるなら、そこら辺は必須となりますんで、これができないと話にはなりませんね
  • わわいさん
    「リンカオプション>出力>出力ファイルの分割」教えていただきありがとうございます、なるほどそれについてはこれまでHewについては長く使用してきましたがやったことがありません、最近はHewではデバックとリリースに区分けして別のメモリマッピングでデバッグをROMに割り当て、リリースでSDRAMに割り当てるというようなことをやっていました、今回まさかライブラリが別出力できるなんて想像できませんでした、ちゃんと用意がしてあったんですね、うーん深い。
  • たいていリンカでライブラリをモジュールにリンクして使用します、パソコンの場合はライブラリDLL等をリンクして使用します、これをRXで実現するためには、ライブラリとジャンプテーブルのようなものをROMに書き込んで置き、RAMのC言語のモジュールからこれを呼び出すような方式ではないかと思います、一昔前ににも似たようなことをしている人を見かけました、あれはどうしてたのかなと思います、もしやって見たことのある人がおられましたらご教授いただけませんか、これが出来ると画期的だと思うのは自分だけでしょうか?
  • 今少し思い出しました、DLLのように別に扱うのではなく
    ROM:ブートモジュール
    ROM:ファンクションテーブル
    ROM:コマンドラインモジュール(ここから一時実行ファイルを起動する)
    ROM:ライブラリモジュール
    RAM:ワーキングRAM
    RAM:一時実行ファイル(これは別ビルドでブートモジュールやコマンドラインでロードする)
    のようなやり方なら実現できそうです、一時実行ファイルはファンクションテーブルを
    参照してライブラリ機能を呼び出す
    これが一昔前のやりかたでしたね、ただこれではファンクションテーブルを作るのがたいへんそう。
Reply
  • 今少し思い出しました、DLLのように別に扱うのではなく
    ROM:ブートモジュール
    ROM:ファンクションテーブル
    ROM:コマンドラインモジュール(ここから一時実行ファイルを起動する)
    ROM:ライブラリモジュール
    RAM:ワーキングRAM
    RAM:一時実行ファイル(これは別ビルドでブートモジュールやコマンドラインでロードする)
    のようなやり方なら実現できそうです、一時実行ファイルはファンクションテーブルを
    参照してライブラリ機能を呼び出す
    これが一昔前のやりかたでしたね、ただこれではファンクションテーブルを作るのがたいへんそう。
Children
No Data