A.2.3 プログラムをRAM上で実行する方法

ROM内に配置しているプログラムをRAMに転送して,RAM上で実行することができます。

転送されるプログラムの属性はfar属性にします。

far属性を持つデフォルトのテキスト・セクションは.textfになります。

.textf全体でなく,その一部をRAM上で実行したい場合,まず#pragma sectionでそのセクション名を変更し,ROM化オプションにその変更後のセクション名を指定します。

次に,ROM化したセクションをRAMに転送することによってそのセクションをRAM上で実行することができます。

 

割り込みがある場合にf1とf2をRAMへ転送し,RAM上で実行します。

-

ファイル:ram.c

#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