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.
您好!
目前、我正在探索内核之间的共享存储器。
(我应该提到、使用 OpenVx 和视觉应用中的内容对我来说不是一个选择。)
因此、在 C71上有一个类似如下的代码:
易失性 uint32_t* testPtr =(uint32_t*) 0xBC000000; uint32_t 计数器= 0U; while (true) { * testPtr = counter++;
睡眠;// 1秒 }
现在、在 A72 Linux 上、我可以使用 busybox 中的"devmim"或微笑实现等工具、并读取该地址处的值。
当我这样做时:
true 时;执行 sudo ./devmem 0xBC000000;完成
它工作正常、计数器每秒递增一次。
但是,当我实施使用/dev/mem 和 mmap()(如 devmem dose)并在循环中读取值的程序时,它不起作用。
数字每隔几秒突然跳过一次。 因此、它仅在关闭和重新创建之间的映射时起作用。
我认为这是 Linux 中的缓存问题。 如何在 Linux 用户空间中使用共享内存?
如何防止缓存或同步内存?
此致
1月
您好、Jan、
请参阅有关在 C7x 端使用缓存 API 的这篇文章
https://e2e.ti.com/support/j721e/f/1026/p/857682/3197364#3197364
在 Linux 方面、从用户空间缓存操作有点复杂、在这里、需要做的是使用离子分配器在 Linux 中分配内存。
然后、在该离子分配内存上、可以在 Linux 端执行缓存操作。
在 Linux 中、用户空间中没有直接高速缓存运算 API。
我将向您推荐 vision_apps/utils 以供参考。 您可以选择不使用此代码、而是将其视为参考代码并将类似的逻辑放入您的应用中。
请注意、离子分配器是一个内核 API、而不是特定于 TI 的 API。
vision_apps/utils/mem/src/app_mem_linux_ion.c
这展示了如何使用 Ion API 来分配和执行缓存操作。
希望这对您有所帮助!
此致
Kedar