[t:/]$ 지식_

컴파일러 최적화와 브레이크 포인트 문제.

2009/04/09

환경

IAR Cortext M3 STM320

현상

breakpoint가 아예 안 잡힌다. 로컬 변수의 watch가 동작하지 않는다.

원인

volatile 문제와 유사하다. 컴파일러가 로직상 절대로 동작하지 않을 것 같은 코드를 통째로 날리기 때문이다. 해당 코드 부분에 브레이크포인트를 걸려고 하면 걸리지 않는다.

마찬가지로 지역 변수에 대해서도 워치가 걸리지 않는다.

상세

a = 0;      // 특정 포트 값 감시, 레지스터 값 감시 일때는 변해야 하지만...
if (a) {
    궁시렁.. 궁시렁  // 논리적으로 실행이 안 되는 영역이며 컴파일시 최적화 제거된다.
}

해결

최적화 수준을 낮추고 개발하고 최적화 수준을 올리면서 테스트, 검증한다. 각종 모니터링 변수에 대해서는 volatile 키워드를 적절히 활용한다.









[t:/] is not "technology - root". dawnsea, rss