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:TDA4程序在 tivxNodeSendCommand 中模块

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1202788/tda4vm-the-tda4-program-blocks-in-tivxnodesendcommand

器件型号:TDA4VM

尊敬的专家:

我们在 TDA4VM 上工作, SDK 版本是'0703"。

我们的图表如下:

视频图形(60fps):捕获节点->显示节点1->显示节点2

视频图形在单独的线程(任务)中运行。

我们以每50ms 的另一个任务(触摸手柄任务)为视频图形任务指定了标志。

App 有时会在 TIvxNodeSendCommand 中阻止、但其他任务运行良好。

那么,你能给我一些建议或意见吗?

谢谢!

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

    尊敬的专家:

    我们在 TDA4VM 上工作, SDK 版本是'0703"。

    我们的图表如下:

    视频图形(60fps):捕获节点->显示节点1->显示节点2

    视频图形在单独的线程(任务)中运行。

    我们以每50ms 的另一个任务(触摸手柄任务)为视频图形任务指定了标志。

    视频图形任务将 执行"TIvxNodeSendCommand"以将裁剪参数发送到两个显示节点。

    该应用程序将在 tivxNodeSendCommand 中阻止,有时会持续工作。 但其他任务运行良好。

    那么,你能给我一些建议或意见吗?

    谢谢!

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

    您好、Wang、

    是否会停止/永久阻止它?  

    由于显示节点和用于更改参数的此 API 在同一任务中运行、因此当显示任务运行时、此命令处理可能会延迟。 但它不会被阻止、具体取决于您的帧 时间周期、它可能会被阻止1或2个帧时间周期。  

    此致、

    Brijesh

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

    尊敬的  Brijesh:

    视频图形停止。

    我想知道 IPC 停止工作了。(如何检查或使用其他方法?)

    此致

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

    您好、Wang、

    但是、它是否会被解除阻止、比如几毫秒后?  

    由于这是阻塞调用、因此如果由于 某种原因、显示节点崩溃、图形将停止。 您是否在 MCU2_0上看到一些崩溃?  

    此致、

    Brijesh

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

    尊敬的  Brijesh:

    但是、它是否会被解除阻止、比如几毫秒后?  

    否、 在 A72重新启动之前、它一直处于停滞状态。

    我已经检查了 MCU2_0日志,这些不是关于 MCU2_0崩溃的信息。

     此致

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

    您好、Wang、

    但是 MCU2_0是否仍在运行? 假设您的另一台显示器在出现此问题时是否仍正常运行? 我的意思是、它仍在更新帧、还是另一个图形卡在一帧中?  

    您能否说明您使用此 ioctl 更改了哪些参数? 还有、您要改变的价值是什么?  

    此致、

    Brijesh  

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

    尊敬的  Brijesh:

    所有的内核都运行良好。  

    此外,我们使用 Draw2D 在另一个 单独的线程(任务)中显示一些图标。

    当视频图形  停止时, Draw2D 工作良好。(图标可以更改)

    有关作物的参数如下:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    params->cropPrms.width = zoom->targetWidth;
    params->cropPrms.height = zoom->targetHeight;
    params->cropPrms.startX = zoom->targetPosX;
    params->cropPrms.startY = zoom->targetPosY;
    vx_user_data_object crop_obj = vxCreateUserDataObject(context, "tivx_display_crop_params_t", sizeof(tivx_display_crop_params_t), &params->cropPrms);
    vxCopyUserDataObject(crop_obj, 0,
    sizeof(tivx_display_crop_params_t),
    &params->cropPrms, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
    refs[0] = (vx_reference)crop_obj;
    status = VX_FAILURE;
    printf("tivxNodeSendCommand begin\r\n");
    status = tivxNodeSendCommand(node, 0, TIVX_DISPLAY_SET_CROP_PARAMS,
    refs, 1u);
    printf("tivxNodeSendCommand end\r\n");
    vxReleaseUserDataObject(&crop_obj);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    裁剪参数将每50ms 修改一次。(放大和缩小)

    最棒的!

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

    尊敬的  Brijesh:

    我在清晨做了一些测试。

    1、我创建了另一个 单独的 任务、以每50ms 发送一次显示裁剪参数(如果发送命令标志处于活动状态)。

    视频图形任务仍然  在函数"TIvxNodeSendCommand"上处于停止状态。

    以下是 MCU2_0日志:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [MCU2_0] 1.849994 s: CIO: Init ... Done !!!
    [MCU2_0] 1.850064 s: ### CPU Frequency <ORG = 1000000000 Hz>, <NEW = 1000000000 Hz>
    [MCU2_0] 1.850108 s: APP: Init ... !!!
    [MCU2_0] 1.850124 s: MCU2_0 version is V7.02.006... !!!
    [MCU2_0] 1.850144 s: SCICLIENT: Init ... !!!
    [MCU2_0] 1.850347 s: SCICLIENT: DMSC FW version [21.1.1--v2021.01a (Terrific Lla]
    [MCU2_0] 1.850382 s: SCICLIENT: DMSC FW revision 0x15
    [MCU2_0] 1.850406 s: SCICLIENT: DMSC FW ABI revision 3.1
    [MCU2_0] 1.850428 s: SCICLIENT: Init ... Done !!!
    [MCU2_0] 1.850447 s: UDMA: Init ... !!!
    [MCU2_0] 1.851655 s: UDMA: Init ... Done !!!
    [MCU2_0] 1.851700 s: MEM: Init ... !!!
    [MCU2_0] 1.851733 s: MEM: Created heap (DDR_SHARED_MEM, id=0, flags=0x00000004) @ e1000000 of size 16777216 bytes !!!
    [MCU2_0] 1.851785 s: MEM: Created heap (L3_MEM, id=1, flags=0x00000000) @ 3600000 of size 131072 bytes !!!
    [MCU2_0] 1.851827 s: MEM: Created heap (DDR_NON_CACHE_ME, id=5, flags=0x00000000) @ d8000000 of size 16777216 bytes !!!
    [MCU2_0] 1.851869 s: MEM: Init ... Done !!!
    [MCU2_0] 1.851887 s: IPC: Init ... !!!
    [MCU2_0] 1.851914 s: IPC: 9 CPUs participating in IPC !!!
    [MCU2_0] 1.851949 s: IPC: Waiting for HLOS to be ready ... !!!
    [MCU2_0] 1.851972 s: cpu_id=0 check 0
    [MCU2_0] 16.025942 s: cpu_id=1 check 1
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    2、我也尝试运行"/opt/vision_apps/vx_app_arm_ipc.out ",并输入'1',日志如下:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    root@j7-evm:/opt/vision_apps# ./vx_app_arm_ipc.out
    APP: Init ... !!!
    MEM: Init ... !!!
    MEM: Initialized DMA HEAP (fd=4) !!!
    MEM: Init ... Done !!!
    IPC: Init ... !!!
    IPC: Init ... Done !!!
    REMOTE_SERVICE: Init ... !!!
    REMOTE_SERVICE: Init ... Done !!!
    0.000000 s: GTC Frequency = 0 MHz
    APP: Init ... Done !!!
    0.000000 s: VX_ZONE_INIT:Enabled
    0.000000 s: VX_ZONE_ERROR:Enabled
    0.000000 s: VX_ZONE_WARNING:Enabled
    0.000000 s: VX_ZONE_INIT:[tivxInit:71] Initialization Done !!!
    0.000000 s: VX_ZONE_INIT:[tivxHostInit:48] Initialization Done for HOST !!!
    input formate:
    1:MPU
    2:MCU2_0
    3:MCU2_1
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    请帮助我们解决这个问题,谢谢!

    Best!

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

    您好、Wang、  

    1、我创建了另一个 单独的 任务,以每50ms 发送一次显示裁剪参数(如果发送命令标志处于活动状态)。

    在此测试中、您是否还在更改作物参数? 您能否确保每次迭代的裁剪参数相同?

    此致、

    Brijesh  

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

    尊敬的 Brijesh:

    1、在此测试中、您是否还在更改作物参数?  

    是的,我每50毫秒更换一次参数。

    2、您能否在每次迭代中保持相同的裁剪参数?

    我试图保持参数相同的每次迭代,它仍然 停滞不前。

    最棒的!

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

    您好、Wang、

    奇怪。 BTW、SDK7.3不支持裁剪、您是否添加了它?  

    您是否还有 CCS + JTAG 用于连接 MCU2_0并查看其卡滞位置?  

    如果没有、您能否在显示节点实现的调试控制命令中添加一些调试打印件、看看打印件卡住了哪里?

    此致、

    Brijesh

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

    您好、 Brijesh:

    奇怪。 BTW、SDK7.3不支持裁剪、您是否添加了它?  

    是的, 我们在之前的帖子中提出了这个问题。

    我今天向 A72内核和 MCU2_0添加了一些日志。

    最后,我发现它 停滞在".EventWait(cmd_ack_event,/ti/tiovx/source/framework/vx_context.c  timeout);"的".Event"-> ownContextSendControlCmd ->第655行(状态= tivxEventWait(cmd_ack_event, timeout);)

    在 MCU2_0上,它可以在函数"tivxDisplayControl"中获取 corp 参数 。  此外、MCU2_0内核运行良好。

    代码和日志如下:

    A72代码:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    obj_desc_cmd->cmd_id = (vx_enum)TIVX_CMD_NODE_CONTROL;
    obj_desc_cmd->dst_target_id = target_id;
    obj_desc_cmd->src_target_id =
    (uint32_t)tivxPlatformGetTargetId(TIVX_TARGET_HOST);
    obj_desc_cmd->num_obj_desc = 1u;
    obj_desc_cmd->obj_desc_id[0u] = node_obj_desc;
    obj_desc_cmd->flags = TIVX_CMD_FLAG_SEND_ACK;
    obj_desc_cmd->ack_event_handle = (uint64_t)(uintptr_t)cmd_ack_event;
    obj_desc_cmd->replicated_node_idx = (int32_t)replicated_node_idx;
    obj_desc_cmd->node_cmd_id = node_cmd_id;
    obj_desc_cmd->num_cmd_params = num_obj_desc;
    for (i = 0; i < num_obj_desc; i ++)
    {
    obj_desc_cmd->cmd_params_desc_id[i] = obj_desc_id[i];
    }
    status = tivxObjDescSend(target_id, obj_desc_cmd->base.obj_desc_id);
    if (status == (vx_status)VX_SUCCESS)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    A72日志:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [Graph info -> app_display_modify]cropPrms.startX = 0
    [Graph info -> app_display_modify]cropPrms.startY = 0
    [Graph info -> app_display_modify]cropPrms.width = 1280
    [Graph info -> app_display_modify]cropPrms.height = 720
    tivxNodeSendCommand begin
    ownContextSendControlCmd begin^^^^^^^^^^^^^^^^^
    tivxEventWait begin ^^^^^^^^^^^^^^^^^^
    tivxEventWait end ^^^^^^^^^^^^^^^^^^
    ownContextSendControlCmd end^^^^^^^^^^^^^^^^^
    tivxNodeSendCommand end
    app_display_sight_modify left^^^^^^^^^^^^^^^^^^^^^
    [Graph info -> app_display_modify]cropPrms.startX = 0
    [Graph info -> app_display_modify]cropPrms.startY = 0
    [Graph info -> app_display_modify]cropPrms.width = 1280
    [Graph info -> app_display_modify]cropPrms.height = 720
    tivxNodeSendCommand begin
    ownContextSendControlCmd begin^^^^^^^^^^^^^^^^^
    tivxEventWait begin ^^^^^^^^^^^^^^^^^^
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    MCU2_0代码

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    static vx_status VX_CALLBACK tivxDisplayControl(
    tivx_target_kernel_instance kernel,
    uint32_t node_cmd_id, tivx_obj_desc_t *obj_desc[],
    uint16_t num_params, void *priv_arg)
    {
    vx_status status = (vx_status)VX_SUCCESS;
    uint32_t size;
    tivxDisplayParams *dispPrms = NULL;
    status = tivxGetTargetKernelInstanceContext(kernel,
    (void **)&dispPrms, &size);
    if ((vx_status)VX_SUCCESS != status)
    {
    VX_PRINT(VX_ZONE_ERROR, "Failed to Get Target Kernel Instance Context\n");
    }
    else if ((NULL == dispPrms) ||
    (sizeof(tivxDisplayParams) != size))
    {
    VX_PRINT(VX_ZONE_ERROR, "Invalid Object Size\n");
    status = (vx_status)VX_FAILURE;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    MCU2_0日志

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [MCU2_0] 124.088268 s: VX_ZONE_ERROR:[tivxDisplayProcess:1056] SemaphoreP_pen d begin^^^^^^^^^^^^^^^^^^^^^
    [MCU2_0] 124.088793 s: VX_ZONE_ERROR:[tivxDisplayProcess:1058] SemaphoreP_pen d end^^^^^^^^^^^^^^^^^^^^^
    [MCU2_0] 124.088869 s: VX_ZONE_ERROR:[tivxDisplayProcess:1063] Fvid2_dequeue end^^^^^^^^^^^^^^^^^^^^^
    [MCU2_0] 124.089020 s: VX_ZONE_ERROR:[tivxDisplayProcess:1058] SemaphoreP_pen d end^^^^^^^^^^^^^^^^^^^^^
    [MCU2_0] 124.089084 s: VX_ZONE_ERROR:[tivxDisplayProcess:1063] Fvid2_dequeue end^^^^^^^^^^^^^^^^^^^^^
    [MCU2_0] 124.103802 s: VX_ZONE_ERROR:[tivxDisplayProcess:949] tivxGetTargetKe rnelInstanceContext Begin ^^^^^^^^^^^^^
    [MCU2_0] 124.103866 s: VX_ZONE_ERROR:[tivxDisplayProcess:953] tivxGetTargetKe rnelInstanceContext End ^^^^^^^^^^^^^
    [MCU2_0] 124.103914 s: VX_ZONE_ERROR:[tivxDisplayProcess:969] tivxGetObjDescE lement Begin ^^^^^^^^^^^^^
    [MCU2_0] 124.103961 s: VX_ZONE_ERROR:[tivxDisplayProcess:973] tivxGetObjDescE lement End ^^^^^^^^^^^^^
    [MCU2_0] 124.104003 s: VX_ZONE_ERROR:[tivxDisplayProcess:992] tivxQueueGet Be gin ^^^^^^^^^^^^^
    [MCU2_0] 124.104076 s: VX_ZONE_ERROR:[tivxDisplayProcess:994] tivxQueueGet Be gin ^^^^^^^^^^^^^
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    谢谢!

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

    您好!

    是否可以在 EVM 上的单摄像头或多摄像头示例中重新创建此设计? 调试会更容易一些。 我怀疑存在 IPC 问题。 但需要使用 EVM 上的现有示例重现此示例。

    或者 、如果您在 EVM 上提供了该示例、您能否与我们分享该示例?

    此致、

    Brijesh

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

    尊敬的  Brijesh:

    我已经解决了这个问题。

    这是因为 LVGL V6.0的设置参数。

    我们使用 LVGL 和 Draw2D 函数为 HMI 绘制像素。

    我们设置 LV_TICK_inc tick (心率为 LVGL )为1之前,视频图形 有时停止。(所有时间直到 A72重新启动。)

    但48小时前,我们设置  lv_tick_inc 记号为10 ,所有问题都消失了。  

    并且系统在过去48小时内一直稳定运行。

    但我们仍然感到困惑。

    最棒的!

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