2017-04-21 90 views
-3

啓動STM32我嘗試爲指針指向的結構分配內存。在STM32上調用memset時的Hardfault異常

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

展望拆卸,它總是崩潰就行

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

我找不到描述ARM的網站或谷歌或其他地方的STMCS指令幽冥文檔... 寄存器在那一點是

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

我試圖將呼叫移動到另一個例程,沒有任何改變,檢查對齊,這似乎也沒關係。每當程序運行到該行時,它會與HardFault崩潰,並根據一些調試變量,它是由看門狗復位引起的,我不相信...

這條線做什麼,並有人的想法,是什麼導致了硬性故障?

+5

你有一個指針'LxbEvents',但它指向哪裏? –

+0

'r0',所以0x2000D694在SRAM中的某處,並使用Memory Viewer,我可以看到所有東西都被清零了 – Aeonos

+0

在使用之前聲明! – CinCout

回答

2

STMCS是ARM指令(基本指令爲STMCSconditional instruction suffix)似乎正在編譯在ARM模式代碼,但STM32是Cortex-M的核心,僅支持Thumb-2指令集的變體。仔細檢查你的設置和編譯開關。

+0

感謝您的信息。我使用ARM Compiler v6.6在KeilμVision中使用'--cpu Cortex-M3'標誌進行編譯 – Aeonos

相關問題