Renesas Synergy™

FAQ 106589 : 【フラッシュメモリ】 CPU書き換えモードで、書き換え制御プログラムについての注意事項はありますか。[2007/02/19]

CPU書き換えモードでは、CPUからフラッシュメモリの読み出しが行えません。このため、書き換え制御プログラムはあらかじめRAM領域に転送し、RAM領域で実行する必要があります。

書き換え制御プログラム中に、フラッシュメモリのデータを参照する命令は使用できませんので、以下の点に注意してください。

JSR命令、JMP命令等は、ソースファイルをアセンブルすると、飛び先番地が、フラッシュメモリ領域の番地となります。

飛び先番地にラベル等を使用している場合は、書き換え制御プログラムのRAM領域への転送を考慮しRAM領域上の番地の命令に制御が渡るように、以下の様な方法でRAM領域での絶対アドレスになるようにしてください。

一例としては、既にソースプログラム上に定義されたラベルを用いて、書き換え制御プログラムがRAM領域に転送された際の、RAM上での絶対アドレスに相当するラベルを定義し、サブルーチンを呼び出す際にそのラベルを用いる方法があります。

[例]:イレーズ処理のサブルーチンコール(JSR命令実行)の場合
RAM_SUB_ERASE(RAM領域でのサブルーチン先頭の絶対アドレス)
=RAM_PROG_TOP(RAM領域での書き換えプログラム先頭の絶対アドレス)
+ SUB_ERASE(フラッシュメモリ領域でのサブルーチン先頭の絶対アドレス)
- PROG_TOP(フラッシュメモリ領域での書き換えプログラム先頭の絶対アドレス)

(ソースプログラム上の記述例)
 RAM_SUB_ERASE = RAM_PROG_TOP + SUB_ERASE - PROG_TOP

※ただし、上記の式(RAM_SUB_ERASE)を記述する以前に、ソースプログラム上で、RAM_PROG_TOP、SUB_ERASE、PROG_TOPのラベル それぞれが既に定義されている必要があります。

また、別の方法として、JMP命令を用いる方法もあります。 (JMP命令は分岐先アドレスが絶対で示されます。)

構造化記述言語による記述が含まれる場合、
LIF~LELSE~ENDIF
LFOR~NEXT
LSWITCH~CASE~ENDS
など、ロング分岐を使用するとアセンブリ言語への展開時にJMP命令を含んだ展開結果となります。

そのため、ロング分岐の使用はせずに、
IF~LELSE~ENDIF
FOR~NEXT
SWITCH~CASE~ENDS
などを使用するか、条件分岐を用いた別の形の記述で制御の渡しを行ってください。(#106615)

適用製品

3803H
3803L
3850A
他にご質問がございましたら、リクエストを送信してください