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.

[参考译文] TM4C129ENCPDT:将 TivaWare C 系列2.1.1.71中的 TivaWare 库转换为2.1.3.156显示了工程构建错误(符号"g_iUSBMode"用不兼容的类型重新声明)

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/566972/tm4c129encpdt-transitioning-tivaware-libraries-from-tivaware-c-series-2-1-1-71-to-2-1-3-156-shows-an-error-on-build-of-project-symbol-g_iusbmode-redeclared-with-incompatible-type

器件型号:TM4C129ENCPDT

我刚刚使用 TivaWare C 系列更改更新了一个项目、但显示了该项目

链接时优化失败链接时优化 CIM_Tiva C/C++问题
gmake:***[All]错误2 CIM_Tiva C/C++问题
gmake[1]:***[main-build]错误2 CIM_Tiva C/C++问题
gmake[2]:***[CIM_Tiva.out]错误1 CIM_Tiva C/C++问题
符号"g_iUSBMode"使用不兼容的类型重新声明:符号"g_iUSBMode"使用不兼容的类型重新声明:CIM_Tiva C/C++问题

我已经转到了符号的位置。 它位于 TivaWare 的 usblib.h 文件中、但我在应用中不调用该变量。 请注意、使用2.1.1.71库时、我有正在工作的 USB 代码、因此我希望使用该变量。

此外、如果我将优化从4更改为3、我也可以使问题消失。 遗憾的是、我们以前遇到过一些问题、降低优化会由于时间问题而导致系统不稳定、因此这对我们目前来说不是一个有效的解决办法。

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

    Amit 现在可能有一个不同版本的实际问题示例?

    [引用 user="Wesley Creelly">我已转到符号的位置。 它位于 TivaWare 的 usblib.h 文件中、但我在应用程序中不调用该变量。

    不引用(您永远不会调用变量)无关紧要。 但消息指出 CIM_Tiva 中有两个声明。  因此、您可以将未受保护的 include 文件包含两次。 您可以尝试单独运行预处理器、查找重复的定义或通过编译器运行预处理的文件、并查看它是否会为您提供有关声明位置的更多信息。

    [引用 user="Wesley 克雷利"]此外,如果我将优化从4更改为3,则问题就会消失。

    EEEP!

    [引用 USER="Wesley 克雷利"]不幸的是,我们以前遇到过一些问题,即降低优化会由于时间问题而导致系统不稳定,因此这对我们目前来说不是一个有效的解决办法。

    这很少是有效的解决方法。 即使它"有效"、它也不能解决根本问题。 如果这是编译器错误、您需要知道它是什么以及它是如何表现的。 如果这不是编译器错误、则需要知道您的错误。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的快速回复、Robert。 我将检查我的 include 文件。

    同意后、我认为降低优化也不是有效的解决方法。 我只是想对可能表明这种情况的任何答复作出答复。

    我会告诉您我发现了什么。 再次感谢。
    -Wes
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wes、

    除了 usblib 之外、您是否在应用程序代码库中搜索了变量"g_iUSBMode"? 您还在使用 usblib 的预编译版本还是重新编译相同的版本?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Wesley 克雷利"]我同意,我也不认为降低优化是有效的解决方法。

    很高兴听到这个消息。

    让我再次演示一个常用的工具、即 PC-Lint。 它很可能会告诉您冲突定义的位置以及有关来源的更多信息。

    Robert

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

    Amit、您好!

    我在整个工作区中搜索了该变量、它只会显示在参考的 TivaWare 库的文件中。 请注意、我们正在重新编译这些文件。

    以下是搜索显示的内容:

    CIM_Tiva
    调试
    CIM_TIVA_linkInfo.xml
    63、952: G_iUSBMode
    CIM_Tiva.map (2个匹配项)
    1、813:20011228 g_iUSBMode
    4、219:20011228 g_iUSBMode

    HAL_TM4C129ENCPDT
    TivaWare
    参考文献
    器件
    usbdenum.c (10个匹配项)
    50:extern tUSBMode g_iUSBMode;
    342:assert (g_iUSBMode!= eUSBModeHost);
    343:assert (g_iUSBMode!= eUSBModeForceHost);
    348:IF (g_iUSBMode = eUSBModeNone)
    350:G_iUSBMode = eUSBModeDevice;
    356:if (g_iUSBMode!= eUSBModeOTG)
    409:IF (g_iUSBMode = eUSBModeForceDevice)
    413:否则、如果(g_iUSBMode = eUSBModeDevice)
    426:G_iUSBMode = eUSBModeDevice;
    485:IF (g_iUSBMode!= eUSBModeOTG)
    主机
    usbhostenum.c (10个匹配项)
    64:extern tUSBMode g_iUSBMode;
    2、544:if ((g_iUSBMode = eUSBModeHost)||(g_iUSBMode = eUSBModeForceHost))
    2、872:assert (g_iUSBMode!= eUSBModeDevice);
    2、873:assert (g_iUSBMode!= eUSBModeForceDevice);
    2、878:IF (g_iUSBMode = eUSBModeNone)
    2、880:G_iUSBMode = eUSBModeHost;
    2、936:IF (g_iUSBMode!= eUSBModeOTG)
    3、946:if (g_iUSBMode = eUSBModeHost)
    4、692:if ((ui32DevIndex =0)&&(g_iUSBMode =eUSBModeOTG)
    usbmode.c (5个匹配项)
    68:易失性 tUSBMode g_iUSBMode = eUSBModeNone;
    268:G_iUSBMode = iUSBMode;
    351:开关(g_iUSBMode)
    621:assert (g_iUSBMode = eUSBModeOTG);
    627:G_iUSBMode = eUSBModeOTG;

    如果在映射文件中有2个不同的行、我怀疑 Robert 是对的。 我将检查我的文件 include。

    请注意、我们为我们的硬件抽象层(HAL_TM4C129ENCPDT)创建了一个静态库、并在我们的主项目(CIM_Tiva)中引用它。

    此致、
    -Wes

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

    大家好、

    因此、我很幸运地查看了我们应用的预处理器文件、但我意识到我们的 HAL 静态链接库和应用项目中都包含了 TivaWare 库的内容。 也许有一些问题正在导致这个问题。 由于 Tivaware 库之间的更改、只添加了少数包含内容、因此我将开始注释掉包含/功能、并让您知道我找到的内容。

    此致、

    -Wes

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

    如果 gmake 在链接器期间失败、则一定不能像搜索前面所示那样生成映射文件。 它是否可以是以前良好构建的映射文件?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit、您好!

    你是对的。 映射文件没有任何用途。 它是以前良好构建中生成的较旧文件。

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

    第一个帖子中显示的错误是编译期间唯一的详细消息?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit、您好!

    下面是该控制台输出中所示内容的一行:


    错误:使用不兼容的类型重新声明符号"g_iUSBMode":
    "volatile tUSBMode[enum $fake881
    eUSBModeDevice = 0
    eUSBModeHost = 1.
    eUSBModeOTG = 2
    eUSBModeNone = 3
    eUSBModeForceHost = 4
    eUSBModeForceDevice = 5]"
    在"../TivaWare/usblib/usbmode.c 第68行和:
    tUSBMode[枚举$fake426
    eUSBModeDevice = 0
    eUSBModeHost = 1.
    eUSBModeOTG = 2
    eUSBModeNone = 3
    eUSBModeForceHost = 4
    eUSBModeForceDevice = 5]"
    在"../TivaWare/usblib/device/usbdenum.c 中的第50行)
    错误:使用不兼容的类型重新声明符号"g_iUSBMode":

    tUSBMode[枚举$fake426
    eUSBModeDevice = 0
    eUSBModeHost = 1.
    eUSBModeOTG = 2
    eUSBModeNone = 3
    eUSBModeForceHost = 4
    eUSBModeForceDevice = 5]"
    在"../TivaWare/usblib/host/usbhostenum.c 中的第64行和:
    "volatile tUSBMode[enum $fake881
    eUSBModeDevice = 0
    eUSBModeHost = 1.
    eUSBModeOTG = 2
    eUSBModeNone = 3
    eUSBModeForceHost = 4
    eUSBModeForceDevice = 5]"
    在"../TivaWare/usblib/usbmode.c 第68行)
    >>编译失败

    回顾控制台输出、似乎问题出在 usbdenum.c 和 usbhostenum.c 'extern tUSBMode g_iUSBMode'行和 usbmode.c 'volatile tUSBMode g_iUSBMode = eUSBModeNone;'行。 我更改了 usbdenum.c 和 usbhostenum.c 以包含'volatil'、现在所有内容都是构建的。 请注意、我检查了有关我们项目的这些文件的合并历史记录。 这个关键字似乎在我们的旧 TivaWare 库中使用。 根据我所能说的、当我们首次集成时、我的一位同事对它进行了更改。

    感谢你的帮助。

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

    您无需在 usblib 文件中更改它。 将 USB 放置在总线上时、g_iUSBMode 直接在应用中使用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、您好!

    我们可能需要对我们的应用程序和 HAL 库进行一些重组。 根据我们当前的日程安排、我暂时必须将其搁置。 感谢您的快速回复。 当我们再次尝试时、我会告诉您。

    此致、

    -Wes

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

    当然。 当您返回代码结构调整时、请告知我们。