2017-04-21 1 views
-3

Démarrage d'un STM32 J'essaie d'allouer de la mémoire pour une struture pointée par un pointeur.Exception de faute matérielle lors de l'appel de memset sur STM32

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

En regardant dans le démontage, il se bloque toujours sur la ligne

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

Je ne pouvais pas trouver un document décrivant le Nether d'instructions STMCS sur le site Web ARM ou Google ou ailleurs ... Les registres à ce point sont

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

J'ai essayé de passer l'appel à une autre routine, sans aucune modification, vérifié l'alignement et qui semble aussi bien. Chaque fois que le programme se lance dans cette ligne il se bloque avec un HardFault et selon certaines variables de débogage, il est causé par une réinitialisation de chien de garde, ce que je ne crois pas ...

Que fait cette ligne et a quelqu'un une idée, qu'est-ce qui cause la faute dure?

+5

Vous avez un pointeur 'LxbEvents', mais où pointe-t-il? –

+0

'r0', donc 0x2000D694 quelque part dans SRAM et en utilisant la visionneuse de mémoire, je peux voir que tout est mis à zéro – Aeonos

+0

Déclarer avant d'utiliser! – CinCout

Répondre

2

STMCS est une instruction ARM (instruction de base est STM et CS est le conditional instruction suffix) Il semble que vous compilez votre code en mode ARM, mais STM32 est un noyau Cortex-M et ne supporte que la variante du jeu d'instructions Thumb-2. Vérifiez que vous créez des paramètres et des commutateurs de compilation.

+0

Merci pour l'info. Je compile en utilisant le drapeau '--cpu Cortex-M3' dans Keil μVision en utilisant le compilateur ARM v6.6 – Aeonos