2017-04-21 9 views
-3

STM32를 시작하면 포인터로 가리키는 struture에 메모리를 할당하려고합니다. 분해에 찾고STM32에서 memset 호출시 Hardfault 예외

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

은, 내가 ... 레지스터에서 다른 ARM 웹 사이트 나 구글이나에 STMCS 명령 지옥을 설명하는 문서를 찾을 수 없습니다

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

라인에 항상 충돌 그 점은

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

입니다. 변경하지 않고 호출을 다른 루틴으로 옮기려고했는데, 정렬을 검사했는데 그 또한 괜찮은 것 같습니다. 프로그램이 그 라인에 충돌 할 때마다 HardFault와 충돌하고 일부 디버그 변수에 따라 워치 독 리셋으로 인한 것입니다 ...

이 라인은 무엇을하고 아이디어를 가지고 있으며, 무엇이 단단한 결점을 일으키는가?

+5

당신은 포인터'LxbEvents'을 가지고 있습니다. –

+0

'r0', 그래서 어딘가에 SRAM에 0x2000D694 메모리 뷰어를 사용하면 0이 모두있는 것을 볼 수 있습니다. – Aeonos

+0

사용하기 전에 선언하십시오! – CinCout

답변

2

STMCS 그것은 당신이 ARM 모드에서 코드를 컴파일하는 것 (기본 명령이 STM하고 CSconditional instruction suffix이다)는 ARM 명령어이지만, STM32는 코어 텍스 M의 핵심입니다 만 Thumb-2 명령어 세트의 변형을 지원합니다. 설정 및 컴파일 스위치를 다시 한 번 확인하십시오.

+0

정보 주셔서 감사합니다. ARM Compiler v6.6을 사용하여 Keil μVision에서'--cpu Cortex-M3'플래그를 사용하여 컴파일한다. – Aeonos