我正在尝试将特定数据放在DSP闪存中的特定地址处。到目前为止,我一直尝试的方法效果很好,直到我尝试生成原始二进制文件并提供给客户以进行固件升级,然后将数据从二进制文件中剥离并替换为0xFF。
我现在正在执行的操作是使用一个已定义的内存部分,我将其输入到名为FLASH_ID的TCF文件中,该文件从0x3D8000(处理器闪存中的第一个地址)开始,长度为32个字,位于数据空间中。在链接器命令文件中,我创建一个名为TO_FLASH_ID的节,并将其定向到FLASH_ID,指定page = 1(数据空间)。然后,我使用#pragma data_section指令将const char [32]定向到该部分。
链接器命令文件的相关部分:
SECTIONS
{
TO_FLASH_ID : > FLASH_ID, PAGE = 1
}
相关C代码:
#pragma DATA_SECTION(FLASH_ID, "TO_FLASH_ID")
const char FLASH_ID[32] = {'0','0','.','0','0','.','0','0','.','0','6',0,'P','R','O','J','-','N','A','M','E',0,0,0,0,0,0,0,0,0,0,0};
刷新DSP之后,这一切都很好,我查看了地址0x3D8000,数据在那里...但是当我使用TI的工具(hex2000.exe和FileIOShell.exe)生成固件替换为数据的原始映像时, 0xFF的...这是我用于Hex2000实用程序的命令文件:
proj.out
-o proj.hex
-m
-memwidth 16
-romwidth 16
-image
ROMS
{
FLASH2812: origin = 0x003d8000, length = 0x00020000, romwidth = 16, fill = 0xffff
}
是什么赋予了?我认为这必须与从TI的.out文件到内存空间的原始二进制映像的转换过程有关……我已经考虑过自己编写代码,该代码可以在整个地址空间中运行指针,而将数据上传到我们的PC软件...但是我不想这样做,因为这会破坏我开发的各种自动构建工具。
感谢您的任何帮助!
最佳答案
如果从现在开始有人发现了这一年,我就通过将内存部分更改为代码空间而不是TCF文件和链接器命令文件中的数据空间来解决此问题。我仍然使用DATA_SECTION编译指示(而不是CODE_SECTION编译指示)将常量字符串定向到该部分。
我在这里学到了两件事:固件映像二进制文件中忽略了任何指定为数据空间的内容(至少使用我用来生成它的方法),并且您可以使用DATA_SECTION编译指示将数据放入定义为代码空间的内存中。
关于c - 如何将TI CCS v3.3与TMS320F2812配合使用,如何在DSP闪存和导出的bin文件中的特定地址处定义特定数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59326060/