:::


Browsing this Thread:   1 Anonymous Users






中斷所使用的變數需加 volatile 的疑問
#1
新會員
新會員


查看用戶資訊
您好

XC8T的文件提到
"中斷所使用的變數需加入 volatile 的宣告"
請問是任何會在中斷函數內 用到的變數都需 加入 volatile 的宣告 嗎?
或是 有關 暫存器的變數才需加入??

發表於: 9/7 16:52
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 中斷所使用的變數需加 volatile 的疑問
#2
資深會員
資深會員


查看用戶資訊
參考一下 維基 對 volatile的解釋

想像一下 變數 在主程式只是作為跳躍判斷的依據而不會有任何變更(只在中斷內變更)
此時如沒下 volatile宣告, 變數不就被 "最佳化" 給幹掉了 ?

.

發表於: 9/8 2:04
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 中斷所使用的變數需加 volatile 的疑問
#3
新會員
新會員


查看用戶資訊
Hi Beee ,

所以 若在程式裡有變更 "變數" 的值的程式碼, 這個變數 就不需加"volatile " 的宣告
我這樣的理解 是否正確??

發表於: 9/8 9:58
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 中斷所使用的變數需加 volatile 的疑問
#4
版主
版主


查看用戶資訊
volatile變數,就是在主程式以外,有可能會被改變值的變數。
所以,只要是在中斷程序中會被改值的變數,都應該把它宣告為volatile變數,否則可能C compiler在把程式最佳化時,會把一些絛件看起來一定不會成立的程序省略掉。
例如:
A = 1;
if (A==0)
{
LED = 1;
}
如果沒有把A宣告為volatile,則 if之後的所有程序都有可能會被移除。

另外,Special Function Register也有機會在不經過程式運行的情形下產生改變,所以,C compiler也會先行把它們宣告成volatile。

發表於: 9/8 10:24

Edited by Steven on 2020年09月08日 12:03:02
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 中斷所使用的變數需加 volatile 的疑問
#5
新會員
新會員


查看用戶資訊
版主

看起來是因為 C compiler 在把程式最佳化時出現意外的結果
那在 C compiler 有無什麼設定, 可以不做這類的最佳化???

發表於: 9/8 17:31
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 中斷所使用的變數需加 volatile 的疑問
#6
版主
版主


查看用戶資訊
Project Properties -> XC8 Global Options -> XC8 Compiler -> Option categories -> Optimizations

參照:

jhlarn wrote:
版主

看起來是因為 C compiler 在把程式最佳化時出現意外的結果
那在 C compiler 有無什麼設定, 可以不做這類的最佳化???

發表於: 9/9 8:45
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 中斷所使用的變數需加 volatile 的疑問
#7
新會員
新會員


查看用戶資訊
Hi 版本

不做任何的 Optimizations 嗎?

即 Optimizations 選 0 嗎??

發表於: 9/14 9:45
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 中斷所使用的變數需加 volatile 的疑問
#8
版主
版主


查看用戶資訊
參照:

jhlarn wrote:
Hi 版本

不做任何的 Optimizations 嗎?

即 Optimizations 選 0 嗎??


是的。

發表於: 9/14 10:06
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You can attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

http://elearning.microchip.com.tw/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

課程 - 台北教育訓練中心
課程 - 新竹教育訓練中心
課程 - 高雄教育訓練中心
教育訓練中心介紹
購買 - 實驗工具
臺灣實驗板介紹與資源