関数を(Cで)固定メモリ位置に保存できる方法を教えてください。
ARM Cortex m3 コアに IAR IDE を使用しています。
関数とデータをメモリに配置する方法については、IAR マニュアル「IAR C/C++ 開発ガイド」のセクション「メモリ内のデータと関数の配置の制御」で説明されています。
特定の関数を特定のアドレスに配置する唯一の方法は、これとこの関数のみを配置するメモリ内のセクションを定義することです。例:
void MyFunction( void ) @ "MyFunctionsSection"
{
...
}
リンカー ファイルでは、セクション「MyFunctionsSection」を定義する必要があります。そこで、このセクションを配置する場所を定義できます。関数はそこに配置されます。
この方法の欠点は、この関数用にメモリを予約する必要があることです。したがって、関数のサイズを知っておく必要があり、関数のサイズが増加して予約済みメモリよりも大きくなる場合は、このメモリ セクションを調整する必要があります。もう 1 つの欠点は、関数を目的のアドレスに確実に配置するために、このセクションに 1 つの関数しか配置できないことです。
しかし、これに加えて、関数を特定のアドレスに配置するという考えは、一般的に奇妙です。この関数へのポインタを定義し、ポインタを割り込みベクタ テーブルで行われるように固定アドレスに配置することをお勧めします。より多くの関数ポインタがある場合、リストは簡単に拡張できます。