比如这个g_ucbDataReceivedFlag变量,在程序里当作标志,有正常使用,但是这种情况下就被优化掉了,除非加了
volatile关键字,所以有个疑问就是,编译器什么情况下会优化掉变量?如何来规避这个问题?这种很容易导致出问题不好排查。
热门产品 :
CH339: 7端口多功能USB HUB控制器芯片
比如这个g_ucbDataReceivedFlag变量,在程序里当作标志,有正常使用,但是这种情况下就被优化掉了,除非加了
volatile关键字,所以有个疑问就是,编译器什么情况下会优化掉变量?如何来规避这个问题?这种很容易导致出问题不好排查。
觉得有一丝丝觉得该加 volatile的地方,我就加上。
有种盲猜的感觉,volatile也不能滥用,应该要清晰的知道什么时候会被优化掉。
您好,MRS默认启用的是Os的优化级别,会启用大量优化pass来减少代码尺寸,如果您没有这个需求可以改变为O0。
另volatile关键字单片机程序中一般可用于只在中断中改变全局变量标志,强制从内存读取变量或寄存器,循环标志等时使用。
看上去这是个全局变量。那么,除非开了 -flto,否则不可能被优化掉。
当然,要是你访问这个变量的代码,整体都没被调用,那就当我没说好了。
程序中有使用,默认的Os优化级别,没开flto。
不想让编译器优化的变量要加volatile,这个是C语言开发常识。