2013-08-04 24 views
0

从C项目中有一个十六进制文件。 我想在LPC1768的闪存上下载这个十六进制文件,并在运行时在代码中使用它(用于初始化代码中的数据)中的一些原始数据。 我知道,当我将它写在主板上时,在运行时,LPC1768将数据从闪存复制到内存中。在lpc1768上下载数据

问题1:如何用jflash下载hex文件的原始数据?

问题2:我怎么才能找到原始数据在内存中复制的地方,以便在运行时使用它?

回答

1

这似乎与我相似的问题:

Include binary file with GNU ld linker script

linking arbitrary data using GCC ARM toolchain

您可以将原始数据转换成目标文件,然后用你的代码产生含有十六进制文件将其链接然后你照例上传。链接器将定义特殊符号,告诉您数据在内存中的开始和结束位置。查看上面的链接以获取更多信息和示例。

+0

有没有办法做到这一点没有链接器(单独下载hex文件和二进制数据与jtag)? – Divuneh

+1

那么,你可以编写一个简单的程序,将你的数据附加到一个选定的空地址范围的十六进制文件,然后上传这样一个十六进制文件。十六进制文件的格式非常简单http://en.wikipedia.org/wiki/Intel_HEX 除此之外,我不知道。 – 11temp

+0

谢谢。但是我怎样才能在闪存上找到我的数据地址? – Divuneh

0

您可以将二进制数据转换为C,例如使用bin2c。然后只需将生成的C代码添加到您的项目。

生成的代码将looke这样的:

const unsigned char binary_data[] = { 
    0x4D, 0x5A, 0x90, 0x00, //... 
} 

它最终会在Flash只读数据,这除非你使用一个不同寻常的接头skript不会被拷贝到RAM中。

从二进制文件生成代码C可以在Makefile中自动生成。例如,我在OpenOCD项目中看到过这个。

0

您可能会考虑使用Flash Magic将十六进制文件下载到闪存中。它只下载十六进制。不过,您可能无法调试代码。

你是否想要逆向工程?

+0

没有。我有这个解决方案,但它不能帮助我在我的项目中 – Divuneh