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.

[参考译文] TMS320C6748:处理全局变量和静态变量(置于 BSS 段)的最佳实践、这些变量预计将初始化为零

Guru**** 2463330 points
Other Parts Discussed in Thread: TMS320C6748, OMAP-L138

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1551413/tms320c6748-best-practice-for-dealing-with-global-and-static-variables-placed-in-bss-section-expected-to-be-initialised-to-zero

部件号:TMS320C6748
主题中讨论的其他器件: OMAP-L138

工具/软件:

我已经开始使用庞大的旧代码库、并且不熟悉 TI DSP。 我很惊讶地发现、除非显式设置为非零值、否则启动代码不会初始化全局和静态变量。 但是,代码库中已经有的一些代码是在没有考虑到这一点的情况下编写的,因此不会在代码中明确初始化变量,这意味着当变量接受意外值时(并且已经有许多这样的错误),我们很容易受到错误的影响。

我使用的是:

  • TMS320C6748 芯片
  • 编译器 C6000 v7.4.4
  • ABI = COFFABI
  • -- rom_model(尽管我们在大多数情况下都是从 RAM 运行代码)

启动结构有些复杂、有许多可根据具体情况运行的不同二进制文件。 一个示例场景是:

  • 主引导加载程序(定制):“LOC_BOOT"</s>“
  • >将控制权传递给次级引导加载程序:“LOC_sec_boot"</s>“
  • >将控制权传递给 3 个应用程序之一:“LOC_prd",“,"loc_USB1"、"loc_USB1"或“或"loc_comm1"“"loc_comm1"</s>“ “

每个二进制文件都作为单独的应用程序构建、可以重复使用先前映像使用的存储器。

一些映像将一些数据和代码段(包括.bss 和.far 段)放置在 SHAREDRAM 中。

在上面所示的示例场景中、我看到、当控制权传递给“loc_prd1"应用“应用程序并进入应用程序 main () 函数时、.bss 段中的许多变量尚未初始化为零、但我希望它们是零、而是继承“loc_sec_boot"二“二进制文件设置的变量。 这会导致 loc_prd1 中出现意外行为。

我的问题是、在这种情况下、建议采用什么做法来初始化需要设置为零的全局和静态局部变量?

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

    您好!

    我们无法再在 e2e 论坛上为 C6748 提供硬件或软件设计支持。 因此、我们所能提供的援助将受到限制。

    我尚未对 C6748 进行编程。 因此、我无法评论具体细节。 但是、我确实支持其他器件上的 PRU 子系统(您可以在 OMAP-L138/C6748 系列器件上找到 PRU 子系统的最早版本)。 从 RTOS 内核初始化 PRU 内核时、我们通常在写入数据和代码段之前、手动将 PRU 数据 RAM 初始化为 0。 在 C6748 上执行同样的操作可能是最佳实践。

    此致、

    Nick

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

    您好、Nick、

    感谢您的答复。 在启动代码期间、我是否可以使用挂钩将此设置实现为零? 比如从  c_int00 调用的弱链接函数 或类似函数? 还是需要覆盖整个启动代码、如果需要、最佳方法是什么?

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

    PS:可以在芯片上运行的大多数不同固件程序都以裸机模式运行、但其中一个程序确实使用 TI DSP/BIOS

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

    您好 Joe、

    遗憾的是、这超出了我可以评论的范围。

    此处链接的常见问题解答可能提供了一些有用的信息:
    有关 AM335x、AM437x、OMAP-L13x、C674x、K2G 器件的处理器 SDK TI-RTOS 的注意事项 

    此致、

    Nick

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

    您好、Nick、

    您是否可以推荐任何第三方获取软件支持?

    此致、

    兰迪

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

    您好 Randy  

    我建议与 Elco Solutions 交谈

    Elco |合作伙伴资料|德州仪器 TI.com

    请参阅上一篇文章: (+) TMS320C6748:寻求帮助以查找 DSP 编程顾问 — 处理器论坛-处理器 — 来自 Embedded Advantage/Elco Solutions 的 TI E2E 支持论坛  

    此致

    Mukul