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.

[参考译文] PROCESSOR-SDK-J721S2:j721s2 Vision app (R5 MCU2_0)- a72 (mpu1_0) IPC 通信

Guru**** 2540720 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1411954/processor-sdk-j721s2-j721s2-vision-app-r5-mcu2_0---a72-mpu1_0-ipc-communication

器件型号:PROCESSOR-SDK-J721S2

工具与软件:

在 A72和 R5之间的 IPC 通信期间、会出现消息错误 [CIpcDevice.cpp:59] CIpcDevice::Write() failed

日志记录后发现、当物理地址为0时会发生错误。

我已记录相关部件(第26行)

int16_t Virtio_getAvailBuf(Virtio_Handle vq, void **buf, int32_t *len)
{
    uint16_t head;
    int16_t  retVal;

    /* There's nothing available? */
    if (vq->last_avail_idx == vq->vring.avail->idx)
    {
        /* We need to know about added buffers */
        vq->vring.used->flags &= (uint16_t)~VRING_USED_F_NO_NOTIFY;
        retVal = -1;
    }
    else
    {
        /*
         * Grab the next descriptor number they're advertising, and increment
         * the index we've seen.
         */

#ifdef QNX_OS
        /* Only get avail array entries after they have been exposed. */
        asm("   DMB SY");
#endif

        head = vq->vring.avail->ring[vq->last_avail_idx % vq->vring.num];
        printf("last_avail_idx:%d / vq->vring.num:%d / head:%d\n",
            vq->vring.avail->ring[vq->last_avail_idx],vq->vring.num,head);
        vq->last_avail_idx++;

        *buf = mapPAtoVA(vq->vring.desc[head].addr);
                // printf("Physical address: %p\n", (void*)vq->vring.desc[head].addr);
                // printf("Virtual address: %p\n", *buf);

        *len = (int32_t)vq->vring.desc[head].len;
        retVal = (int16_t)head;
    }

    return (retVal);
}

当写入错误 last_avail_idx 在128到255范围内时、似乎会发生写入错误。 但是、当 last_avail_idx 从255复位为0时、不会发生错误。

我很好奇、为什么它只能在高达127时才能正常工作、以及为什么在255后计数重置为0并且不会进一步递增。

您能否为我介绍需要检查哪些部件才能修复此错误?

您能否为我介绍一下为什么会出现此错误、以及需要修改哪些器件才能修复此错误?

谢谢你

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

    您好!

    我想知道您是否在末尾修改了 vision_apps 存储器映射吗?

    如果可以、您能否分享相同内容?

    之后是否出现 IPC 问题?

    此致、

    Nikhil

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

    我没有编辑内存映射!

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

    您好!

    所以、在不修改任何存储器映射的情况下、发布的 SDK 上会出现这个问题。

    您能告诉我您在这里运行的是哪个应用程序吗?  

    是 vision_apps 中的 IPC 演示吗?

    此致、

    Nikhil

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

    不、这不是视觉应用演示。
    并且先前的查询已得到解决、但在类似的上下文中会发生错误。
    我打印了一个附加值 vq->vring.avial->idx、该值与(129到255)间隔中的 vq->last_avie_idx 值相同。
    我们已确认、VQ->LAST_AVAIL_IDx 值在达到256后立即再次增加。

    值 vq->vring.avi->idx 在 Virtio_addAvailBuf()中作为增量输出、但 Virtio_addAvailBuf 和 Virtio_getAvailBuf 中每个函数的增量输出方式不同。

    1.为什么 vq->vring.avi->idx 的值 vq->last_avie_idx 在(129-256)间隔内固定为384?

    2. vq->vring.avial->idx 值在哪里增加?

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

    我想我找到了原因。
    在将 ipc_virtio.c 中定义的#defineRP_MSG_BUF_SIZE 更正为512->2048时、在上述特定部分中发生了错误、
    我不能提高缓冲区大小超过512?

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

    您好!

    我正在关闭此主题、因为 https://e2e.ti.com/e2eprivate/lg/lg-ti-processors/f/lg-jacinto-forum/1418175/processor-sdk-j721s2-please-review-the-change-of-the-ipc-communication-vring-size 中再次报告了类似的问题

    此致

    Tarun Mukesh