[問題] 請教兩種語法

看板C_and_CPP作者 (1)時間11年前 (2013/12/08 04:43), 編輯推噓1(1011)
留言12則, 3人參與, 最新討論串1/4 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 問題(Question): 都是在embedded system的code裡面看到的 1. 程式碼: http://codepad.org/UFsAKQ7r 想請教第8行的 *((volatile unsigned long *) 會使用#define應該就是像const一樣,不想讓值再變動了不是嗎? 請問這樣的寫法是什麼目的呢? 我在那份code上做第13,14行的事情,真的可以改掉TEST_1的值 但自己在Linux上build code是會有問題的 請問這個語法的意思是什麼呢? 2. 程式碼: http://codepad.org/mUyMmPjd 想請教第7行的 __attribute__ ((section (".ddrtable"))) 請問加這段code的目的是什麼呢? 以上,麻煩大家給小弟指點一下迷津 感謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.176.221.68

12/08 12:51, , 1F
1. 就轉型阿. 一般不能用是記憶體位址是未知的
12/08 12:51, 1F

12/08 12:51, , 2F
2. 這個應該 Google 就有了...
12/08 12:51, 2F

12/08 12:53, , 3F
此外這裡的 TEST_1 的值是會變動的
12/08 12:53, 3F

12/08 22:34, , 4F
謝謝!
12/08 22:34, 4F

12/09 10:58, , 5F
1. volatile 讓 compiler 不要針對它的存取做最佳化
12/09 10:58, 5F

12/09 11:01, , 6F
例如連續寫兩行 TEST_1=2; TEST1=3; 如果沒有 volatile
12/09 11:01, 6F

12/09 11:03, , 7F
compiler會認為前面那個TEST_1=2是多餘的而不編譯進去
12/09 11:03, 7F

12/09 11:04, , 8F
但這可能是個硬體暫存器,必須要先寫2再寫3才能正確運作
12/09 11:04, 8F

12/09 11:05, , 9F
加上 volatile, compiler 就會忠實地把這兩行編譯進去
12/09 11:05, 9F

12/09 11:06, , 10F
(寫完才發現後面有人回答了)
12/09 11:06, 10F

12/09 11:06, , 11F
前面有筆誤 TEST_1=2; TEST_1=3 (寫到同一個位址)
12/09 11:06, 11F

12/09 23:43, , 12F
Thank you!
12/09 23:43, 12F
文章代碼(AID): #1Ie_ZZsZ (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 4 篇):
問題
1
12
文章代碼(AID): #1Ie_ZZsZ (C_and_CPP)