카테고리 없음
임베디드의 c언어 사용시 volatile을 어떻게 사용해야 할까? - 요약
newbeverse
2025. 1. 7. 17:29
volatile은 미국단어입니다. 그러니 많은 나라의 개발자들이 어색해하는걸 이해합니다. 😒
이 단어는 오래전 부터 존재했고, 임베디드에 자주 사용됩니다.
다음의 코드를 예로 들어 보겠습니다.
a = x;
b = x;
이 코드는 컴파일러에서 다음과 같이 변형됩니다.
<reg> = x;
a = <reg>;
b = <reg>;
레지스터에 복사되고 복사본은 후속 작업에 사용됩니다.
일반적으로 x가 특별하지 않다면 괜찮지만, 예상치 모한 방법으로 변경될 수 있을때 위험합니다.
특히 i/o는 값이 실시간으로 변할 수 있습니다. 따라서 x를 휘발성으로 선언해야합니다.
선언은 앞에 휘발성이라는 뜻의 volatile을 붙이면 됩니다.
volatile int* pi1 = 0;
volatile int* pi2 = 0;
위의 코드는 구문적으로는 문제가 없습니다. 단 멀티스레드 환경에서 발생합니다.
volatile x = 1;
x ++;
x가 컴파일되고 휘발성이라면, 만약 시스템에 인터럽트가 발생할 시 잠깐 중지되어 휘발됩니다. 그리고 다시 x값을 추출하겠죠. 컴파일러는 이 과정을 아무것도 모릅니다. 따라서 이럴떄는 volatile을 사용하면 안됩니다. 그러므로 x를 보호 할 수 있는 방법을 만들어야합니다. 문제는 휘발성 언어는 어떤 영향도 없습니다.
반응형