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.

[参考译文] AM2634:TMDSCNCD263

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1245736/am2634-tmdscncd263

器件型号:AM2634

您好!

如何在 BSS 中禁用变量的自动初始化? 这会使输出映像变大、我不想在二进制文件中包含 RAM 中的变量。



我曾尝试使用 链接器选项--zero_init=off 和--ram_model 、但该变量也已初始化。


您自己的、
Abdelrhman Afifi

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

    尊敬的 Abdelrhman:

    您可以尝试使用类似以下的方法:

      .bss.log_shared_mem (NoLoad):{}> LOG_SHM_MEM

    在 linker.cmd 文件中

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

    像这样、我需要循环遍历 BSS 中的所有变量?

    在我的示例中,我需要尝试:.bss.buffer_memory (NoLoad):{}> buffer_memory?

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

    我尝试过它、但仍然无法按预期工作。

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

    尊敬的 Abdelrhman:

    您将需要  在程序中定义数据段:.bss.buffer_memory、并需要所有不想在其中初始化的数据缓冲区。 一个很好的例子是  

    将 gAppImageBuf[]放入 sbl_uart_am243x-lp_r5fss0-0_nortos_ti-arm-clang 的.bss.filebuf 中。

      在运行时不加载的情况下、会将.bss.filebuf 放入 MSRAM_2存储器区域(在 linker.cmd 文件中指定)。

    避免 c_int00自动归零未初始化的数据缓冲区的另一种方法是关闭--zero_init:

    此致、

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

    Ming 您好、

    它在 SDK 内部工作、但不能与 MCAL 配合使用。

    在 SDK 中、整个.bss 段也未初始化其他段、 gAppImageBuf 示例也会正常工作。


    但在 MCAL 中与此不同、该段不会被提及为未初始化。


    我认为这类标志有什么关系、您能为我提供 SDK 中所使用的标志吗?或者 MCAL 与 SDK 有更多不同之处吗?

    我没有使用 SDK、因此我不知道其详细信息。

    您自己的、

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

    尊敬的 Abdelrhman:

    在 ANSI C 中、未显式初始化的全局变量和静态变量必须在程序执行之前设置为0。 C/C++编译器默认支持对未初始化的变量进行预初始化。 指定链接器选项--zero_init=off 则可将此功能关闭。

    确保 MCAL makefile 设置选项--zero_init=off。

    同时确保程序没有明确 将缓冲区设置为0 (例如 int buffer[100]={0};)

    此致、

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

    尊敬的 Ming:

    我已在使用设置此选项。

    我明白了您的观点、但此初始化是在启动时进行的、而不是在二进制映像本身内部进行。

    如果您比较这两个图像、您将发现.bss 设置为(未初始化) 在由 SDK 生成的映射文件中。

    但在由 MCAL 生成的映射文件中、没有一个(未初始化)像这样的、整个.bss 段由零初始化。

    您自己的、

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

    尊敬的 Abdelrhman:

    我不是 MCAL 专家、因此我会将您的问题转交给 MCAL 专家以获得进一步的帮助。

    此致、

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

    尊敬的

    请在` asm 文件中评论此例`_system_pre_init 调用  

    该函数基本上使用以下代码初始化 BSS 部分、  

    请按照上述步骤操作、如果您仍看到问题、请告诉我。

    谢谢。
    兴植