debug - save MDK memory content to file

前言

在调试程序,准备分析从设备返回的一段buffer.
才发现,MDK显示出的内存内容,居然没法直接保存成bin文件或直接能拷贝到文本中, 做的挫啊…
上网查,大家一般是用SAVE命令 + hex2bin, 将内存数据保存成bin文件。
我这,是能用SAVE命令保存MDK内存到hex. 但是hex转bin这有问题,找了几个版本的hex2bin都不好使。应该是MDK5生成的HEX格式版本比较新吧.

最后,我用J-Flash V6.46g + winhex搞定, 机智啊:)
J-Flash就是最好的hex2bin.

试验

保存MDK内存内容到hex

这步有官方资料的。
http://www.keil.com/support/man/docs/uv3/uv3_cm_save.htm

我这调试要从0x20005E2c地址开始保存303个字节,那我的命令就如下:

SAVE d:\USART1_RX_BUF 0x20005E2c, 0x20005F5B

输入命令的地方,就在MDK的命令行输入框中。
在这里插入图片描述
看一眼生成好的文件,确实是hex格式的。
在这里插入图片描述

将hex转bin

我找的几个hex2bin, 都无法正确将这个hex转成bin.
我直接用JFALSH, 这个是装JLINK驱动那会装上的.
用JFALSH载入这个hex文件,是可以正常打开的。调试器自带的工具就是好用。
在这里插入图片描述
用JFLASH自带的数据文件另存功能保存成bin
在这里插入图片描述
在这里插入图片描述
然后用winhex打开转好的bin文件,就可以用拷贝功能,将2进制内容拷贝出来,贴到工程中,供分析协议用。
在这里插入图片描述
最后得到2进制内容的数组,这时就可以干正经活了。

unsigned AnsiChar data[304] = {
	0x01, 0x2F, 0x01, 0x01, 0x00, 0x01, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 
	0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
	0xFF, 0xFF, 0xFF, 0x28, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 
	0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 
	0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x14, 0xFE, 0xFE, 0xFE, 
	0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 
	0xFE, 0x14, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFE, 0xFE, 0xFE, 0xFE, 
	0x08, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x08, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 
	0xFE, 0xFE, 0x02, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0x3D, 0x00
};

MDK细节方面做的真不好用, 除了MDK也没得用。
本来从设备内存地址拷贝内容,这都是IDE应该做的。

发布了436 篇原创文章 · 获赞 126 · 访问量 175万+

猜你喜欢

转载自blog.csdn.net/LostSpeed/article/details/99578281