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.

[参考译文] ARM-AM243X:MCSPI_fifoWrite 由于 ARM-LDM 命令的未对齐访问而在带有-Oz 选项的版本中产生中止 MCU-PLUS-SDK

Guru**** 2467650 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1391567/mcu-plus-sdk-am243x-mcspi_fifowrite-produces-abort-in-release-builds-with--oz-option-because-of-unaligned-access-for-arm-ldm-command

器件型号:MCU-PLUS-SDK AM243X

工具与软件:

您好!

我们曾经遇到过 OSPI-driver 的类似问题: https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1269230/mcu-plus-sdk-am243x-alignment-problems-with-gpmc-psram-in-ospi-in-release-builds/4914983?tisearch=e2e-sitesearch&keymatch=%2520user%253A453845#4914983

此处生成的 ARM-LDM 命令就是问题所在、它是使用-Oz 时生成的。 现在情况似乎完全相同:

如您所见、bufPtr 指向0x7001565B、这不是对齐的地址。 在下一个汇编行中发出 LDM 命令、使用 R3、其保存这个奇数值。

但是、您也可以看到 mcspi-driver 中的调用函数对 uint8_t 对齐的地址执行 uint32_t*:

如果我们仅为驱动程序库使用-os、则不会出现任何问题。

BTW。 我们在引入 LLD 之前仍然使用旧的驱动程序、因为变化太大、无法简单地实现。 但是、当前 SDK 中存在完全相同的代码、因此我认为这是一个一般问题。

此致

Felix

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

    Felix、您好!

    感谢您的提问。

    在此处生成的 arm-ldm 命令就是问题所在、该命令是使用-oz
    时生成的

    您能否指出如何设置-Oz 的步骤?

    使用默认设置时、在我的 TI EVM 设置的版本中似乎没有问题。

    此致、

    Vaibhav

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

    嗨、Vibhav、

    很抱歉遗漏了一些信息。

    我们既不使用 EVM、也不使用示例。 我无法看到它直接弹出的位置、因为此问题是由 mcspi 驱动器的继续中断引起的。 但我们可能有一个 uint8_t 数组未对齐或 smth、这会产生此问题。 无论如何、我在驱动程序中看到了这个问题、因为从 uint8_t*转换到 uint32_t*总是非常危险、而且不安全存储器、根本不应该这样做。 尤其是使用-oz-选项生成的 LDM 命令无法使用未对齐访问时(即使 R5F 本身支持该访问)。

    当您编译 drivers-sdk-library 时、-oz 会自动添加为选项。 因此、我们只使用 SDK 的 makefile。

    此致

    Felix

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

    Felix、您好!

    我将在驱动程序中浏览该铸造实现、并为此提出内部 JIRA。

    此致、

    Vaibhav

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

    Felix、您好!

    我已经向开发团队的一位成员传达了这一点。

    一旦我收到他们的反馈、我也会在这里进行更新。

    感谢您的耐心。

    此致、

    Vaibhav

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

    Felix、您好!

    以下是开发团队的评论:  

    "否、因为从应用程序开始、我们将缓冲区大小定义为 uint8_t、uint16_t 或 uint32_t、因此 将调用 MCSPI_fifoRead8、MCSPI_fifoRead16、MCSPI_fifoRead32。 因此内存对齐不会进入图片 "

    此致、

    Vaibhav

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

    你好、Vaibhav。 我看到了魔鬼的意思,但这不是我的观点。 我的意思是、buffersize 已经定义、而它调用的是正确的 FIFO 函数、那很好。 但它正在从缓冲器中读取、在本例中、该缓冲器未对齐。 这意味着它是一个未对齐的 uint8_t 地址、它会被强制转换为该 uin32_t*。 这与 bufferSize 无关、它是对齐问题。

    此致

    Felix

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

    尊敬的 Felix:

    该专家目前已离开办公室一周。 对该线程的响应将被延迟。

    感谢您的耐心。

    此致、

    Tushar

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

    Felix、您好!  

    请稍候再收到回复。

    更新:由于其他主题帖、我会在本周晚些时候回复到此主题帖。

    此致、

    Vaibhav

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

    Felix、您好!

    请预计在9月27日前回复。 相关的开发人员将与我讨论此问题、我可以在明天自行解答您的问题。

    邮件中的最新对话:

    "

    这个问题不是关于缓冲区的大小、而是关于缓冲区地址。

    "

    非常感谢您的耐心。

    此致、

    Vaibhav

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

    Felix、您好!

    非常感谢您的耐心。

    我们的开发人员今天不在办公室、他将在星期一回来。  

    您能否确认以下问题是否是您的问题?

    我是说是的、bufferSize 已定义、且它调用了正确的 fifo-function、这是可以接受的。 但它正在从缓冲器中读取、在本例中、该缓冲器未对齐。 这意味着它是一个未对齐的 uint8_t 地址、它会被强制转换为该 uin32_t*。 这与 bufferSize 无关、这是对齐问题。

    您想在此问题中添加任何其他内容吗?

    此致、

    Vaibhav

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

    嘿 Vaibhav、

    感谢您的答复。
    是的、这是有关我的问题的更多详细信息。 只想指出的是、这并不是关于缓冲区的一般信息、而是关于缓冲区所在的地址。 那么、在 FIFO 写入函数开始读取的末尾、

    此致

    Felix

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

    Felix、您好!

    只是想指出,它并不是关于一般的缓冲区,而是关于它所在的地址。 因此、在 FIFO 写入函数开始读取的末尾。

    感谢有关这方面的额外说明。

    感谢您的耐心。 在周一晚上 IST 之前、请允许我用开发团队提供的更新返回此主题。

    此致、

    Vaibhav

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

    Felix、您好!

    我已经对此进行了讨论、并就此提出了软件和 MCU PLUS SDK 错误、我们期待在2024年10月3日之前收到软件团队的建议和改进。 发布此内容后、我将传达我们的相关行动计划。  

    感谢您识别此错误以及您的耐心。

    此致、

    Vaibhav

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

    您好、Manuel:

    根据邮件请求解锁该线程。

    请更新客户端的最新发现

    此致、

    Vaibhav

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

    嘿 Vaibhav、

    很抱歉这么晚才回复。 因此、我们更改为使用32位缓冲区大小、它可以正常工作。 我仍然会考虑以下情况:uint 32位指针被降序为无符号8位。 我还需要弄清我们的工程师为什么坚持使用8位缓冲器大小...

    此致、

    Felix