환경
IAR Cortext M3 STM320
현상
breakpoint가 아예 안 잡힌다. 로컬 변수의 watch가 동작하지 않는다.
원인
volatile 문제와 유사하다. 컴파일러가 로직상 절대로 동작하지 않을 것 같은 코드를 통째로 날리기 때문이다. 해당 코드 부분에 브레이크포인트를 걸려고 하면 걸리지 않는다.
마찬가지로 지역 변수에 대해서도 워치가 걸리지 않는다.
상세
a = 0; // 특정 포트 값 감시, 레지스터 값 감시 일때는 변해야 하지만...
if (a) {
궁시렁.. 궁시렁 // 논리적으로 실행이 안 되는 영역이며 컴파일시 최적화 제거된다.
}
해결
최적화 수준을 낮추고 개발하고 최적화 수준을 올리면서 테스트, 검증한다. 각종 모니터링 변수에 대해서는 volatile 키워드를 적절히 활용한다.