主题中讨论的其他器件: 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 中出现意外行为。
我的问题是、在这种情况下、建议采用什么做法来初始化需要设置为零的全局和静态局部变量?