RAMでの実行
このセクションの内容:
__ramfuncキーワードは、関数をRAMモードで実行します。つまり、リード/ライト属性を持つセクションに関数が配置されます。関数は、初期化された変数のように、システム起動時にROMからRAMにコピーされます。詳細については、システムの起動と終了を参照してください。
キーワードは、以下のようにリターン型の前に指定します。
__ramfunc void foo(void);
__ramfuncにより宣言された関数がROMにアクセスしようとすると、警告が発生します。
コードおよび定数に使用されるメモリエリア全体が無効な場合、たとえばフラッシュメモリ全体が消去された場合など、RAMに格納されている関数およびデータのみを使用できます。割り込みベクタおよび割り込みサービスルーチンがRAMに格納されていない限り、割り込みを無効にする必要があります。
文字列リテラルおよびその他の定数は、初期化した変数を使用することで回避できます。以下に例を示します。
__ramfunc void test()
{
/* myc: initializer in ROM */
const int myc[] = { 10, 20 };
/* string literal in ROM */
msg("Hello");
}これを次のように記述し直すことができます。
__ramfunc void test()
{
/* myc: initialized by cstartup */
static int myc[] = { 10, 20 };
/* hello: initialized by cstartup */
static char hello[] = "Hello";
msg(hello);
}詳細については、コードを初期化する(ROMからRAMにコピーする)を参照してください。