OpenEdv-开源电子网

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

02_ledc实验中,delay函数的参数不加volatile,Makefile中加入-O2优化,无法实现灯闪烁功能

[复制链接]

4

主题

10

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2020-5-25
在线时间
8 小时
发表于 2020-11-26 23:40:50 | 显示全部楼层 |阅读模式
1金钱
02_ledc实验中,delay函数的参数不加volatile,Makefile中加入-O2优化,无法实现灯闪烁功能,为什么会被优化掉呢?
QQ截图20201126233714.jpg
QQ截图20201126233737.jpg

最佳答案

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

这涉及到编译器的优化功能了,你自己看你的while循环里边什么都没做,那么不加volatile的情况下,编译器会直接将你的变量n变成0,也就是永远都不会进入这个while循环,那么你可以在这个while循环里边执行nop空指令,这样的话n变量就不会直接优化成0了,你可以试试
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

712

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2178
金钱
2178
注册时间
2018-8-27
在线时间
258 小时
发表于 2020-11-26 23:40:51 | 显示全部楼层
这涉及到编译器的优化功能了,你自己看你的while循环里边什么都没做,那么不加volatile的情况下,编译器会直接将你的变量n变成0,也就是永远都不会进入这个while循环,那么你可以在这个while循环里边执行nop空指令,这样的话n变量就不会直接优化成0了,你可以试试
森罗万象
回复

使用道具 举报

3

主题

187

帖子

0

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
558
金钱
558
注册时间
2019-5-22
在线时间
267 小时
发表于 2020-11-27 11:58:04 | 显示全部楼层
你可以翻看下这节视频,有提到o2优化
回复

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2020-5-25
在线时间
8 小时
 楼主| 发表于 2020-11-27 21:36:31 | 显示全部楼层
人淡如菊 发表于 2020-11-27 11:58
你可以翻看下这节视频,有提到o2优化

哪一集?我是想知道-O2为什么会掉while循环的条件呢
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2020-11-1
在线时间
3 小时
发表于 2020-11-28 23:41:29 | 显示全部楼层
不是会优化while,是有运行的顺序。正常来说先用汇编完成C语言的运行环境,再跳转到main函数,加入O2以后,main函数在内存中的地址在汇编的前面,可以生成反汇编文件查看,这样就先运行C语言部分,就出问题了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 19:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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