Stm32 Keil5

Keil5在main.c里面创建变量无论是什么类型的变量或是局部还是全局变量debug时变量都是无法查看

在Keil5中,debug时无法查看变量的原因可能有以下几种:
编译器优化问题:在编译器优化级别设置为较高程度时,可能会导致变量被优化掉,从而无法在debug时查看。此时需要将编译器优化级别调整到较低水平,以便在debug时能够正确查看变量。
变量作用域问题:如果变量是局部变量,在函数结束后将被销毁,这也意味着不能在debug时访问该变量。在对其它作用域的变量进行debug时,需要确保在代码执行到那个变量时才可以使用debug功能对其进行访问。
未启用debug信息选项:在进行程序编译时,需要启用生成debug信息的选项。若不启用,debug信息就无法记录,因此无法在debug时查看变量。在编译过程中选择带有-debug的编译选项,或是在链接阶段包含符号表、调试信息库等文件,可以帮助解决这个问题。
Keil版本兼容问题:可能出现某些版本的Keil安装包中存在一些问题,导致没有正确支持强大的debug功能。此时可以尝试更新到最新版本的Keil软件并重新编译程序,同时检查是否有适当的调试仿真器连接。
总之,在debug时无法查看变量时,需要进行多方面的排查和分析,最终定位到问题所在并采取相应的解决措施。

  • 这篇文章:stm32学习开发debug记录(1) 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: STM32开发 -- Keil使用(1)中的 Debug(调试) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 这里写图片描述
    第1处:选择硬件在线调试
    下载调试器的选择不用多说,主要说一下后面“Setting”。
    这里写图片描述
    很多人常用J-Link下载调试器,而调试STM32时,可以使用四线SWD模式。如果使用J-Link进行SWD调试。这个时候就需要在“Setting”里面选择“SW”模式,如下如:
    这里写图片描述
    第2处:选择硬件在线调试

    • Load Application at Startup:启动时加载应用程序。

    • Run to main():程序执行到main()函数。
      进入调试模式时,程序自动运行到main函数处。

    • Initialization File:加载、编辑初始化文件。
      第3处:复位调试会话设置(Restore Debug Session Settings)
      这里复位设置就是恢复设置的意思,如果勾选上,点击一下“复位”就会恢复到之前的状态。包括:断点Breakpoints、窗口Watch Windows、性能分析器 Performance Analyzer、内存窗口Memory Window、工具箱Toolbox、系统查阅器System Viewer等。
      第4处:DLL文件(最好默认)
      这里的配置属于Keil自身的配置,最好不要修改。

    • CPU/Driver DLL - Parameter:CPU驱动文件和参数。

    • Dialog DLL - Parameter:会话框DLL文件和参数。

  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案: 1. 确认debug处是否正确的选中了你使用的调试工具,如JLINK等。同时点击Settings,进入Port选项,并选择你的调试接口类型,如JTAG或SWD。 2. 进入Flash Download选项,并添加你的设备对应的Flash大小,如STM32F103C8T6的Flash大小为128k。 3. 点击按钮打开配置面板,并在Target栏确定单片机的晶振频率,其他保持默认。 4. 切换到Debug选项卡,按照如下配置进行设置: - Debugger选择你使用的调试工具,如JLINK; - Use:选择SWJ表示使用JTAG作为调试接口; - Settings:选择对应的调试接口和速率; - 星号(*):选中该项表示开启芯片调试模式; - Download:选择Use flash loader(s)并添加相关文件; - Initialization File:选择你的单片机对应的初始化文件。 5. 点击OK完成Debug环境配置。 6. 进入main.c文件,在你想查看变量值的位置添加断点,如在变量定义语句前或使用变量的语句前。 7. 进入Debug模式,运行程序,程序会停在你设置的断点处。打开Variable窗口,即可查看变量的值。

    注意:不同单片机的调试环境配置可能存在差异。如果遇到问题,请参考相关的单片机手册或官方文档。

通常是被优化了,如果你定义一个变量,这个变量的变化明显不影响任何输出,那编译器就会把它优化。
如果你只是想练习语法,可以在C语言设置里,把优化等级设置为0,或者变量定义的时候加上volatile。