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:未初始化全局变量 RAM 的行为

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1612914/tms320f28335-behavior-of-un-initialized-global-variable-ram

器件型号: TMS320F28335

尊敬的专家:

我的客户的应用程序初始化序列在声明中没有初始值的服务器全局变量上重新运行。 如果初始值出现在某些特定值(由于它们的逻辑设计)、它们的应用似乎会中断。  

  1. 如果全局变量在声明中没有初始值、那么初始值是多少? 我们在不同的电路板上都不知道该值是不同的、并且可能恰好是一个或两个特定的值。
  2. 如果它取决于 RAM 的值、下电上电时 RAM 的初始值是多少?
  3. 如果是 ramdom、引导 ROM 使用的 RAM 呢? 对于落在引导 ROM 使用的范围内的地址、当 CPU 运行到 main 时、地址上的值是否固定? 或者可能有所不同? 变化的因素是什么?

此致、

挂起

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

    您好 Hang、

    让我与团队核实、然后返回给您。

    谢谢。此致、

    IRA

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

    尊敬的 Ira:  

    是否有任何更新?

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

    您好 Hang、

    启动例程会调用 _c_int00 函数、理想情况下应将 0 值分配给放置在存储器.bss 段中的所有未初始化全局变量。 在执行 main () 之前对电路板进行下电上电时会发生这种情况。  

    尽管 TI C 运行时应该对所有全局变量进行零初始化、但您提到了在不同的 LaunchPad 上会看到不同的值。 发生这种情况可能有几个具体原因:

    1.缺少或损坏的启动代码:如果修改了启动文件或者工具链存在问题、则可能会跳过.bss 归零。
    2.内存损坏:代码的另一部分可能是在您检查之前写入这些变量。
    3.优化问题:积极的编译器优化可能会影响变量的行为,如果它们不被正确使用。
    4.易失性变量:如果变量未声明为易失性、但正在被多个线程或 ISR 访问、则它们的值可能会意外变化。

    谢谢、

    IRA

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

    尊敬的 Ira:

    假设跳过零初始化、那么 上电时其值是多少?  

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

    我们发现了不同电路板之间差异的根本原因。 ?所有电路板都运行相同的软件、我认为上面的项目不会导致电路板之间出现差异、正确的 μ s  

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

    您好 Hang、  

    如果跳过 cinit 例程、很难说确切的值是多少。 这取决于之前 RAM 中的任何内容、后者可根据进行更改

    1.板对板上电状态差异

    2.复位类型(您是否使用了外部复位/看门狗复位)

    3.在设备上加载的一些以前的应用程序

    因此可能是不确定/垃圾值。

    谢谢、

    IRA

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

    能否检查是否调用了_c_int00 函数? 您的程序是在加载时跳转到 main()、还是在其他地方进入?

    谢谢、

    IRA

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

    尊敬的 Ira:

    我们将再次检查初始化过程。  

    同时,我们想了解更多关于 ram 初始状态的信息。  

    正如您所提到的:

    [报价 userid=“665239" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1612914/tms320f28335-behavior-of-un-initialized-global-variable-ram/6246450

    1.板对板上电状态差异

    2.复位类型(您是否使用了外部复位/看门狗复位)

    3.在设备上加载的一些以前的应用程序

    [/报价]

    让我们只关注一下电路板首次通电时的情况。 在这种情况下、我们应该能够忽略因子 2 和 3。(是吗?)

    对于项目 1、您指的板对板差异是什么? 您能否举个例子来说明哪些板对板差异可能会影响该器件首次加电的 RAM 值?

    请注意、我们并不是在尝试实际识别影响 RAM 初始值的因素、而是只是在尝试 排除或确认在上电后 RAM 可能在不同的电路板上保持不同值的可能性、即使硬件设计和软件是相同的也是如此。

    此致、

    挂起

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

    您好 Hang、

    您能告诉我、您究竟何时看到不同的 RAM 值? 它是在 POR 之后还是在程序中的其他位置? 您是否在链接器的.noinit(如全局变量)部分放置了任何函数/变量? 执行 POR 时、bootROM 应将所有 RAM 初始化为 0。 另外、.bss 段在链接器中的位置是什么?