mbedのLPC 1768ボード(皮質M3 CPU付き)を使用していますが、ここで何かを達成しようとしていますが、主にSDカードからユーザアプリケーションをアップグレードしています。ブートローダ/ナノカーネル、およびユーザーのアプリ(スタートのために行いますhelloworldの):0x00のアドレスの実行時Cortex M3用ブートローダ
- ブートローダ/ナノカーネル、それはいくつかのチェックを行い、最終的にはSD上のバイナリファイルをつかむだろうカード
- Bootloader/nano-kernelはこのバイナリをアドレス0x9000にコピーします(後で変更する必要があるかもしれませんが、このスペースはブートローダ/ nanoカーネルでは使用されていません)ので、
- ブートローダは0x9000 + 4でユーザアプリケーションにジャンプします
Sdカードは非常に簡単に実行できます。ジャンプする部分に問題があります。ここにジャンプ関数のコードがあります。
void run(void) {
void (*user_code_entry)(void);
unsigned *p;
SCB->VTOR = (USER_FLASH_START & 0x1FFFFF80);
// Load contents of second word of user flash - the reset handler address
// in the applications vector table
p = (unsigned *)(USER_FLASH_START +4); // USER_FLASH_START is 0x9000
user_code_entry = (void (*)(void))p;
// Jump to user application
user_code_entry();
}
だから私は(私はKeil社のuvision4を使用しています)、0x9000というの開始アドレスを変更するユーザー・アプリケーションをコンパイルしています。 (flashmagictoolを使って)私の掲示板をプログラムしてから手動で(flashmagictoolを使って)0x9004(0x9000 + 4)にジャンプすると、ユーザーアプリケーションが実行されるので、コンパイルがうまくいき、0x9000で実行できます。
しかし、私がブートローダ/ナノカーネルを実行した場合、このアプリケーションはユーザアプリケーションにジャンプせず、残念ながらデバッグできないため、何が起こっているのか分かりません。 SDコピー部分を使用するので、ブートローダーを最初にプログラミングして、基本的に0x9004にジャンプします。私は0x9000に座るユーザーアプリケーションをプログラミングします。ボードを再起動すると、ブートローダは動作しますが、user-appにジャンプしません。私はメモリをチェックしており、両方のプログラム(bootloader + user-app)が正しい場所にあるようです。
私はここに何かが欠けていると確信しています、私は見ている必要があります低レベルのコードはありますか?私はオンラインのドキュメントの音色を読みました。私が見つけた例から、彼らは私と同じ方法でユーザーコードにジャンプしています...何か助けてくれてありがとう。
これはPC上でも同様に動作しますが、物理アドレスではなく仮想アドレスで動作するようにしてください。コードをKeilに移動 – Ulterior
Cortex M3にはMMUがないため、仮想アドレスはありません。 –