您好!
如何在 BSS 中禁用变量的自动初始化? 这会使输出映像变大、我不想在二进制文件中包含 RAM 中的变量。
我曾尝试使用 链接器选项--zero_init=off 和--ram_model 、但该变量也已初始化。
您自己的、
Abdelrhman Afifi
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.
您好!
如何在 BSS 中禁用变量的自动初始化? 这会使输出映像变大、我不想在二进制文件中包含 RAM 中的变量。
我曾尝试使用 链接器选项--zero_init=off 和--ram_model 、但该变量也已初始化。
您自己的、
Abdelrhman Afifi
尊敬的 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};)
此致、
明
请在` asm 文件中评论此例`_system_pre_init 调用
该函数基本上使用以下代码初始化 BSS 部分、
请按照上述步骤操作、如果您仍看到问题、请告诉我。
谢谢。
兴植