找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1745|回复: 2
打印 上一主题 下一主题
收起左侧

keil4里面用volatile定义的函数与一般函数有什么不同

[复制链接]
跳转到指定楼层
楼主
ID:601478 发表于 2020-5-8 14:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,volatile用于定义变量的作用是防止变量在赋值的过程中被优化,那用在函数定义上的作用是什么呢?是类似的防优化吗?求大佬告知
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:686782 发表于 2020-5-8 21:47 | 只看该作者
没在keil里用过volatile。C里面倒是学过一点。接触的不多,若有错误还请指正。
举个例子就是比如存在一个变量temp,例如实时的时钟值,你第一次调用的时候这个值是19:00,下一次调用因为时间发生走动可能是19:01。这类变量在程序运行的过程中本身因为读写之类的原因就会发生改变,而这时候编译器的流程认为这个变量是没有发生改变的,因此对于一些语句就会进行优化,比如将该变量连续赋值给一个变量a两次:
a=temp;
a=temp;
如果temp是常规的变量,在这个过程中并没有引起temp的改变,因此第二句语句实际上是一个无效语句,在编译时他会被优化。现在你把temp定义为volatile,那么如果外部器件对这个变量相关的信息进行读写改变了程序中的数据,而这种改动又不是程序里可以获取到信息的(比如中断函数,提前写好了信息),那么他就会保留不去做这种优化。因为这时候你传递出一个temp会被改动的信息,如果优化了,可能导致最后的赋值出错。
回复

使用道具 举报

板凳
ID:601478 发表于 2020-5-9 17:05 | 只看该作者
OHHO 发表于 2020-5-8 21:47
没在keil里用过volatile。C里面倒是学过一点。接触的不多,若有错误还请指正。
举个例子就是比如存在一个 ...

谢谢,讲的很清晰
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表