1、volatile內存映射的I/O端口,或者是硬件寄存器,每次都是重新讀取這個變量的值,在中斷服務程序中使用的非自動變量,或者多線程應用程序多個任務共享的變量也必須用到volatile進行限定。必須使用volatile的實例(但是這里沒有使用):
int flag=0;//這里定義的全局變量或者static定義的局部變量都是非自動變量
void f( )//在f( )函數中沒有修改flag,只執行一次將flag=0緩存在寄存器當中,以后每次訪問flag都使用緩存值 而不對存儲器的絕對地址訪問
{
while(1)
{
if(flag) //
some_avtion();
}
}
void isr_f( )//這個是中斷處理程序
{
flag=1; //中斷或者外部硬件使得他為1,緩存的寄存器檢測不到,那兒的flag一直是0
}
|