[STM32F1] 一百种方法不如一句volatile

[复制链接]
930|10
 楼主| shipeng1989 发表于 2020-3-22 16:54 | 显示全部楼层 |阅读模式
本帖最后由 shipeng1989 于 2020-3-24 18:17 编辑

移植了网上的一个FSMC驱动LCD程序,由于硬件也完全照抄,代码拷下来后几乎不用改动在STM32CubeIDE环境下直接debug编译就直接出了显示。调整了一下显示界面后准备换为Release编译看。谁能想到居然白屏了!立即mother fucker,Holly shit,卧槽全招呼上,然而它却不为所动。不过换回debug编译它还是能正常显示的这就让我大概猜到了问题出现的原因了,应该是编译器优化导致的。起初我一直以为是优化后导致的执行速度太快导致LCD时序出错才白屏。百度了一下不知道是不是因为我这个问题不好描述还是真没什么人遇到过,网上搜索结果寥寥无几。只看到一篇说白屏可能是FSMC时序配置太快了导致的,但是我这个debug状态是可以正常显示和他的情况应该不太一样,在尝试修改了几次FSMC的时序配置后都无功而返。差点就准备在每句LCD读写操作后都加一条延时语句了。可这不是我的性格,我严重鄙视这种做法,因为它太笨缺乏创造性,还会严重牺牲显示刷新速度不到万不得已我绝不妥协。最后还是想到了volatile这个阻止编译器优化的“特效药”。只需两句volatile便药到病除,久违的显示就出来了。
//LCD地址结构体
typedef struct
{
volatile u16 LCD_REG;
volatile u16 LCD_RAM;
} LCD_TypeDef;

mmuuss586 发表于 2020-3-24 10:15 | 显示全部楼层
zchong 发表于 2020-3-30 07:43 来自手机 | 显示全部楼层
也许是“特效药”,但不是“万能药”,提高医术,对症下药,仍然是解决各种问题的寻常路。
東南博士 发表于 2020-3-30 10:03 | 显示全部楼层
看来 以后所有的变量都加上 volatile  就是万能良方了!

楼主难道没有试过IAR吗?

这个要更好一些!
 楼主| shipeng1989 发表于 2020-3-31 08:15 | 显示全部楼层
東南博士 发表于 2020-3-30 10:03
看来 以后所有的变量都加上 volatile  就是万能良方了!

楼主难道没有试过IAR吗?

收费的软件都不敢用了,被奥腾坑过有阴影,volatile会降低编译器的优化效率慎用
kkzz 发表于 2020-4-1 20:05 | 显示全部楼层
shipeng1989 发表于 2020-3-31 08:15
收费的软件都不敢用了,被奥腾坑过有阴影,volatile会降低编译器的优化效率慎用 ...

AVRstduio一样           
xiaoqizi 发表于 2020-4-7 13:43 | 显示全部楼层
非常感谢楼主分享
磨砂 发表于 2020-4-7 13:44 | 显示全部楼层
非常感谢楼主分享
晓伍 发表于 2020-4-7 13:44 | 显示全部楼层
非常感谢楼主分享
八层楼 发表于 2020-4-7 13:44 | 显示全部楼层
非常感谢楼主分享
观海 发表于 2020-4-7 13:45 | 显示全部楼层
非常感谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

140

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部