有個疑問,為什么MRS編譯器很喜歡把變量優(yōu)化掉?

image.png

比如這個g_ucbDataReceivedFlag變量,在程序里當作標志,有正常使用,但是這種情況下就被優(yōu)化掉了,除非加了

volatile關(guān)鍵字,所以有個疑問就是,編譯器什么情況下會優(yōu)化掉變量?如何來規(guī)避這個問題?這種很容易導(dǎo)致出問題不好排查。


熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

覺得有一絲絲覺得該加 volatile的地方,我就加上。


有種盲猜的感覺,volatile也不能濫用,應(yīng)該要清晰的知道什么時候會被優(yōu)化掉。


您好,MRS默認啟用的是Os的優(yōu)化級別,會啟用大量優(yōu)化pass來減少代碼尺寸,如果您沒有這個需求可以改變?yōu)镺0。

另volatile關(guān)鍵字單片機程序中一般可用于只在中斷中改變?nèi)肿兞繕酥?,強制從?nèi)存讀取變量或寄存器,循環(huán)標志等時使用。



看上去這是個全局變量。那么,除非開了 -flto,否則不可能被優(yōu)化掉。

當然,要是你訪問這個變量的代碼,整體都沒被調(diào)用,那就當我沒說好了。


程序中有使用,默認的Os優(yōu)化級別,沒開flto。

image.png


不想讓編譯器優(yōu)化的變量要加volatile,這個是C語言開發(fā)常識。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频