Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我是否需要将“分散-聚集DMA”链接列表放入无缓存内存?_C - Fatal编程技术网

C 我是否需要将“分散-聚集DMA”链接列表放入无缓存内存?

C 我是否需要将“分散-聚集DMA”链接列表放入无缓存内存?,c,C,所有源和目标都不在可缓存内存中。毫无疑问。 在启动DMA(即分散-聚集DMA)之前,我要编写DMA链表(带有src、dest、size和next)。我想我不必把列表放在不可缓存的内存中。有人能证实吗? 非常感谢! linda规则是,任何由硬件直接修改的内容都需要放在不可缓存的内存中。否则,正如您所想象的,CPU上运行的代码可能会从缓存中看到过时的数据。因此,缓冲区和由硬件直接修改的任何其他数据结构都需要标记为不可缓存。如果硬件以任何方式操作列表,或者更新任何状态位等,那么这也需要是不可缓存的 所

所有源和目标都不在可缓存内存中。毫无疑问。 在启动DMA(即分散-聚集DMA)之前,我要编写DMA链表(带有src、dest、size和next)。我想我不必把列表放在不可缓存的内存中。有人能证实吗? 非常感谢!
linda

规则是,任何由硬件直接修改的内容都需要放在不可缓存的内存中。否则,正如您所想象的,CPU上运行的代码可能会从缓存中看到过时的数据。因此,缓冲区和由硬件直接修改的任何其他数据结构都需要标记为不可缓存。如果硬件以任何方式操作列表,或者更新任何状态位等,那么这也需要是不可缓存的

所有源和目标都不在可缓存内存中。毫无疑问


顺便说一句,这个断言并不总是成立的。如果硬件实现了其他缓存一致性机制(总线侦听等),那么您甚至不必担心缓冲区。

什么操作系统?什么样的CPU?你的问题很不连贯。非常感谢你的回答。在我的例子中,链表只被s/w修改,并且在我开始DMA之前被修改。在这种情况下,可以将链表放在不可缓存的内存中吗?是的,在这种情况下,它可以放在任何一种内存中。别忘了接受一个对你有帮助的答案。对不起。我是新来的。我怎么接受呢。点击“绿色检查”?你的答案很有帮助!!