# ISR 공유 데이터 — volatile, 임계구역, 원자 접근
## 문제: ISR과 메인 코드가 같은 변수를 쓴다
ISR과 메인 루프가 동일한 변수를 공유할 때,
컴파일러 최적화와 하드웨어 특성이 맞물려 **예상치 못한 버그**가 발생할 수 있습니다.
```
메인 루프:…
# volatile과 최적화
## 컴파일러 최적화란?
컴파일러는 코드를 더 빠르게 실행되도록 **최적화**합니다.
그 중 하나가 **불필요해 보이는 메모리 접근을 제거**하는 것입니다.
```c
/* 소스 코드 */
uint32_t status;
status = *pReg…