keil debug提示not in scope

问题截图:在这里插入图片描述
编译的时候还爆了个警告:…\src\user_main.c(155): warning: #550-D: variable “crc_buffer” was set but never used

我开始是在更改变量类型,从uint32_t改成了uint8_t,uint16_t,uint64_t发现都不行,我想是不是给优化掉了,然后更改了优化等级如下图,从Level 3更改成了Level 0发现还是不行。

在这里插入图片描述
但我依然想着是被优化掉了,但是没想到方法。
我就解决了这个警告,使用了这个变量,哪怕这个变量使用方式是错误的,但是我可以看到数值了,如下图。
在这里插入图片描述

我后面请教了现在公司带我的师傅(赵老师),然后他给我提示我使用volatile,然后我发现可以看见数值了,然后他又让我换成了static,我发现也可以,然后又给我提示了下让我想想之前我参数变量放在哪个区域(栈),让我自己想了。

我的想法(如果错误望指正):
编译器优化,指挥优化栈中的变量,如果不优化栈中的变量,那么就像我很多的变量声明了但未使用,很容易导致栈溢出问题。加volatile关键字就是不让编译器优化栈中的这个变量,使用static的时候这个变量不存放在栈中,而是存放在静态变量区(堆),那么也不会被优化。

经过上面的想法,我就想如果这样的话,我把变量变成全局变量是不是也没有问题,事实就是没有问题。

我又更改了优化等级,从Level 0 更改成了不使用(default),并且变量还是放在栈(局部变量)中,发现还是not in scope

我后续看很多文章解决这个问题的,都是写更改优化等级,但都没写在点上,为啥要更改优化等级?还有其他方式防止优化吗?

经过此事我也对编译器优化有了一点点了解。

  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小阿大:)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值