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.

[参考译文] 编译器/TMS320F28377S:需要初始化大型数组

Guru**** 2460850 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/693387/compiler-tms320f28377s-need-to-initialize-large-arrays

器件型号:TMS320F28377S

工具/软件:TI C/C++编译器

我需要将  包含随机数据的大型数组(12个数组、每个数组500 const unsigned int)嵌入到程序中。  程序构建无错误、但数组未初始化。  我已经尝试过.cmd 链接文件中的许多变体、但我没有找到一个有效的组合。 我使用的是 CCS v6.2。  如果 CCS 不支持此功能、我将不胜感激、以便我可以开始寻找替代方法来使我的程序正常工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请显示您使用定义的代码的前几行并初始化其中一个数组。  还要将链接器命令文件附加到下一个帖子。  因此论坛将接受它、并将文件扩展名.txt 添加到它。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    创建和初始化数组的代码如下所示:

    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

    e2e.ti.com/.../28377S_5F00_RAM_5F00_lnk.cmd.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Paul Berneis"]我尝试附加一个名为:28377S_RAM_lnk.cmd.txt[/quot]的文件

    附件使它成为了。  我之前见过大灰色框。  我不确定这是什么故事。

    假设您在文件级别声明数组、而不是在函数中声明数组。  如果是这种情况、它们都将进入.econst 段。  此部分分配给存储器范围 RAMLS5、长度为0x1000字。  但12个500字的数组是0x1770字。  这太大了。  您是否看到链接时间错误?

    另一个问题... 在您的系统中、像.econst 这样的已初始化段如何从由链接器创建的最终可执行文件(它通常具有.out 文件扩展名)获取到 RAM 中?  问题是否出在这一步?

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您正确地假设在文件级别声明数组。

    编译器和链接器都不会报告任何错误。

    一些背景:数组是从.hex 文件自动生成的、该文件将输入转换为我可以嵌入在程序中的内容。 这是用于更新 Delfino 中固件的多级过程的一部分。 Delfino 是另一个称为通用处理器的处理器的辅助处理器。 对 Delfino 的所有访问都是通过通用处理器进行的。 通用处理器可控制复位信号和 Delfino 的两个引导模式输入。 它还具有用于发送和接收数据的 UART 连接。

    通用处理器将使用 Delfino 手册中定义的引导加载协议通过 UART 连接将包含阵列的程序下载到 Delfino RAM。 下载完成后、它将执行一个应用程序、将数据从数组复制到闪存。

    当我构建程序时、我观察到输出文件(Intel .hex 格式)不够大(从.hex 格式提取数据时为2707个字)、即使没有可执行程序本身也无法初始化数组数据。

    作为替代解决方案、通用程序可以将数据下载到 RAM 中的绝对位置、Delfino 程序可以在该位置访问数据。 我正在研究如何从 C 程序访问绝对位置。

    此致、
    Paul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 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 汇编工具手册中标题为分配输出文件名的一节

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢你的帮助。  你向正确的方向指出了我、现在我知道如何纠正我的问题。