ercircle 发表于 2025-6-23 18:07:15

32G8K64型号SWD仿真异常,串口仿真正常



断点处观察值不对。
SWD:

串口:

ercircle 发表于 2025-6-23 18:20:38

异常现象2:
SWD仿真下载完,代码立即执行,没有等keil指令。
串口下载完,keil点仿真后才开始运行:

816

zhp 发表于 2025-7-1 18:09:56

ercircle 发表于 2025-6-23 18:20
异常现象2:
SWD仿真下载完,代码立即执行,没有等keil指令。
串口下载完,keil点仿真后才开始运行:

两种仿真接口的处理方式确实不一样:
传统的串口和USB仿真都是monitor仿真,上电后CPU权限属于monitor程序
SWD是纯硬件仿真,CPU权限始终属于用户程序

用户代码下载完成后,如果是monitor仿真,在监控程序没有释放CPU权限前,用户程序无法自动运行起来
但SWD仿真模式在用户代码下载完成后,由于CPU权限始终属于用户程序,所以用户程序会立即开始运行,直到SWD接口发halt指令,SWD才会接管CPU

最明显的区别:下载代码完成后给芯片重新上电,对于串口仿真上电后一定是运行monitor程序而不会运行用户程序,但SWD仿真在重新上电后则会立即运行用户程序

zhp 发表于 2025-7-1 18:17:03

SWD读写xram似乎存在地址对齐的问题
可以将 _at_ 0xf3改为0xf0试试看

SWD仿真时纯硬件仿真,对xram的读写也是直接在内部xram的数据总线和控制总线上发送信号,所以有地址对齐的限制

而串口和USB仿真属于monitor仿真,相当于是执行MOVX指令来访问xram,
此时的地址对齐的问题,在芯片设计时已经进行了处理,所以没问题

ercircle 发表于 2025-7-1 18:44:34

zhp 发表于 2025-7-1 18:17
SWD读写xram似乎存在地址对齐的问题
可以将 _at_ 0xf3改为0xf0试试看




问题1不行,但是在32G8K128上SWD用0x00f3地址也是正常的。
问题二,用32G8K128跑了下,确实SWD仿真下载完就会执行。



页: [1]
查看完整版本: 32G8K64型号SWD仿真异常,串口仿真正常