RAM配置.doc
プログラムをRAMに配置する設定の画面イメージです。
チョコ様
丁寧な説明図ありがとうございました。
説明頂いた手順で対象ファイルのコンパイラオプションを設定したのですが、
対象ファイルでコンパイルエラーが発生してしまいました。
CC78K0R error E0842: Unrecognized pragma SECTION '@@CODEL'
「RAM配置用オブジェクトを出力する」の設定有無で発生します。
上記を「いいえ」にするとコンパイルは通りますが、この場合は下記エラーとなってしまいます。
Undefined symbol '__rcopy' in file 'ES_Release\Bootmain.rel'
何故、@@CODELが認識されないのかわからず再度質問させていただきました。
チョコです。
図で示した方法でRAMに配置すると,そのプログラムは@@CODELではなく,@@CODERに配置されます。
おそらく,RAMでのアドレスを指定するために#pragma指令を使われたかと存じます。この場合には,@@CODELを@@CODERに変更してください。
RAMに配置する必要があるので、セクションは@@CODERなのですね、
コーディングマニュアルを見たとき気づくべきでした。
#pragma指令で@@CODERにするとコンパイルができ、
対象の関数がMAP上でRAMのエリアになっていることが確認できました。
アドバイス頂きありがとうございました。
何度もすみません追加で質問があります。
E1エミュレータで確認したところ、CPUにダウンロードした時点で、
RAM上に配置したいプログラムがRAMのアドレスになっていますが、
_rcopyを実行するまではROMで、_rcopy実行時にRAMに展開され
RAM上で動くと考えてよいでしょうか。
いいえ,RAMに配置された状態で動作します。
これは,ダウンロードする対象がロードモジュールになっているためです。ロードモジュールでは,RAMに配置するプログラムは最初からRAM上の本来のアドレスにロードされます。この場合には,_rcopy()関数の呼び出し部分はコメントアウトしておいてください(この状態では,_rcopy()関数はロードモジュールには入っていないようです)。
最終的に使用するのはHEXオブジェクトになりますが,そちらでは,ROMの_rcopy()関数の直後に書き込まれていて,_rcopy()関数の実行でRAMのコピーされます。
ここらに関しての関係するいくつかの画面イメージを別途アップロードしておきます。
P.S.
画面イメージと説明を付けたPDFファイルを「ROM化プログラムのオブジェクトでの持ち方」でアップしておきました。
画面イメージをこちらにも貼り付けました。