欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: keil4里面用volatile定義的函數與一般函數有什么不同 [打印本頁]

作者: PDDDF    時間: 2020-5-8 14:52
標題: keil4里面用volatile定義的函數與一般函數有什么不同
如題,volatile用于定義變量的作用是防止變量在賦值的過程中被優化,那用在函數定義上的作用是什么呢?是類似的防優化嗎?求大佬告知

作者: OHHO    時間: 2020-5-8 21:47
沒在keil里用過volatile。C里面倒是學過一點。接觸的不多,若有錯誤還請指正。
舉個例子就是比如存在一個變量temp,例如實時的時鐘值,你第一次調用的時候這個值是19:00,下一次調用因為時間發生走動可能是19:01。這類變量在程序運行的過程中本身因為讀寫之類的原因就會發生改變,而這時候編譯器的流程認為這個變量是沒有發生改變的,因此對于一些語句就會進行優化,比如將該變量連續賦值給一個變量a兩次:
a=temp;
a=temp;
如果temp是常規的變量,在這個過程中并沒有引起temp的改變,因此第二句語句實際上是一個無效語句,在編譯時他會被優化。現在你把temp定義為volatile,那么如果外部器件對這個變量相關的信息進行讀寫改變了程序中的數據,而這種改動又不是程序里可以獲取到信息的(比如中斷函數,提前寫好了信息),那么他就會保留不去做這種優化。因為這時候你傳遞出一個temp會被改動的信息,如果優化了,可能導致最后的賦值出錯。
作者: PDDDF    時間: 2020-5-9 17:05
OHHO 發表于 2020-5-8 21:47
沒在keil里用過volatile。C里面倒是學過一點。接觸的不多,若有錯誤還請指正。
舉個例子就是比如存在一個 ...

謝謝,講的很清晰




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1