나는 단지 volatile
키워드의 개념을 살펴 보았습니다. 방금 this link을 거쳤습니다.이 링크는 인터럽트 처리기를 사용하는 프로그램의 경우 volatile
키워드를 사용해야하는 이유에 대해 알려줍니다. 그들은 하나의 예에서 언급 한 : 컴파일러 ext_rcvd
인터럽트 핸들러에서 업데이트지고 알 수없는 때문에전역 변수가 다른 스레드에 의해 변경되면 컴파일러가 어떻게 감지하지 못합니까?
int etx_rcvd = FALSE;
void main()
{
...
while (!ext_rcvd)
{
// Wait
}
...
}
interrupt void rx_isr(void)
{
...
if (ETX == rx_char)
{
etx_rcvd = TRUE;
}
...
}
그들은 말하고있다. 따라서 컴파일러는 최적화 인텔리전스를 사용하며이 변수 값은 항상 FALSE
이고 while{}
조건을 입력하지 않는다고 가정합니다. 따라서 이러한 상황을 방지하기 위해 우리는 volatile
키워드를 사용하여 컴파일러가 자체 인텔리전스를 사용하지 못하게합니다.
내 질문은 컴파일러가 어떻게하면 ext_rcvd
이 인터럽트 처리기에서 업데이트되고 있는지 알 수 없다는 것입니다. 내가 그 대답을 찾을 수 있도록 도와주세요, 나는 이것에 대한 정답을 얻지 못하고 있습니다.
하지만 내 질문은 어떻게 컴파일러가 변수가 interupt 처리기에 의해 업데이트되고 있는지 알 수 없습니다. 같은 일이 멀티 스레드의 경우, 컴파일러는 두 번째 스레드가이 값을 업데이 트하는 것을 알 수 없습니다. 컴파일은 CPU에서 실행되기 훨씬 전에입니다. –