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.

[参考译文] TMS320F280025C:不能在闪存固定地址中定义常量数组

Guru**** 2399305 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1210004/tms320f280025c-constant-array-cannot-be-defined-in-flash-fixed-address

器件型号:TMS320F280025C

大家好、

#pragma DATA_SECTION(Name,"myconstants");
const unsigned int Name[10] = {0,1,2,3,4,5,6,7,8,9};

myconstants     : > FLASH_BANK0_SEC2,PAGE = 0, ALIGN(4)

根据客户的反馈和我的测试、上述代码适用于 F280049C 和 F28035:

但无法在 F280025C 上工作。

--

谢谢、此致

耶鲁

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

    耶鲁大学

    您能解释一下更多信息吗? 您是否遇到编译器或链接器错误、或者闪存内容是否与预期的不符?

    如果代码编译成功、您能否提供 timer_ex1_timers.map 的内容、以便我们可以确认符号 Name 的位置?

    谢谢。

    Ibukun

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

    Ibukun,

    无错误、无警告。 只需要将数组放置到指定的闪存地址。 我使用同一个演示(timer_ex1_cputimer)进行测试。  为 F28004x 和 F280052的项目分别将这些代码添加到 timer_ex1_cputters.c 和.cmd 文件后、我可以在 F28004x 的指定地址找到数组"名称"、但在 F28002x 上找不到。

    以下是映射文件:

    e2e.ti.com/.../6472.timer_5F00_ex1_5F00_cputimers.zip

    它还展示了结果。

    --

    谢谢、此致

    耶鲁

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

    耶鲁大学

    F28004x 程序已使用 COFF 格式编译、而 F28002x 程序使用较新的 EABI (ELF)格式。 使用 EABI 时、默认情况下会删除未直接引用或链接到的任何段、除非通过使用#pragma retain (`SECTIONNAME`)指令或将--retain 选项传递给链接器命令行来显式保留。 这在常规应用中不是必要的、因为一旦在代码中的其他位置有引用或链接、该段就会被保留。

    您可以将 F28002x 程序的格式更改为较旧的 COFF 格式、或向代码中添加以下行:

    /* Do not optimize out the myconstants section for testing purposes */
    #pragma RETAIN(`myconstants`)
    #pragma DATA_SECTION(Name, "myconstants")
    const unsigned int Name[10] = {0,1,2,3,4,5,6,7,8,9};

    有关如何将现有代码从 COFF 迁移到 EABI 的更多信息、请阅读《 C2000从 COFF 迁移到 EABI》。

    此致、
    Ibukun