标题:
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.51hei.com/bbs/)
Powered by Discuz! X3.1