CQ-FRK-NXP-ARM (12) Cで書くスタートアップ (3)2015年03月19日 22時20分43秒

スタートアップ、リンカースクリプト、その他とそろった所で実際にコンパイルしてみよう。
リストの 0020 行が取り除くことができなかった return だ。実害は無いのでよしとしよう。
0040 から 01fc まで空いているのは CRP を入れたためこのようになっている。
以下にそのリストを示す。

 


まあ予定通りうまく行ったという所だろうか。
ジャンプテーブルの部分は以下のような方法(某誌で採用されていた)もある。
void (* const g_pfnVectors[])(void)= {
    0xE59FF018,        // ldr     PC, [PC,#0x0018]
    0xE59FF018,        // ldr     PC, [PC,#0x0018]
    0xE59FF018,        // ldr     PC, [PC,#0x0018]
    0xE59FF018,        // ldr     PC, [PC,#0x0018]
    0xE59FF018,        // ldr     PC, [PC,#0x0018]
    0xE1A00000,        // nop
    0xE59FF018,        // ldr     PC, [PC,#0x0018]
    0xE59FF018,        // ldr     PC, [PC,#0x0018]
    Reset_Handler,
    Undef_Handler,
    SWI_Handler,
    PAbt_Handler,
    DAbt_Handler,
    0,                 // Reserved
    IRQ_Handler,
    FIQ_Handler,
};
しかし、最初の8個を変更する場合ハンドアセンブルしなくてはならないのがいまいちなんだよね。