【发布时间】:2014-10-25 15:21:37
【问题描述】:
我刚刚浏览了 volatile 关键字的概念。我刚刚浏览了this link,这个链接讲述了为什么在程序使用中断处理程序的情况下使用volatile 关键字。他们在一个例子中提到过:
int etx_rcvd = FALSE;
void main()
{
...
while (!ext_rcvd)
{
// Wait
}
...
}
interrupt void rx_isr(void)
{
...
if (ETX == rx_char)
{
etx_rcvd = TRUE;
}
...
}
他们说因为编译器无法知道ext_rcvd 在中断处理程序中得到更新。因此编译器使用优化智能并假定此变量值始终为FALSE,并且它永远不会进入while{} 条件。所以为了防止这种情况我们使用volatile关键字,它会阻止编译器使用自己的智能。
我的问题是,编译时,编译器怎么不知道ext_rcvd 正在中断处理程序中更新?请帮我找到它的答案,我没有得到正确的答案。
【问题讨论】:
标签: c optimization compiler-construction compilation interrupt