请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:AM6442 工具/软件:
您好、
客户已发现 am64x MCU plus SDK 中存在问题(09_01_00_41、但11_00_00_15中仍存在):
使用 MCSPI 驱动程序并像 SDK 中的几个示例(例如 enet_layer2_icssg)那样在链接时启用-flto 时、会出现问题。 发生这种情况时、gMcspiXUdmaRxRingMemCh0正确对齐缓存对齐(设置为128、但 IC 具有32字节的缓存行)、但可以跟随任何其他对齐不太严格的段。 在它们的例子中、gMcspi1UdmaRxRingMemCh0是在一个重要的链接列表之前链接的8个字节。 结果是、当在 SDK UDMA 代码中调用 CacheP_inv 时、链接列表中单个链路的最新更改将丢失。
有一些可能的解决方案和权变措施来解决这个问题
- 将 gMcspiXUdmaRxRingMemCh0以及最终传递给 CacheP_*函数的任何其他缓冲区填充到缓存行的长度、以确保无论是否启用了 Fdata 段还是 flto、代码都是正确的。 这需要修补 SDK!
- 禁用-flto 会增加整体二进制大小和内存消耗。
- 确保 syscfg 生成的文件不参与 flto、在这种情况下、手动在链接器中添加条目以使 syscfg 生成的文件保存在一起。 似乎可行、但无法证明是合理的、因为这仍然会导致其他符号可能部分缓存失效。
是否有更好的解决方法可用?
其他驱动器也可能存在类似的潜在问题。
此致、Holger