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.

[参考译文] AM6442:MCU+ SDK AM64x:09.01.00.41中的 McSPI DMA 错误、gMcspiDmaUdmaFxns 重新定义

Guru**** 2553370 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1317053/am6442-mcu-sdk-am64x-mcspi-dma-bug-in-09-01-00-41-gmcspidmaudmafxns-redefinition

器件型号:AM6442

将 MCSPI 与带有上述版本的 DMA 和 LLD 配合使用时、 gMcspiDmaUdmaFxns 结构会从多个链接的预编译库中多次定义、 mcu_plus_sdk_am64x_09_01_00_41\source\drivers\mcspi\v0\lld\dma\mcspi_dma.h、  例如  drivers.am64x.r5f.gcc-armv7.debug.lib  。 原因是、上述头文件中省略了"extern"关键字:

  • 版本的 LaunchPad。 09.00.00.30( mcu_plus_sdk_am64x_09_00_00_31\source\drivers\mcspi\v0\dma\mcspi_dma.h ):

#if defined (DMA_VERSION_MCSPI_UDMA)
extern MCSPI_DmaFxns gMcspiDmaUdmaFxns;
#endif
#if defined (DMA_VERSION_MCSPI_EDMA)
extern MCSPI_DmaFxns gMcspiDmaEdmaFxns;
#endif

  • 在版本09.01.00.41中( mcu_plus_sdk_am64x_09_01_00_41\source\drivers\mcspi\v0\lld\dma\mcspi_dma.h ):

#if defined (DMA_VERSION_MCSPI_UDMA)
MCSPI_DmaFxns gMcspiDmaUdmaFxns;
#endif
#if defined (DMA_VERSION_MCSPI_EDMA)
MCSPI_DmaFxns gMcspiDmaEdmaFxns;
#endif

 使用09.00.00.30开始的文件内容修补09.01.00.41后  、程序成功构建。 但是、我尚未对其正确功能进行测试。

非常感谢您的评论。 谢谢、此致!

天使

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

    你好,Angel,

    在09_01_00_41中删除 extern 的当前修复方法对我来说似乎是可行的、因为 mcu_dma.h 文件中提供了结构体定义、并且此文件包含在 ti_driver_config.c 文件中。

    在我看来,这似乎是可以的。  您是否遇到了任何问题?

    此致、

    S.Anil.

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

    尊敬的 Swargam:

    实际上、相反、  没有  "外部"导致了问题。 修复过程中会引入这些组件、与之前版本的 MCU+ SDK 相同。

    此致!

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

    您好,Angel,

    实际上、在验证代码后、我再也看不到任何问题。 甚至我们假设这个变量可以在多个文件中定义也不可能,因为有预处理器检查,以避免多个文件定义。

    请告诉我,如果我们没有外部存在,将会出现什么问题。 我缺少什么吗?

    如果你分享的细节什么问题将会出现,如果没有 extern 真的将是有帮助的.

    此致、

    S.Anil.

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

    尊敬的 Swargam:

    即使我们假设此变量可在多个文件中定义也是不可能的,因为有预处理器检查以避免多个文件定义

    通常不会有问题、除非您使用标头作为库构建.c 文件。 这样、防护装置仅在库本身的构建中有效。 假设您构建2个库、  drivers.am64x.r5f.gcc-armv7  另一个(不幸的是、我不再有名称)、它使用此文件。 Include guard 将适用于一个库、并防止文件被重新处理两次、这是可以的。 而另一个驱动器也是如此。 但是、这两个库都将包含 此 符号。 最后、如果您在单个可执行文件中对这两个库进行链接、它们都将包含此符号、而且 include 守护程序无法防止这种情况的发生。

    请给我一些时间再重复一次、然后在此处发布准确的步骤。

    此致!

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

    你好,Angel,

    谢谢、请发布您遇到的问题。 同时、我也可以自行查看。

    此致、

    S.Anil.