Re: 中斷所使用的變數需加 volatile 的疑問
|
||||
---|---|---|---|---|
版主
|
參照:
是的。
發表於: 2020/9/14 10:06
|
|||
|
Re: 中斷所使用的變數需加 volatile 的疑問
|
||||
---|---|---|---|---|
初級會員
|
Hi 版本
不做任何的 Optimizations 嗎? 即 Optimizations 選 0 嗎??
發表於: 2020/9/14 9:45
|
|||
|
Re: 中斷所使用的變數需加 volatile 的疑問
|
||||
---|---|---|---|---|
初級會員
|
版主
看起來是因為 C compiler 在把程式最佳化時出現意外的結果 那在 C compiler 有無什麼設定, 可以不做這類的最佳化???
發表於: 2020/9/8 17:31
|
|||
|
Re: 中斷所使用的變數需加 volatile 的疑問
|
||||
---|---|---|---|---|
版主
|
volatile變數,就是在主程式以外,有可能會被改變值的變數。
所以,只要是在中斷程序中會被改值的變數,都應該把它宣告為volatile變數,否則可能C compiler在把程式最佳化時,會把一些絛件看起來一定不會成立的程序省略掉。 例如: A = 1; if (A==0) { LED = 1; } 如果沒有把A宣告為volatile,則 if之後的所有程序都有可能會被移除。 另外,Special Function Register也有機會在不經過程式運行的情形下產生改變,所以,C compiler也會先行把它們宣告成volatile。
發表於: 2020/9/8 10:24
Edited by Steven on 2020年09月08日 12:03:02
|
|||
|
Re: 中斷所使用的變數需加 volatile 的疑問
|
||||
---|---|---|---|---|
初級會員
|
Hi Beee ,
所以 若在程式裡有變更 "變數" 的值的程式碼, 這個變數 就不需加"volatile " 的宣告 我這樣的理解 是否正確??
發表於: 2020/9/8 9:58
|
|||
|
Re: 中斷所使用的變數需加 volatile 的疑問
|
||||
---|---|---|---|---|
資深會員
|
參考一下 維基 對 volatile的解釋
想像一下 變數 在主程式只是作為跳躍判斷的依據而不會有任何變更(只在中斷內變更) 此時如沒下 volatile宣告, 變數不就被 "最佳化" 給幹掉了 ? .
發表於: 2020/9/8 2:04
|
|||
|
中斷所使用的變數需加 volatile 的疑問
|
||||
---|---|---|---|---|
初級會員
|
您好
XC8T的文件提到 "中斷所使用的變數需加入 volatile 的宣告" 請問是任何會在中斷函數內 用到的變數都需 加入 volatile 的宣告 嗎? 或是 有關 暫存器的變數才需加入??
發表於: 2020/9/7 16:52
|
|||
|