工具与软件:
尊敬的 TI 专家:
客户正在使用 AM2432 SDK9.2。
客户配置了 UART DMA 模式、并将接收模式配置为回调模式、如下所示。

但是、客户发现回读的数据全部为0、下面提供了一些编码供您参考。


测试结果显示全部为0。

客户做了很多测试、最后找到了解决这个问题的方法、只是简单而已 将 metaPackage 阵列从4更改为4*8 如下所示。

完成此更改后、结果现在显示为正常。

您能给我们提供一个解释、说明为什么这种更改可以解决这个问题吗?
非常感谢、
Kevin
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.
工具与软件:
尊敬的 TI 专家:
客户正在使用 AM2432 SDK9.2。
客户配置了 UART DMA 模式、并将接收模式配置为回调模式、如下所示。

但是、客户发现回读的数据全部为0、下面提供了一些编码供您参考。


测试结果显示全部为0。

客户做了很多测试、最后找到了解决这个问题的方法、只是简单而已 将 metaPackage 阵列从4更改为4*8 如下所示。

完成此更改后、结果现在显示为正常。

您能给我们提供一个解释、说明为什么这种更改可以解决这个问题吗?
非常感谢、
Kevin
尊敬的 Kevin:
我已经通读了你们的答复。
第一个定义是:
uint8_t array[4]__ attribute _((aligned (32)))
缓冲区只有4个字节、但强制对齐到32个字节。 这会浪费内存、并且可能无法与 DMA 良好配合使用、DMA 通常在32/64字节等较大的块上运行。
为了实现可靠且高效的 DMA 操作、请继续使用第二个定义:
uint8_t array[4*8]__attribute__((aligned (32)))
在本例中、阵列大小(32字节)与对齐相匹配、因此具有高效的存储器访问、因为 DMA 与缓存行(通常为32/64字节)配合使用。
另外、您是否还可以继续操作、在"Memory Browser"中查看阵列的地址。 请检查在第一种情况下是否可以在该处看到数据。
此致、
Vaibhav