OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3251|回复: 4

在学习FSMC的时候遇到的一个细节问题——优化与防止优化

[复制链接]

16

主题

28

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-7-13
在线时间
16 小时
发表于 2016-8-2 21:46:10 | 显示全部楼层 |阅读模式
2金钱
在学习TFTLCD的时候,发现读LCD数据函数中有一条语句的备注是”防止被优化“
请问各位,这里的优化是什么意思?为什么要防止被优化?
新建位图图像 (2).jpg

最佳答案

查看完整内容[请看2#楼]

vu16就是volatile u16. 搜索volatile会有一定介绍。 其实还是缓存的问题。MCU内核为了提高运算速度,会将一些变量放到cache里,(CPU同理), 这样对该变量读写的速度都会大大提高。但是有些情况这种优化反而会带来问题。 比如某个变量其实是IO口(IO口对MCU来说也就是一个地址,所以也是一个变量),其值为0X00 如果把这个变量放到cache里,那么每次读写,MCU都到cache里去改变,但是IO口有可能会被外部电信号改变, 比如 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8024
金钱
8024
注册时间
2014-8-13
在线时间
1595 小时
发表于 2016-8-2 21:46:11 | 显示全部楼层
本帖最后由 mack13013 于 2016-8-3 10:56 编辑

vu16就是volatile u16.
搜索volatile会有一定介绍。

其实还是缓存的问题。MCU内核为了提高运算速度,会将一些变量放到cache里,(CPU同理),
这样对该变量读写的速度都会大大提高。但是有些情况这种优化反而会带来问题。
比如某个变量其实是IO口(IO口对MCU来说也就是一个地址,所以也是一个变量),其值为0X00
如果把这个变量放到cache里,那么每次读写,MCU都到cache里去改变,但是IO口有可能会被外部电信号改变,
比如外部有一个引脚被拉高了,IO口的值变为0x02了,
此时MCU检测到程序里并没有任何操作对其写入,就会认为IO口没有变化,就会仍然使用cache里的值0x00,
不会将IO口的状态更新到cache里去,但是现在的IO值其实已经是0x02了,这样就会出问题。

添加volatile修饰,就是说该变量不允许被放到cache里去,每次对该变量的读写,都要实实在在的到该变量的实际地址里去读写。

用到volatile的地方还有(高级操作系统,比如Windows,Lunix或者MAC,UNIX),比如两个进程A、B对统一内存区域读写,进程A从该内存读取了之后,过了一段时间又要从该内存读取,
然而系统觉察到进程A在两次读取之间对该内存并没有进行写入操作,就会认为该内存的数据没有变化,就不会再去读取,直接使用
上次读取的数据(极有可能被CPU做了cache,从cache读取要快的多),但实际上有可能进程B在期间做了写入。此时使用volatile,
就会强制进程读取的时候一定是去内存区域读取,不是从cache读取,避免出错。
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-8-3 10:13:58 | 显示全部楼层
在MDK中可以设置你的程序优化等级,你如果选择-O0,-O1,-O2,-O3。等级越高优化越明显,但是优化也会带来一些问题,比如你默认用的-O0,但是选择-O2的话你的代码就会跑不下去了,或者出问题。
开往春天的手扶拖拉机
回复

使用道具 举报

16

主题

28

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-7-13
在线时间
16 小时
 楼主| 发表于 2016-8-3 14:41:24 | 显示全部楼层
回复

使用道具 举报

16

主题

28

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-7-13
在线时间
16 小时
 楼主| 发表于 2016-8-12 08:39:21 | 显示全部楼层
mack13013 发表于 2016-8-2 21:46
vu16就是volatile u16.
搜索volatile会有一定介绍。

谢谢您
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 00:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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