工具/软件:TI C/C++编译器
我需要将 包含随机数据的大型数组(12个数组、每个数组500 const unsigned int)嵌入到程序中。 程序构建无错误、但数组未初始化。 我已经尝试过.cmd 链接文件中的许多变体、但我没有找到一个有效的组合。 我使用的是 CCS v6.2。 如果 CCS 不支持此功能、我将不胜感激、以便我可以开始寻找替代方法来使我的程序正常工作。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
我需要将 包含随机数据的大型数组(12个数组、每个数组500 const unsigned int)嵌入到程序中。 程序构建无错误、但数组未初始化。 我已经尝试过.cmd 链接文件中的许多变体、但我没有找到一个有效的组合。 我使用的是 CCS v6.2。 如果 CCS 不支持此功能、我将不胜感激、以便我可以开始寻找替代方法来使我的程序正常工作。
创建和初始化数组的代码如下所示:
const unsigned char SerialBoot[]=
{
0x08、0xAA、0xFF、0xFF、0xFF、 0xFF、0xFF、…μ A 0x01
0xFF、0xFF、0x0A、0x0B、0x0C、 0x0D、0x00、… 0x00
…μ A
0xFF、0xC2、0x00、0x00、0xFF、 0xC3、0x00、…μ A 0x00
};
const unsigned int array_size = 5414;
我尝试附加一个名为28377S_RAM_lnk.cmd.txt 的文件、 这导致下面出现较大的灰色对象。 您能告诉我如何正确插入文件吗?
谢谢你。
此致、
Paul
[引用 user="Paul Berneis"]我尝试附加一个名为:28377S_RAM_lnk.cmd.txt[/quot]的文件
附件使它成为了。 我之前见过大灰色框。 我不确定这是什么故事。
假设您在文件级别声明数组、而不是在函数中声明数组。 如果是这种情况、它们都将进入.econst 段。 此部分分配给存储器范围 RAMLS5、长度为0x1000字。 但12个500字的数组是0x1770字。 这太大了。 您是否看到链接时间错误?
另一个问题... 在您的系统中、像.econst 这样的已初始化段如何从由链接器创建的最终可执行文件(它通常具有.out 文件扩展名)获取到 RAM 中? 问题是否出在这一步?
谢谢、此致、
乔治
[引用 user="Paul Berneies">当我构建程序时,我发现输出文件(Intel .hex 格式)不够大(从.hex 格式提取数据时为2707个字),即使没有可执行程序本身,也无法初始化数组数据。 [/报价]
我想知道这是怎么发生的。 查看由链接器创建的映射文件。 它通常具有文件扩展名.map。 它是否显示了您的期望? 如果您感到困惑、欢迎您将其附加到下一个帖子。 因此论坛将接受它、并将文件扩展名.txt 添加到它。
谢谢、此致、
乔治
e2e.ti.com/.../Flash_5F00_Test.map.txtThe映射文件显示已为每个阵列分配内存、没有标记为"未初始化"。
我已附加映射文件。
此致、
Paul
我主要确定我知道发生了什么。 我无法告诉您如何解决它。
在映射文件中、我可以看到名为 ImageFile1的输出段。 它们已初始化。 最重要的是、它们不是 PAGE 0、而是 PAGE 1。 这是因为这些输出段被分配到存储器范围、如 RAMGS2、位于第1页。 十六进制实用程序为不同输出文件中的不同页面输出初始化段。 第二个输出文件可能具有文件扩展名.I10。 要准确查看创建的输出文件、请使用十六进制实用程序选项--map 创建十六进制映射文件、然后在该文件中搜索标记为输出文件的行。
有关如何解决该问题的提示、我建议您阅读 C28x 汇编工具手册中标题为分配输出文件名的一节。
谢谢、此致、
乔治