您尚未登录。

楼主 # 2025-07-23 11:21:24

无业人员
会员
注册时间: 2025-01-17
已发帖子: 32
积分: 82

ch32v203使用WCH-LINK-RO-1V3调试,有些变量显示optimized out,被优化省略如何处理

如果取消优化,会提示超过flash最大尺寸,不取消优化打断点有些变量无法查看具体变量值
ch32使用-O0和其它选项比如-Og,-Os,-O1等选项尺寸差别非常大

离线

#1 2025-07-23 12:47:36

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 741
积分: 876
个人网站

Re: ch32v203使用WCH-LINK-RO-1V3调试,有些变量显示optimized out,被优化省略如何处理

阻止编译器对部分代码进行优化即可,实现方式有两种:

一、对变量添加 volatile 关键字后该变量即不会被优化掉;
二、用#pragma GCC optimize 预处理指令指示部分代码的优化等级,如:

#pragma GCC push_options
#pragma GCC optimize("O0")
 // 强制指明O0优化的代码区域
#pragma GCC pop_options

最近编辑记录 海石生风 (2025-07-23 12:47:54)

离线

楼主 #2 2025-07-23 14:21:41

无业人员
会员
注册时间: 2025-01-17
已发帖子: 32
积分: 82

Re: ch32v203使用WCH-LINK-RO-1V3调试,有些变量显示optimized out,被优化省略如何处理

@海石生风
使用二,单步调试不乱跳了,变量也都能看到了,看来二是整个函数都不优化了
一的话会乱跳。

离线

#3 2025-07-23 15:31:47

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 741
积分: 876
个人网站

Re: ch32v203使用WCH-LINK-RO-1V3调试,有些变量显示optimized out,被优化省略如何处理

方法一 只针对变量,其它代码还是会被优化
方法二可以只针对一个代码片段,而非整个函数

离线

#4 2025-07-23 16:28:34

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 852
积分: 708

Re: ch32v203使用WCH-LINK-RO-1V3调试,有些变量显示optimized out,被优化省略如何处理

SDI_Printf可以打印变量,不用关心优化级别

离线

楼主 #5 2025-07-24 10:05:02

无业人员
会员
注册时间: 2025-01-17
已发帖子: 32
积分: 82

Re: ch32v203使用WCH-LINK-RO-1V3调试,有些变量显示optimized out,被优化省略如何处理

kekemuyu 说:

SDI_Printf可以打印变量,不用关心优化级别

开始试过SDI_Printf,有个问题,使用mounRiver studio调试的时候会卡死,使用WCH-LinkUtility没问题

离线

#6 2025-07-24 13:28:41

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 741
积分: 876
个人网站

Re: ch32v203使用WCH-LINK-RO-1V3调试,有些变量显示optimized out,被优化省略如何处理

MCU开发我一般用串口调试,只有在项目初期才会用调试器做单步调试。搞个串口命令解析器,串口收发加上缓存这样串口调试基本就不会影响程序执行时序,也是很方便的。

再进一步,就可以将底层收发进行抽象封装,让命令解析器支持实体串口、SDI虚拟串口等。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn