不加volatile能使时间变快?想不明白。
基本环境:IAR7.4,野火库,K60F15芯片,跑的鹰眼摄像头采集和LCD显示。另外开了PIT0 10ms 定时,对系统时间这个变量++。现象
1、不对系统时间这个变量加volatile修饰的时候,把用来打印时间的printf放到PIT中,时间是正常的,而放到主函数大循环中,PIT中只有系统时间++和清中断的语句,时间却变快了大约2倍。
2、考虑到可能是volatile的问题,于是对系统时间加了volatile修饰,结果都正常了。
我想不明白,不加volatile最多是编译器优化掉那句代码,时间变慢或者不变,怎么会变快了?
volatile关键字指示编译器在每一次操作变量时都从其原始地址去取数据。 lingdianhao 发表于 2015-8-2 21:54
volatile关键字指示编译器在每一次操作变量时都从其原始地址去取数据。
还是不明白为什么会变快,加了volatile就好了,好奇怪。。 建议看看汇编的代码,不用volatile的时候,有可能直接从寄存器取值,这个值到底是什么就不好说了 中断中翻转个IO,接个示波器测试一下,从程序层面来看,必须要加 volatile,不过时间查一倍,确实有点蹊跷 不加volatile编译器会认为部分语句是无用的,会优化掉 谢谢搂住分享经验,学习了! 你既然用 volatile,就先要知道它用来干什么, 而不是糊里糊涂用了它,然后问别人为什么用了它会变成这样。 not_at_all 发表于 2015-8-3 11:28
你既然用 volatile,就先要知道它用来干什么, 而不是糊里糊涂用了它,然后问别人为什么用了它会变成这样 ...
不是用了为什么这样,而是不用为什么会这样。用了是正常的,不用是错误的,想不通原因。 a136498491 发表于 2015-8-3 19:51
不是用了为什么这样,而是不用为什么会这样。用了是正常的,不用是错误的,想不通原因。 ...
还是自己看看这个关键字起什么作用吧。 当年也是碰到程序debug版本运行结果是预期的, release版本的程序结果根本不出来。 那是第一次用到这个关键字。 那就对了 用这个关键字 就从原始地址读数据,否则有可能被编译器优化掉。 估计是编译器的问题 volatile影响系统编译的时候对变量的处理方法,中断里面的变量最好用volatile修饰,我亲自做过实验,真的不一样,最好让系统每次都加载数据 学习了..........
页:
[1]