Volatile
volatile按照字面上的意思就是短暫的,容易改變的意思。
這個關鍵字的用法在embedded system上面是具有相當的意義在裡面,算是開發者必備的。
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;
這個關鍵字的用法在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對一般最佳化可能採取的作法為何,並做出適當的宣告。
沒有留言:
張貼留言