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.

[参考译文] TMS320F28P650DK:警告#303-D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1516853/tms320f28p650dk-warning-303-d

器件型号:TMS320F28P650DK
Thread 中讨论的其他器件: SysConfigC2000WARE

工具/软件:

您好 TI 社区、

在使用 德州仪器(TI)提供的 TMS320F28P650DK 库时、我遇到了以下编译器警告:

#303-D:已声明 typedef 名称(具有相同类型)

当我需要包含 hw_types.h 和(在本例中) f28p65x_device.h 时、会出现此警告  虽然这不会停止编译、但会使输出混乱、并可能会混淆尝试维护干净编译的用户。

审核完代码后、我认为可以通过将 typedef 包含在 f28p65x_device.h 文件中并使用 条件预处理器指令来检查类型是否已经通过 dsp.h 或 fastrts.h 等文件的相同方式定义、来避免出现此警告

// c2000 types for IEEE754 (same as defined in <device>/inc/hw_types.h)
#ifndef C2000_IEEE754_TYPES
#define C2000_IEEE754_TYPES
#ifdef __TI_EABI__
typedef float float32_t;
typedef double float64_t;
#else // TI COFF
typedef float float32_t;
typedef long double float64_t;
#endif // __TI_EABI__
#endif // C2000_IEEE754_TYPES

TI 团队是否有可能考虑将这样的防护措施集成到库的未来版本中? 这一小改动有助于提高工程之间的兼容性并减少不必要的警告。

或者、可能我包含的内容有误、请告诉我。

感谢您的支持、感谢您提供一组强大的工具和库。

祝您一切顺利、

Alexandre

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

    尊敬的 Alexandre:

    感谢您的反馈。  我认为您看到的问题是由于 driverlib 文件已经通过(driverlib.h)包含了 hw_types.h 文件。 通过向文件添加 aa #include、将导致出现重复的警告。 最佳解决方案是确保源文件的 driverlib.h 中包含#include 或者,你的建议的警卫是最好的变通办法。 请告诉我建议是否有效。

    此致、

    Ozino

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

    尊敬的 Ozino:

    感谢您的建议。 遗憾的是、在我的情况下、该解决方案不起作用。

    我依赖 bool_t 类型定义(以实现8位类型的可移植性)、这是我将集成到工程中并在  f28p65x_device.h 文件中定义的 CANopenNode 栈所要求的。 此外、我需要使用 f28p65x_globalvariabledefs.c 文件来访问特定于 F28P65x 器件的外设寄存器定义。 最后、我通过 SysConfig 使用 FreeRTOS、它直接包含 cputimer.h (通常由 driverlib 提供)。 这会创建多个包含项、如果同时  包含 f28p65x_device.h 和 hw_types.h、则会失败(收到警告)。

    由于这些依赖关系,我无法简单地找到另一个保护或删除包含而不破坏项目的其他部分。

    此致、

    Alexandre

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

    尊敬的 Alexandre:

    感谢您的澄清。 问题是否仅出现在同时包含 device.h 和 hw_types.h 文件的文件中? 或者、这是否显示在仅包含其中一个文件的其他文件中? 对于同时包含这两个文件的文件、如果您将包含顺序交换为在 device.h 之后指定 hw_types.h (反之亦然)、错误是否仍然存在?

    此致、

    Ozino

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

    尊敬的 Ozino:

    感谢您的答复。  我已经完成了测试,我应该已经把它们传达给你在前一篇文章

    是的、当两个 文件都包含在文件中时、系统会显示该消息、并且只有这些文件才会生成警告。

    当我更改了文件包含的顺序时、效果是相同的。

    此致、

    Alexandre。

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

    尊敬的 Alexandre:

    感谢您的澄清。 如果文件包含两次、那么您会收到生成的警告(一次通过 hw_types.h、另一次通过 driverlib.h)、这是合理的。

    如果您在包含这两个文件的文件中禁用 hw_types.h、是否会收到前面提到的错误/警告? 您能否确认仅包含其中一个文件时代码是否按预期工作?

    此致、
    Ozino

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

    您好、感谢您的留言、Ozino。

    我相信可能会对问题的根源有所误解。 该问题似乎并不是由于包含 hw_types.h (通过 driverlib 包含)而是来自 f28p65x_device.h 遗憾的是、我确实需要包含 f28p65x_device.h 、才能使代码的其他部分正常运行。

    如果您(如何)希望我提供更多详细信息、请告诉我。 最小的可重现性示例最适合说明问题、但准备一个示例需要一些时间。

    此致、

    Alexandre。

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

    尊敬的 Alexandre:

    我想我明白发生了什么。  似乎在同一工程中混合了位域和 driverlib 器件文件。 您能否确认您的工程是否支持位字段和/或 driverlib。 如果这两者都是、在工程中添加 Include 文件时需要考虑额外的注意事项。

    请参阅  F28P65x 固件开发包用户指南 、了解如何添加位字段和 driverlib 支持(位于 C2000Ware 中的 device_support\f28003x\docs\F28P65x_FRM_EX_UG.pdf 下)。

    第2.3节(第35页)专门提供了有关添加此项目支持的详细信息。  

    请注意、在合并位字段和 driverlib 支持时、请在调用的工程属性中添加一个预定义符号
    "_dual_headers"。 这是为了避免出现冲突定义(在枚举/结构体/宏中)、这些定义在位字段和 driverlib 头文件中共用完全相同的名称。

    此致、

    Ozino

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

    尊敬的 Ozino:

    感谢您的消息以及对 F28P65x 固件开发包用户指南的详细参考。

    确认是的、我的工程配置为同时支持位字段和 driverlib、我已经按照文档按照 _DUAL_HEADERS 建议定义了符号。 工程会按预期编译和运行、非常好。 但即使所有的 建议,我仍然会遇到与"相同的 typedef"定义相关的警告。

    我认为这可能是由于 typedef 不受保护 、 f28p65x_device.h, 因此我建议对该文件进行潜在的改进、以便更好地处理和避免冗余 typedef 定义。

    对于备忘录、警告消息涉及以下 typedef:

    typedef float float32_t;
    typedef double float64_t;
    typedef _Bool bool_t;

    此致、

    Alexandre

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

    尊敬的 Alexandre:

    感谢您的具体介绍。 我将由我们的软件团队进一步研究这一点。 我将继续、关闭这篇论坛帖子。

    此致、

    Ozino