2.6.1. スキャッタローディング記述ファイルでのターゲットのペリフェラルの配置

通常、ペリフェラルレジスタのアドレスは、プロジェクトのソースファイルまたはヘッダファイルにハードコーディングされています。また、ペリフェラルレジスタにマップされる構造体を宣言し、これらの構造体を記述ファイルに配置することもできます。

例えば、32 ビットのメモリマップレジスタを 2 つ使用するタイマペリフェラルがターゲットに実装されているとします。Example 2.13 は、これらのレジスタにマップされる C の構造体を示しています。

Example 2.13. ペリフェラルレジスタへのマップ

__attribute__ ((zero_init)) struct {
    volatile unsigned ctrl;           /* timer control */
    volatile unsigned tmr;            /* timer value   */
} timer_regs;

この構造体をメモリマップ内の特定のアドレスに配置するには、この構造体を保持する新しい実行領域を作成します。

Example 2.14 に示す記述ファイルでは、timer_regs 構造体が 0x40000000 に配置されます。

レジスタの内容は、アプリケーションの起動時にゼロに初期化しないことが重要です。ゼロに初期化されるとシステムの状態が変更される場合があります。実行領域に UNINIT 属性を指定すると、その領域内の ZI データがゼロで初期化されるのを防ぐことができます。

Example 2.14. マップされた構造体の配置

ROM_LOAD 0x24000000 0x04000000
{
    ; ...
    TIMER 0x40000000 UNINIT
    {
        timer_regs.o (+ZI)
    }
    ; ...
}
Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0203GJ
Non-Confidential