2014-03-19 4 views
1

GCC 4.7.4 및 Lauterbach Combiprobe JTAG 디버거를 사용하여 STM32F2 장치를 개발 중입니다. 필자는 테스트 목적으로 항상 특정 위치에서 중단하라는 다음과 같은 진술을 가지고 있습니다.어셈블리 코드 중단 점이 예상대로 작동하지 않습니다.

asm volatile ("BKPT #0"); 

이것은 유일한 중단 점입니다. 프로그램을 실행하면 프로그램이 중단 점에 도달하는 것을 볼 수 있지만 JTAG 디버거를 사용하여이 중단 점을 넘을 수는 없습니다. 대신 프로그램 실행을 위해이 명령을지나 PC 카운터를 이동해야합니다.

이것은 과거에는 작동했지만 현재 동작이 다른 이유를 알기가 어렵습니다. 모든 단서 또는 힌트를 주시면 감사하겠습니다.

+0

. 프로그램 카운터를 향상 시키면 정상적인 기능으로 돌아옵니다. –

답변

1

깨진 JTAG 디버거가 너무 많습니다. 아마 JTAG 어댑터에 대한 업데이트를 설치하셨습니까?

GDB를 디버거로 사용하면 버튼 또는 키에 set PC=PC+4 매크로를 추가 할 수 있는지 확인할 수 있습니다. 그러나 가능하다면 IDE에 따라 달라집니다.

1

응용 프로그램 코드에 중단 점 명령이있는 경우 프로그램 카운터에서 발생하는 일반적인 규칙은 없습니다. 일부 CPU는 중단 점 명령어가 포함 된 주소에서 중단되고 다른 CPU는 중단 점 명령어 뒤에 중지됩니다.

"lauterbach"태그를 사용하기 때문에 Lauterbach의 TRACE32 디버거를 사용하고 있다고 가정합니다.

이전에 디버거 동작이 다르다고 생각하면 Lauterbach 지원부에 문의해야한다고 생각합니다.

이제 다음 TRACE32 명령

Break.Set T:0x1000 /Program /CMD "Register.Set PP r(PP)+2" 

으로 문제를 해결할 수 있습니다 들어 (어디 BKPT 명령어가있는 주소에 대한 0x1000 인 의미합니다.) 당신이 올바른지 @harper