2013年4月1日 星期一

C語言 -- Volatile

Volatile

volatile按照字面上的意思就是短暫的,容易改變的意思。
這個關鍵字的用法在embedded system上面是具有相當的意義在裡面,算是開發者必備的。



Example:

333.    int *p = REGISTER_005_ADDRESS;
334.    int b, c;
335.    
336.    ...
342.    b =*p;
343.    ...
345.    c = *p;
346.    ...

一般來說 register的值可能一直在變動著,當如同上例般的宣告,compiler的optimization功能可能會把第342行和第345行變成 b = c = *p 這樣子的意思,如此一來就可能違背程式一開始的意思,BUG因此產生。

所以應該改宣告為  volatile int *p = REGISTER_005_ADDRESS;


Conclusion

程式設計者必須要很清楚每個變數取得的用法,而且了解compiler對一般最佳化可能採取的作法為何,並做出適當的宣告。

沒有留言:

張貼留言