晚风. 发表于 2023-12-21 17:17:15

关于H7系列MPU配置的S位的问题



如果我配置一块内存区域如下图:



这块内存用户需要填充数据,同时需要使用DMA将内存中的数据发送到外设。

如果在 用户写 和 DMA传输 同时操作了这块内存。这种情况算不算多个总线访问一块不共享的内存,从而会产生错误?那么这种错误会导致什么?是单纯的传输数据错误?还是会进入hardfulat异常?

附一下背景:
H743+裸机lwip(TCP传输)
需要在中断中做高速采集并填充数据,填满之后用TCP发送出去(while循环中发送)。
为什么会想到这种奇葩的问题呢?
是因为突然想到之前做的一个项目,使用到了lwip(TCP)发送大量数据,当时参考了一位ST员工的配置就是上图的,链接在这里:如何使用以太网为STM32H7创建项目?- STMicroelectronics 社区
在高采样率下发送的时候一直会程序崩溃(低采样率可以正常运行),每次用抓包工具观察也都是 在对方发送回应包(数据丢失)之后的几包就出错了。
而lwip TCP内部是有一个缓冲区(存放暂未发送出去的数据),会不会就是在这些数据交互的过程中,DMA和用户同时操作了非共享的地址,导致了程序崩溃?
后来改成用UDP就没问题了,但是这个问题一直没有解决,当时尝试用了一下带操作系统的lwip(TCP),高采样率下可以正常传输,但是采集的信号质量很差。

晚风. 发表于 2023-12-22 08:57:49

图怎么看不到{:18:}
就是MPU配置时
TEX位为001
S/C/B位都为0

eric2013 发表于 2023-12-22 09:24:00

有个这个概率,可以开启S试试。我们的网络例子,动态内存这块一直配置的这个Device模式,这个模式下不管S是0还是1都是共享的






晚风. 发表于 2023-12-22 11:25:04

eric2013 发表于 2023-12-22 09:24
有个这个概率,可以开启S试试。我们的网络例子,动态内存这块一直配置的这个Device模式,这个模式下不管S是 ...

谢硬汉哥,主要是现在手头上没有这个环境了,所以测试不了。以后遇到类似的问题是应该设成device模式
页: [1]
查看完整版本: 关于H7系列MPU配置的S位的问题