CS+ .objファイルを特定のアドレスで.motを作成したいのですが

CS+初心者のIKUZOです、先ほど来からRX63NのUSBでターミナル動作とブロック転送ができるようになりましたので、下記のようなことをやろうとしましたが失敗しました

1.DebugBuildを追加します

2.sub.c とsub.h を追加します

3.セクションPSUB,DSUB,0x10000を追加します

4.sub.c中で#pragma section SUBを宣言します

5.sub.c中でint sub_proc(char *str){printf("*");}を作成します

6.これでDebugBuildをビルドします、結果ビルドエラー無し

7.出来上がった.mot 部分から 0x10000 ~0x18000までをバイナリ化してロードモジュールにする

8.DefaultBuildに切り替えてビルド(sub.c関連は無効)

9.DefaultBuildの.motをFDTでROMにプログラム

10.基板を起動、ターミナル起動、USBターミナルからSRAMの0x10000へロードモジュールを転送

11.本プログラムのコマンドラインから0x10000のロードモジュールを呼び出し

12.暴走はしないもののそれらしい動作はいたしません

13.DebugBuildマップ情報を出力させますと、PSUB,DSUBは4Byte程しか出力されていませんでした。

14.これは失敗と判断しました。

良い方法を提案いただけませんでしょうか?

  • わわいさん
    #const char string1[]="abcde";
    やってみました、すると
    (E) E0520011 sub.c(57):E0520011:Unrecognized preprocessing directive sub.c 57 gen.mtpj
    でエラーになりました、どうやら私の想像するところですがROM用とRAM用にロードモジュールを分割はできないのではと思います、もちろん実行を移すことはできます、スタックレベルでは問題ないと思われます、printfのような高次関数は埋め込み文字列の位置などがコンパイルするたびに違って来るのでできないし、Lセクション(リテラル領域)等は自分で定義した個所に持ってくることはできないみたいです、printfに限らずSCIの文字出力等も無理でした、何回も途中で止まることもあれば、帰ってくることもあります、なかなか難しいです、解決策があればいいのですが。
  • わわいです
    先頭の#は削除してやってみてください
    const char string1[]="abcde";
  • わわいさん
    いつもお世話になります、「先頭の#は削除」するとコンパイルは通りました。
  • 皆様、やっと念願の内容がかないました、つまり毎回ROMに書き込むのではなくRAM上でUSBによって高速な実行環境を構築して、ソフト開発をスピードアップするというような、今日第一歩を開始できました、苦労しました、全ては皆さまが教えてくださったおかげです、改めて感謝いたします、やりかたとしては、YRDKRX63N評価ボードはRAM実装できないため、諦めました、RX631ですが手元にあったのでこれのCS1にRAM512KByteを実装いたしました、外部バスが外に出るようにしてRAMが中から見えるようにいたしました、プロジェクトにDebugBuildを追加いたしました、同時にPResetPRGのデフォルトセクション0xFFF00000をCS1セクション07000000 に変更いたしました、そして分割出力ファイルを.mot=07000000-0707FFFFに設定いたしました、USBによりCS1に.motを転送後、制御をsubコマンドで07000000移しますと問題なく動作いたしました(下記画面)後はロード後に自動的にジャンプするように作りこめば、出来上がりとなります

    これから十分なスピードで開発できます、重ねて感謝いたします。

  • RXの難しいことばかり、書き込みましたが、使用してみるとRXの優れていることに気が付いてきます、H8やSHでは多くの場合モード端子で外部バスを設定するのですが、起動時に他のデバイスのバスと競合して起動が失敗することがあり、CPUの他にWDTのIC等で監視して再リセットを掛けるようなことが必要でした、このRX631の場合はそんなことは一切必要ないようですね、なぜなら初期起動時は外部バスは解放されていないから、何回も簡単なリセット回路で操作してみてこの利点に気が付きました。