0

アプリケーションからブートローダーにジャンプしたい (Bluetooth 経由でロードし、ブートローダーにジャンプするアプリケーション コマンドを持っている)。

次の作業:

void* bl = (void *) 0x3c00;
goto *bl;

また

asm volatile { jmp BOOTL ::}

asm volatile { .org 0x3c00
               BOOTL: }

(ただし、コードサイズは 0x3c00 まで大きくなります)

しかし、最も明白なオプション

asm volatile { jmp 0x3c00 ::}

しません (コードも生成しないようです }

理由はありますか?

4

2 に答える 2

0

0x3C00 は 16 ビットのワード アドレスです。

goto を使用している場合は、GCC で 0x7800 を使用します。GCC はバイトアドレス (0x3C00 * 2 = 0x7800) を使用します。

例:

void *bl = (void *) 0x7800;
goto *bl;

次のアセンブリ言語が作成されます (*.lss 出力ファイルを参照)。

c4: 0c 94 00 3c jmp 0x7800 ; 0x7800 <__スタック+0x6d01>

于 2014-08-11T20:49:34.780 に答える