Skip to main content

IAR Embedded Workbench for Arm 9.70.x

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にコピーする)を参照してください。