硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1586|回复: 11
收起左侧

[Embedded Studio] Segger embedded 调试 watch窗口变量不刷新

[复制链接]

9

主题

141

回帖

168

积分

初级会员

积分
168
发表于 2024-10-30 13:41:34 | 显示全部楼层 |阅读模式
使用SES8.18和JLINK v12 调试RISC内核的HPM6750, 在watch窗口中添加监视变量, 然后设置每秒刷新两次, 实际上MCU运行的时候, 变量的值固定显示为0, 只有断点之后, 监视的变量才能显示对应的值.

是哪里需要设置吗?  除了jlink,各位在使用其他的调试器的时候, 有这个问题嘛?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117517
QQ
发表于 2024-10-30 14:18:56 | 显示全部楼层
看下是不是有个live watch,这个是实时更新的。
回复

使用道具 举报

9

主题

141

回帖

168

积分

初级会员

积分
168
 楼主| 发表于 2024-10-30 14:29:56 | 显示全部楼层
eric2013 发表于 2024-10-30 14:18
看下是不是有个live watch,这个是实时更新的。

没找到live watch窗口, 大佬之前使用SES的时候, 有这个窗口吗? 在哪里能找到
他这个watch窗口, 有个设置频率的地方, 我推测就是实时更新用的, 实际上不起作用
2024-10-30_142634.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117517
QQ
发表于 2024-10-30 15:01:27 | 显示全部楼层
帮你在H743上测了下,正常,不过我一直用的5.5

235.png
回复

使用道具 举报

9

主题

141

回帖

168

积分

初级会员

积分
168
 楼主| 发表于 2024-10-30 15:37:31 | 显示全部楼层
eric2013 发表于 2024-10-30 15:01
帮你在H743上测了下,正常,不过我一直用的5.5

早些时候,确定使用SES来开发的时候, 还专门做过相关的功能测试, 印象中当时是可以的, 可惜不记得是那个版本了, 现在只能找一下旧的版本挨个测试一下了.
回复

使用道具 举报

9

主题

141

回帖

168

积分

初级会员

积分
168
 楼主| 发表于 2024-11-1 15:48:40 | 显示全部楼层
eric2013 发表于 2024-10-30 15:01
帮你在H743上测了下,正常,不过我一直用的5.5

目前找到了一些线索, 这个问题可能与d-cache有关系

变量声明的时候加上关键词 例如 __attribute__((section(".noncacheable")))  int testval=0;
这样testval就可以在watch窗口实时更新了.
但是这样又出来另一个问题, 按照代码执行, testval的初始值应该是0. 实际上执行这段代码之后, 他的值是一个随机的数据, 需要后面额外再写一下 testval=0; 才可以将其设定为想要的值.

另外一个办法就是彻底关闭d-cache, 这样不需要前面的关键词, 直接使用  int testval=0; 就可以声明这个变量, 初始值也是对的. 也可以实时更新.

虽然risc-v内核出来很久了, 目前看来还是不如arm一条龙来的省心.
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117517
QQ
发表于 2024-11-2 09:54:10 | 显示全部楼层
amfy 发表于 2024-11-1 15:48
目前找到了一些线索, 这个问题可能与d-cache有关系

变量声明的时候加上关键词 例如 __attribute__((se ...

H7带Cache的,也有这种问题。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2024-12-3 12:13:04 | 显示全部楼层
我也遇到同样问题, 确实跟cache有关, 用SEGGER_RTT_printf来显示就不会有问题,读取时又会从cache读回来显示。 另外,如果一定要在watch里显示, 要把变量定义到DLM里,也就是CPU内核上的紧耦合内存上:
ATTR_PLACE_AT_FAST_RAM  int testval=0;
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117517
QQ
发表于 2024-12-4 09:34:50 | 显示全部楼层
hadio 发表于 2024-12-3 12:13
我也遇到同样问题, 确实跟cache有关, 用SEGGER_RTT_printf来显示就不会有问题,读取时又会从cache读回来显 ...

对,TCM之类的RAM空间可以。没有Cache问题
回复

使用道具 举报

0

主题

12

回帖

12

积分

新手上路

积分
12
发表于 2024-12-5 08:37:38 | 显示全部楼层
还是没有理解为啥D-Cache有影响?谁能解释一下原理吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117517
QQ
发表于 2024-12-6 08:38:34 | 显示全部楼层
stephen.shi 发表于 2024-12-5 08:37
还是没有理解为啥D-Cache有影响?谁能解释一下原理吗?

调试器读取的是Cache里面数据,不是原始RAM地址的数据。
回复

使用道具 举报

3

主题

90

回帖

99

积分

初级会员

积分
99
发表于 2024-12-6 16:17:21 | 显示全部楼层
这个就是Cache的问题,在HPMicro SDK工程里定义一下CONFIG_NOT_ENABLE_DCACHE就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 09:31 , Processed in 0.049210 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表