推 troylee:老實說我覺得這例子不好.. 11/01 20:41
→ mayasky:我只是想給的通用有趣的概念罷了..不如樓上給個real case 11/02 01:56
→ mayasky:記得考量讀者熟哪種arch,你所預計的issue與execute 方式囉 11/02 01:57
→ mayasky:這樣應該你比說這句話有意義:) 11/02 01:58
推 troylee:所以你考量了讀者熟悉的arch, 請問是哪一種arch呢? 11/02 23:45
→ mayasky:因為不知讀者熟哪種,所以抽象化.不特定arch 11/04 01:05
→ mayasky:給個pseudo code即可,相信您念書時很多書也如此:) 11/04 01:06
※ 編輯: mayasky 來自: 1.160.132.131 (11/04 01:26)
推 troylee:一下說要 real case, 一下又要抽象化... 11/04 01:28
→ troylee:一下要考量讀者的熟悉哪種arch, 最後又說不知道他熟哪種 11/04 01:31
→ mayasky:REAL CASE和實作抽象化是兩回事.演算法都不是real case? 11/04 01:33
→ mayasky:但很多演算法書只用pseudo code..這樣回答疑問了嗎? 11/04 01:34
推 troylee:那請問您的real case中, 如何使用到volatile? 11/04 01:35
→ mayasky:很多paper為了讓讀者不管慣用哪種language都可以理解 11/04 01:37
推 troylee:我所謂的例子舉的不好是說前面說 Memory-mapped I/O 最佳 11/04 01:37
→ troylee:化後可能會有問題, 但是後面給的例子卻是 reordering 的 11/04 01:38
→ mayasky:以及考量簡化就會使用pseudo code..這就是考量讀者 11/04 01:38
→ troylee:那如果您要避免這種reordering最佳化, 請問 volatile 是要 11/04 01:38
→ troylee:如何在您的例子上避免呢? 11/04 01:39
→ mayasky:reorder在非I/O應該不會有事...在I/O可能會有事 11/04 01:40
推 troylee:你確定嗎? 11/04 01:41
→ troylee:要避免compiler對這個例子作最佳化, 所以把volatile放在 11/04 01:42
→ mayasky:幾乎確定~可以參考ARM的strongly ordered與device 之設計 11/04 01:42
→ troylee:start_bomb() 前面摟? 11/04 01:42
→ mayasky:基本上這關鍵字就是叫compiler不要幫你最佳化 11/04 01:44
→ mayasky:所以理論上放這前面是ok的..只要他compiler有做 11/04 01:44
→ mayasky:但或許不是每個compiler都有做..甚至有的compiler不接受 11/04 01:45
→ mayasky:如果你想要個真的code..或許哪天我看到我貼一下 11/04 01:46
→ mayasky:compiler啥時想reorder我不知道..一時生不出來 11/04 01:47
※ 編輯: mayasky 來自: 1.160.132.131 (11/04 01:50)
→ mayasky:欲知更詳細..上面wiki似乎有帶到一些.請參閱 11/04 01:51
※ 編輯: mayasky 來自: 1.160.132.131 (11/04 01:55)
推 troylee:謝謝 所以你的例子應該是把 volatile 放在 timer 的regist 11/04 01:57
→ troylee:er 上, 而不是 function 上 11/04 01:57
→ troylee:且應詳述 set timer 與 count down 這兩個的關係 11/04 01:58
→ mayasky:NO~是function上 11/04 02:00
→ mayasky:炸彈的定時和開始倒數.ㄜ.這需要說嗎?好吧.. 11/04 02:01
→ mayasky:當我覺得大家都看過電視中的定時炸彈..我的錯 11/04 02:01
→ mayasky:放在變數上基本上是叫compiler要把這值寫進對應address 11/04 02:02
推 troylee:不過我還真的沒看過 volatile 放在 c 的 function 上 @@ 11/04 02:02
→ mayasky:不然compiler有可能只放在register中.這樣對應的device是 11/04 02:03
→ troylee:可能我真的看得不夠多 抱歉 11/04 02:03
→ mayasky:不會收到你寫進去的訊號的..還是留在reg中 11/04 02:03
→ mayasky:這種關鍵字本來就不常見..與硬體直接相關的code比較常見 11/04 02:05
推 troylee:我只看過他用在 pointer 上. 11/04 02:07
→ mayasky:asm volatile(..)應該常見點.這也是叫compiler不要最佳化 11/04 02:08
→ mayasky:另外不是每個compiler都可以放在function前的樣子 11/04 02:12
→ mayasky:似乎是gcc另外延伸的..發問者應該是用gcc 11/04 02:13