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.

[参考译文] 编译器/TMS320F28377S:阵列初始化

Guru**** 2587365 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/607022/compiler-tms320f28377s-array-initialization

器件型号:TMS320F28377S

工具/软件:TI C/C++编译器

您好!

我们使用的是 C 库中使用 sigTable 数组的函数、该数组的初始化如下:

static __sigandler_t *sigTable[NSIG]={0};

我们发现的问题是、编译器/库没有使用零初始化整个数组、只是其中的几个字、并且大多数数组都保留随机数据。

={0}将整个数组初始化为0、而不仅仅是第一个字/s、这似乎是 C 标准 但 C 编译器/库没有这样做。

我们尝试了不同的编译器版本、它们都执行了相同的操作。

这种行为是否有简单的解释?

谢谢、

最大

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

    尊敬的 Max:

    您最好等到编译器专家进入线程。 但在此之前、我想让您知道标准的实施方式可能有一些独特之处。 至少在我的 C6000世界中、我知道:

    [引述]

    6.13. 在 COFF ABI 模式下初始化静态和全局变量

    ANSI/ISO C 标准规定、没有显式初始化的全局(extern)和静态变量必须在程序开始运行之前初始化为0。 此任务通常在加载程序时完成。 加载过程在很大程度上依赖于目标应用系统的特定环境、因此在 COFF ABI 模式下、编译器本身不会在运行时初始化为0、否则为未初始化的静态存储类变量提供任何设置。 您的应用需要满足此要求。

    注释

    初始化全局对象

    您应该显式初始化所有您希望编译器默认设置为零的全局对象。

    在 C6000 EABI 模式下、未初始化的变量会自动初始化为0。

    [/报价]

    因此、尽管我们了解标准要求、但实施过程也可能涉及程序员的责任。

    同样、最好查看编译器手册和/或等待 F28xx Guru。

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

    C28x 编译器仅支持 COFF ABI。  (这将很快改变。)  因此、所有 COFF ABI 详细信息均适用。  有关此问题的详细讨论、请参阅文章 "未初始化的静态对象未在 COFF 中设置为零"。

    谢谢、此致、

    乔治