C优化注意事项,中断优化O2

项目场景:

OP操作面板,flash空间不够用,需要优化代码,然后采取优化方式O2,编译通过,但却无法运行


问题描述

`接着上一个话题OP操作面板,一个主机linux+一个单片机OP,二者通过I2C进行通信。具备升级功能。单片机的flash空间位128K,我的设计方案是30K的boot+45K的app运行空间+45K的app备份空间,另外的8K空间用于用户数据存储。
也就是说真正运行代码空间只有45K,虽说flash位128K的。
那这个时候就需要进行代码的优化,采取编译器的O2优化方案。原本41K的运行空间被优化后为35K的空间。感觉不错,烧写代码,发现根本不能用,单步调试根本也没用。



原因分析:

`经过注释分析发现定时器那里出现问题。
在这里插入图片描述
通过定时器我会制作不同时间的标记,注意,volatile 是后来解决问题加入的
在这里插入图片描述

解决方案:

通过加入volatile 完美解决。

学习感悟:

我们学C的时候都知道,volatile是什么意思,易挥发的,容易改变的,面试的时候也会被问到,但是不经历这种问题是不会深刻理解的。中断中的变量时刻会被改变
最后来一个总结:在中断中用到的变量全部都加上volatile。而如果是全局标记的变量,不怎么参与逻辑的变量也要加上,防止被优化掉,编译器认为这个不用的变量而舍弃

下次我们来聊聊const volatile 的多线程使用方式

爱你的“世外桃源”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值