ROM内に配置しているプログラムをRAMに転送して,RAM上で実行することができます。
転送されるプログラムの属性はfar属性にします。
far属性を持つデフォルトのテキスト・セクションは.textfになります。
.textf全体でなく,その一部をRAM上で実行したい場合,まず#pragma sectionでそのセクション名を変更し,-romオプションでその変更後のセクション名を指定します。
次に,変更後のセクションをROMからRAMに転送することによってそのセクションをRAM上で実行することができます。
例 | 割り込みがある場合にf1とf2をRAMへ転送し,RAM上で実行します。 |
#include “iodefine.h”
#pragma section text ram_text
__far void f1(char) {...}
__far int f2(int) {...;f1(x);...}
#pragma section
#pragma interrupt inthandler (vect=INTP0)
void inthandler(void){
/*ram_text_fセクションから ram_text_fRセクションへプログラムを転送する*/
unsigned char __far *dst, *src;
src = __sectop("ram_text_f");
dst = __sectop("ram_text_fR");
while (src < __secend("ram_text_f")) {
*dst++ = *src++;
}
/*転送したRAM上のプログラムを呼び出す*/
f2(1);
}
|
-rom=ram_text_f=ram_text_fR
-start=ram_text_f/3000
-start=ram_text_fR/ff000
|