在C 'Volatile' keyword in ISR and multithreaded program? 中,我有相同的问题,但没有人回答。
此外,Barrgroup.com上的文章How to Use C's volatile Keyword说:
C的volatile关键字是限定符,在声明变量时将其应用于该变量。它告诉编译器变量的值可能随时更改-编译器在附近发现的代码不会采取任何措施。
“附近”非常含糊。
我的问题是:由于编译器实际上知道何时调用ISR以及何时调度其他线程,为什么编译器看不到ISR和其他线程更改的变量?