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 변수에만 접근하도록 합니다.

다음 예제에서 변수 internalChannelSelectADC 는 volatile 입니다. 따라서 Warning[Pa082] 경고 메시지가 생성됩니다:

intAnalogSample[internalChannelSelect] = ADC[internalChannelSelect];

 

임시 변수들은 volatile이 아닙니다. 따라서 다음과 같이 수정하여 C 소스코드를 예측 가능하게 만들 수 있습니다:

int i;
int k;
i = internalChannelSelect;
k = ADC[i];
intAnalogSample[i] = k;

결론

경고 메시지를 피하기 위해선 C문장을 분리해서 작성합니다. 그리하여 분리된 각 C문장은 오직 하나의 volatile 변수에만 접근하도록 합니다.

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

 

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.