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.

[参考译文] CCS:定制应用、Graph Verify 在目标上挂起

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/914261/ccs-custom-application-graph-verify-getting-hang-on-target

工具/软件:Code Composer Studio

大家好、

使用 PSDK_RTOS_auto_J7_06_02_00_21补丁、TI 已使用 CDDS 向我们发布了 Tidl 和 mmalib 补丁。

我们使用过的  

TIDL 修补   程序:tidl_j7_01_01_01

MMA 库  :MMALib_01_01_00_02

我们正在尝试运行 tensorflow 模型。 使用以下主题中提到的建议。

https://e2e.ti.com/support/tools/ccs/f/81/t/906855

我们已经能够在 PC 仿真模式下验证我们的自定义应用(基于 app_tidl_od)。 输出按预期输出。  

正如 Shyam 先生在离线讨论中建议的那样、在 Draw 框内核中进行了主要更改。  

但是、在尝试在目标上运行相同的应用程序时、我们在图形验证中遇到了问题。 没有来自图验证的错误、并且该错误被卡住。 请找到 UART 日志。

root@j7-evm:/opt/vision_apps #./vx_app_tidl_od.out -cfg app_dasnetod.cfg
app:init ... !!!
app_log:映射0xac000000 ...
app_log:映射0xac000000 -> 0xff87ae0000大小为262144字节
MEM:init ion ... !!!
MEM:已初始化的 Ion (FD=4)!!!
MEM:初始化离子... 完成了!!!
IPC:初始化... !!!
APP_LOG:映射0xac040000 ...
app_log:映射0xac040000 -> 0xff85b40000大小为33161216字节
app_log:映射0x30e00000...
APP_LOG:映射0x30e00000 -> 0xff87fd0000 (大小为3072字节
) IPC:init ... 完成了!!!
远程服务:初始化... !!!
远程服务:初始化... 完成了!!!
应用程序:初始化... 完成了!!!
0.009842 s:vx_zone_init:已启用
0.009854 s:vx_zone_error:Enabled
0.009859 s:vx_zone_warning:Enabled
0.010283 s:vx_zone_init:[TIvxInit:75]初始化完成!!!
0.012134 s:vx_zone_init:[TIvxHostInit:44]主机初始化完成!!!
默认参数设置!
解析的用户参数!
更新了用户参数!
更好的初始化!
在0x0000FFFF83231740处计算 checksum1234、大小= 579328
TIDL 初始化完成!
预处理器更新完成!
预处理初始化完成!
绘制检测更新完成!
抽取检测完成!
Img Mosaic Init 完成了!
显示初始化完成!
应用程序初始化完成!
图形初始化完成!
标量创建完成!
Preproc 创建完成!
TIDL 创建完成!
Draw detection node call
Draw Detection set node target
replicate
Draw Create Done (绘制检测节点调用)!
马赛克创建完成!
显示创建完成!
应用程序创建图完成!
[ 129.370371] NET:注册协议系列15
[129.416257]初始化 XFRM netlink 套接字
[316.466768] EXT4-FS (mmcblk1p2):自上次 fsck 以来的错误计数:312
[316.472853] EXT4-FS (mmcblk1p2):初始错误计数:1587062324
:1624384_zh_bultramp4:16241524_ex_zh_time_time_extramp4:1594_extramp4:16384_time_time_extramp4:162624_time_extramp4:16384_time_time_extramp4:16384_ext_zh_time_ex

   status = vxVerifyGraph (obj->graph);函数调用没有错误。 请帮助我们解决此问题

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

    大家好、  

    在进一步调试时、我发现"vxVerifyGraph" 卡在该代码段中。

    if (status =(vx_status) vx_Success)
    {
    /*为每个节点调用目标内核初始化
    *这会导致与目标内核进行消息代码化
    *内存被分配、必须通过目标内核释放
    * deinit。
    *在节点发布期间调用内核 deinit
    *
    状态= GraphownNodeKernelInit (graph);//停留在此函数调用中
    if (status!=(vx_status) vx_Success)
    {
    vx_print (vx_zone_error、"节点内核初始化失败\n");
    }
    } 

    在进一步调试函数"GraphownNodeKernelInit"时、我看到循环的位置是它卡住的位置。

    对于(i=0;i num_nodes;i++)
    {
    Node = graph->nodes[i];
    printf ("在 GraphownNodeKernelInit 循环节点%d\n",i 中);
    if (node && node -> kernel)(节点&&节点->内核)
    {
    状态= ownNodeKernelInit(节点);
    vx_print (vx_zone_info,"节点%d 的内核初始化,内核%s...\n",i,节点->内核->名称);
    }
    printf("In the ownNodeKernelInit %d\n",I);
    if (status!=(vx_status) vx_Success)
    {
    vx_print (vx_zone_error、"节点%d 的内核初始化、内核%s ... 失败!!!!\n",i,节点->内核->名称);
    中断;
    }
    
    if (node && node -> kernel)(节点&&节点->内核)
    {
    vx_print (vx_zone_info、"节点%d 的内核初始化、内核%s ... 已完成!!!\n",i,node->kernel->name);
    }
    } 

    此 for 循环的 UART 日志显示:

    在
    
    
    
    所有权节点1的所有权节点节点1中、在所有权节点2的所有权节点1中、在所有权节点内核内核内核内核内核内核内核内核内核内核内核内核内核内核内核内核内核0内核内核内核内核内核内核内核内核内核内核内核内核内核内核内核内核内核内核 

    请为我们提供一些有关如何查找此问题的指导。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Anshuman、您好!

    您能否添加下面列出的一些其他调试语句?

    请在函数 ownNodeKernelInit 的以下位置的 tiovx/source/framework/vx_node.c 内放置一些打印语句:

    在该函数的开始处

    2.在下面的回调函数之前和之后。  此回调发生在 NownNodeKernelInit 内部的两个位置

    status = node->kernel->initialize (node、node->参数,
    node->kernel->signature.num_parameters);

    在该函数的末尾处

    请将该实验的结果发送给我。

    此致、

    卢卡斯

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

    尊敬的卢卡斯:

    验证图形是否正确解析、但我们尝试调试更多内容以找出问题。

    因此、我们尝试遵循您在该主题中向 Sagar 提供的建议(https://e2e.ti.com/support/processors/f/791/t/914156)

    将打印内容放入"TIvxAddTargetKernelDrawBoxDetections"  和 "TIvxKernelDrawBoxDetectionsCreation"中、以了解内核是否 使用 TIvxRegister 调用注册、以及内核之间的通信是否正常。

    我们发现控制进入函数调用" tivxKernelDrawBoxDetectionsCreate "的内部  、但没有进入函数调用"tivxAddTargetKernelDrawBoxDetections"的内部。

    请在下面找到添加了打印件的代码

    static vx_status vx_callback tivxKernelDrawBoxDetectionsCreate
    (
    tivx_target_kernel_instance 内核、
    tivx_obj_desc_t * obj_desc[]、
    vx_uint16 num_params、
    void * vx_arg
    )
    {
    printf ("我位于 tivxKernelBoxDetects[]内部
    
    ;vx_pars=uints32);vxvx_uints=uintsn_uintsus_uintsn_uintegu
    //printf ("我在 TIvxkernel 中抽取检测创建\n");
    对于(i = 0U;i < num_params;i ++)
    {
    如果(NULL =obj_desc[i])
    {
    printf ("空参数创建%d\n",i);
    status = vx_failure;
    中断;
    }
    }
    printf ("我正在从 tivxKernelDrawBoxDetectionsCreate\n");
    return (status);
    } 
    void tivxAddTargetKernelDrawBoxDetations()
    {
    char target_name[TIVX_TARGET_MAX_NAME];
    vx_enum self_CPU;
    
    self_cpu = tivxGetSelfCpuId();
    
    if ((self_CPU =TIVX_CPU_ID_DSP1)||(self_CPU =TIVX_CPU_ID_DSP2)||(self_CPU =TIVX_CPU_ID_A72_0))
    {
    printf ("tivxAddTargetKernelDrawBoxDetections:::First if condition\n");
    if (self_CPU =TIVX_CPU_ID_DSP1)
    {
    printf ("tivxAddTargetKernelDrawBoxDetections::DSP1\n");
    strncpy (target_name、TIVX_TARGET_DSP1、TIVX_TARGET_MAX_NAME);
    }
    否则、如果(self_CPU =TIVX_CPU_ID_DSP2)
    {
    printf ("tivxAddTargetKernelDrawBoxDetections::dSP2\n");
    strncpy (target_name、TIVX_TARGET_DSP2、TIVX_TARGET_MAX_NAME);
    }
    否则、如果(self_CPU =TIVX_CPU_ID_A72_0)
    {
    printf ("tivxAddTargetKernelDrawBoxDetections:::A72_0\n");
    strncpy (target_name、TIVX_TARGET_A72_0、TIVX_TARGET_MAX_NAME);
    }
    
    Vx_DrawBoxDetation_kernel = TIvxAddTargetKernelByName
    (
    TIVX_kernel_Draw、box_detections_name、
    Target_name、
    TIVxKernelDrawBoxDetectionsProcess、
    tivxKernelDrawBoxDetectionsCreate、
    tivxKernelDrawBoxDetectionsDelete、
    null、
    null
    );
    }
    printf ("TIvxAddTargetKernelDrawBoxDetections::如果条件为"则为外部);
    } 

    也请查找控制台输出:

    root@j7-evm:/opt/vision_apps #./vx_app_tidl_od.out -cfg app_dasnetod.cfg
    app:init ... !!!
    app_log:映射0xac000000 ...
    app_log:映射0xac000000 -> 0xffb4fc0000大小为262144字节
    MEM:init ion…… !!!
    MEM:已初始化的 Ion (FD=4)!!!
    MEM:初始化离子... 完成了!!!
    IPC:初始化... !!!
    APP_LOG:映射0xac040000 ...
    APP_LOG:映射0xac040000 -> 0xffb3020000 (大小为33161216字节
    ) APP_LOG:映射0x30e00000...
    app_log:映射0x30e00000 -> 0xffb54b0000 (大小为3072字节
    ) IPC:init…… 完成了!!!
    远程服务:初始化... !!!
    远程服务:初始化... 完成了!!!
    应用程序:初始化... 完成了!!!
    0.009780 s:vx_zone_init:已启用
    0.009792 s:vx_zone_error:Enabled
    0.009797 s:vx_zone_warning:Enabled
    0.010212 s:vx_zone_init:[TIvxInit:64]初始化完成!!!
    0.010355 s:vx_zone_init:[TIvxHostInit:44]主机初始化完成!!!
    Sithara 启动
    默认参数已设置!
    解析的用户参数!
    更新了用户参数!
    更好的初始化!
    在0x0000FFFFB0711740处计算校验和1234、大小= 579328
    TIDL 初始化完成!
    预处理器更新完成!
    预处理初始化完成!
    绘制检测更新完成!
    抽取检测完成!
    Img Mosaic Init 完成了!
    显示初始化完成!
    应用程序初始化完成!
    图形初始化完成!
    标量创建完成!
    Preproc 创建完成!
    TIDL 创建完成!
    Draw detection node call
    Draw Detection set node target
    replicate
    Draw Create Done (绘制检测节点调用)!
    马赛克创建完成!
    显示创建完成!
    应用程序创建图完成!
    [C6X_1] 42.756835 s:我位于 TIvxKernelImgPrePRocCreate
    [C6X_1]内部 42.756882秒:我将超出 TIvxKernelImgPrePRocCreate
    [C6X_2] 42.791555 s:我位于 TIvxKernelDrawBoxDetectionsCreate
    [C6X_2]内部 42.791589 s:我将从 tivxKern[41.662666] EXT4-FS 错误(器件 mmcblk1p2):ext4_validate_block_bitmap:376:dl vx_app_ticom_od:BG 104:错误块位图校验和
    DrawelBoxDetectionsCreate
    [C7x_1 ] 42.732728 s:vx_zone_warning:[TIvxKernelTIDLCreate:603]在 TIDL 过程中禁用的所有中断
    应用验证图完成!
    应用程序发送 MSC 命令完成!
    应用验证图完成!
    verify_graph_done
    在
    
    这里运行帧0 0,它位于流水
    线中小于0
    
    的流水线中===================
    TIDL 演示-对象检测
    ===========================
    
    P:打印性能统计
    
    信息 x:退出
    
    Enter Choice:应用程序读取输入完成!
    应用流程图已完成!
    处理已完成
    的流水线
    APP_tidl_od:帧 ID 0,共1个... 完成。
    app_tidl_od123:1000000000的迭代0 ... 完成。
    DONES 运行帧0
    
    在这里的管线内少于
    0应用读取输入完成!
    管道比0应用程序阅读输入完成!
    应用流程图已完成!
    处理已完成
    的流水线
    APP_tidl_od:帧 ID 0,共1个... 完成。
    app_tidl_od123:1000000000的迭代1 ... 完成。
    DonesRunning 帧0
    
    在此处位于管线内
    、比0应用程序读取输入完成更好!
    应用流程图已完成!
    处理已完成
    的流水线
    APP_tidl_od:帧 ID 0,共1个... 完成。
    app_tidl_od123:1000000000的迭代2 ... 完成。
    DEONNING 帧0
    
    在此处的流水线内[C6x_1
    ] 43.010890 s:Preproc Kernel 608 344 640 608
    [C6X_1] 43.010913 s:我在用于 YUVToRGB
    的 C66内核[C6x_1 ] 43.013909 s:Preproc Kernel 608 344 640 608
    [C6X_1] 43.013936:我在 C66内核中使用 YUVToRGB
    流水线、比0应用程序读取输入完成!
    应用流程图已完成!
    处理已完成
    的流水线
    APP_tidl_od:帧 ID 0,共1个... 完成。
    app_tidl_od123:1000000000的迭代3 ... 完成。
    DonesRunning 帧0
    
    在此处位于管线内
    、比0应用程序读取输入完成更好!
    应用流程图已完成!
    处理已完成
    的流水线
    APP_tidl_od:帧 ID 0,共1个... 完成。
    app_tidl_od123:1000000000的迭代4 ... 完成。
    DEONNING 帧0
    
    在此处的流水线内[C6x_1
    ] 43.030137 s:Preproc Kernel 608 344 640 608
    [C6X_1] 43.030161 s:我是 YUVToRGB
    的 C66内核[C6X_2] 42.982890 s:读取大小为926720 463360
    的输入图像指针[C6x_2 ] 42.983022 s:读取大小为926720 463360
    的输出图像指针[C6X_2] 42.986084 s:memcpy 完成
    的流水线比0应用程序读取输入完成!
    应用流程图已完成!
    处理已完成
    的流水线
    APP_tidl_od:帧 ID 0,共1个... 完成。
    app_tidl_od123:1000000000的迭代5 ... 完成。
    YURunning frame 0
    
    0 in here inside 流水线
    [129.188377] NET:registered protocol family 15
    [129.230683] Initializing XFRM netlink socket
    [C6X_1] 262.265837 s:Preproc Kernel 608 344 640 608
    [C6X_1] 262.265863 s:I am in C66 kernel for VToyo2
    [C6X_2] 26583 s: 以926720 463360大小读取输入图像指针
    [C6X_2] 262.218714 s:以926720 463360大小读取输出图像指针
    [C6X_2] 262.221863 s:memcpy 完成
    的流水线大于0App 读取完成输入!
    应用流程图已完成!
    处理已完成
    的流水线
    APP_tidl_od:帧 ID 0,共1个... 完成。
    app_tidl_od123:1000000000的迭代6 ... 完成。
    在
    
    这里、处于管线内的印度尼西亚运行帧0
    

    请做必要的事。

    此致、

    Vyom Mishra

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

    您好、Vyom、

    验证图的问题似乎已经解决。  还有其他问题吗?

     在运行用例之前、应查看 TIvxAddTargetKernelDrawBoxDetections 内的打印内容。  当您运行"vision_apps_init.sh"脚本时、您应该会看到它。  如果未命中、该应用程序将无法正常工作、因此我猜测这可能是上面的命中。

    此致、

    卢卡斯