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.

[参考译文] [TDA4VM]共享存储器 A72 <->C71

Guru**** 1957125 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/864341/tda4vm-shared-memory-a72---c71

您好!

目前、我正在探索内核之间的共享存储器。

(我应该提到、使用 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

x 出现错误。请重试或与管理员联系。