The order of volatile accesses is undefined in this statement 경고 메시지
기술노트 99411
아키텍처:
All
컴포넌트:
compiler
업데이트:
2021-05-12 오전 4:13
소개
C문장에서 두개 이상의 변수가 volatile 이면 발생하는 경고 메시지 입니다.
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement
경고 메시지 자체에 중요한 정보가 있습니다 ...order of volatile accesses is undefined... 즉, IAR C/C++ 컴파일러는 정의되지 않은 순서대로(ISO/ANSI 표준을 따르기에) 변수에 접근합니다.
논의
일반적으로 volatile
는 프로그램의 여러 스레드에서 접근하는 변수들과 칩 내부/외부의 연결인 특수 기능 레지스터에 사용됩니다. 이 C문장에서 volatile
변수가 어떻게 사용되는지 연구하여 변경해야 하는지 여부를 결정합니다.
경고 메시지를 피하기 위해선 C문장을 분리해야 합니다. 그리하여 분리된 각 C문장은 오직 하나의 volatile
변수에만 접근하도록 합니다.
다음 예제에서 변수 internalChannelSelect
와 ADC
는 volatile 입니다. 따라서 Warning[Pa082] 경고 메시지가 생성됩니다:
intAnalogSample[internalChannelSelect] = ADC[internalChannelSelect];
임시 변수들은 volatile이 아닙니다. 따라서 다음과 같이 수정하여 C 소스코드를 예측 가능하게 만들 수 있습니다:
int i;
int k;
i = internalChannelSelect;
k = ADC[i];
intAnalogSample[i] = k;
결론
경고 메시지를 피하기 위해선 C문장을 분리해서 작성합니다. 그리하여 분리된 각 C문장은 오직 하나의 volatile
변수에만 접근하도록 합니다.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.