2017-04-21 8 views
-3

STM32を起動すると、ポインタで指されているストラクチャのメモリを割り当てようとしています。STM32でmemsetを呼び出すときのHardfaultの例外

TLxbEvents *LxbEvents 
memset((void*)LxbEvents, 0, sizeof(TLxbEvents)); 

分解に見ると、それは私がSTMCS命令地獄ARMのウェブサイトやGoogle上または他の場所を記述した文書を見つけることができませんでしライン

STMCS r0!,{r2-r3,r12,lr} 

に常にクラッシュ... レジスタでその点は

r0 0x2000D694 
r2 0x00000000 
r3 0x00000000 
r12 0x00000000 
lr 0x00000000 

私は別のルーチンに変更を加えずに呼び出しを移動しようとしましたが、整列をチェックしても大丈夫と思われます。プログラムがその行に走るたびにHardFaultでクラッシュし、いくつかのデバッグ変数によると、それはウォッチドッグリセットによって引き起こされ、私は信じられません...

この行は何をしているのでしょうか?ハードフォールトの原因は何ですか?

+5

あなたはポインタ 'LxbEvents'を持っていますが、それはどこを指していますか? –

+0

'r0'なので、SRAMのどこかに0x2000D694があり、メモリビューアを使って、ゼロがすべてあることがわかります – Aeonos

+0

使用前に宣言してください! – CinCout

答えて

2

STMCSは(基本命令はSTMで、CSconditional instruction suffixです)ARM命令であるあなたがARMモードでコードをコンパイルしているようだが、STM32は、Cortex-Mコアであり、唯一のThumb-2命令セットのバリエーションをサポートしています。設定とコンパイルスイッチを再確認してください。

+0

情報ありがとうございます。 ARMコンパイラv6.6を使ってKeilμVisionの '--cpu Cortex-M3'フラグを使ってコンパイルします – Aeonos

関連する問題