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.

[参考译文] 编译器/TMS320F28335:.econst 段、奇怪的行为。

Guru**** 2609245 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/684789/compiler-tms320f28335-section-econst-strange-behavior

器件型号:TMS320F28335

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

您好!

我遇到了 TI 链接器的奇怪行为。 我声明了一个数组
数字值。 运行程序时、我会看到它
调试器一切正常、但我再次将其关闭并打开
(没有调试器、因此编程完全运行
格式闪存)存储器中阵列的内容是
错误(我连接到正在运行的目标进行检查
数组。)

经过一些调查、我注意到.econst
已将该段放置在工程的命令文件中
RAM 中。 在"官方"闪存命令文件中、这一点
部分位于闪存中、然后在我将 econst 放置到之后
闪存、问题消失了、但我不知道原因。

有人能向我解释清楚发生了什么?

阵列:

const unsigned int ODMList[]=

   0x1000、
   0x1001、
   0x1008、
   0x1009、
   0x100A、
   0x1018
};

项目的命令文件(应该是错误的):

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

    对于调试/开发、RAM 中的 econst 是可以的、因为当您将程序加载到器件时、阵列会在该期间加载到 RAM 中、并且一切都正常。 当您关闭并打开器件电源时、RAM 不会保留该常量值、并且该值不会通过仅运行闪存应用程序"重新编程"到 RAM 中。 断电和通电后、RAM 基本上将包含随机值。

    这就是为什么在没有调试器/独立测试的情况下进行测试时需要将 econst 放置在闪存中的原因。
    请参阅 processors.wiki.ti.com/.../C28x_Compiler_-_Understanding_Linking

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

    我读了它、现在很清楚为什么不起作用
    冷启动后的应用。

    谢谢、Chris!