0

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

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

问题2:如何找到原始数据在内存中复制的位置,以便在运行时使用它?

4

3 回答 3

1

这似乎与我的问题相似:

使用 GNU ld 链接器脚本包含二进制文件

使用 GCC ARM 工具链链接任意数据

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

于 2013-08-04T12:32:35.760 回答
0

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

生成的代码将如下所示:

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

它将最终成为闪存中的只读数据,除非您使用不寻常的链接器脚本,否则不会将其复制到 RAM 中。

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

于 2013-08-04T14:40:36.070 回答
0

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

您是否要对某些东西进行逆向工程?

于 2013-08-05T06:02:33.557 回答