• 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

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

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

  • 相关阅读:
    学习周总结
    服务器租用机房机房的类型应该如何选择
    Navicat 强大的数据模型功能 | 面向数据库设计、架构和数据资产梳理等使用场景
    cuda画线改进版
    web如何制作一个比较完整的网页
    DataFrame数据透视表pd.pivot_table()
    FPGA UDP RGMII 千兆以太网(1)
    GIT使用(踩坑)
    MySQL数据库基础:数据类型详解-二进制字符串类型
    基于Python的性能优化
  • 原文地址:https://blog.csdn.net/qq_44610809/article/details/125405894