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.

[参考译文] TDA4VE-Q1:SDK 之间对象描述符 API 的差异:8.0和9.2

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1493393/tda4ve-q1-differences-in-object-descriptor-apis-between-sdk-8-0-and-9-2

器件型号:TDA4VE-Q1

工具/软件:

您好、ti team、

在 SDK 8.4 (和8.0)上、我们有一个使用场景、其中在应用程序 A 上使用 tiovx、并将上下文的 obj_desc_cmd ->base.obj_desc_id 和节点信息发送到应用程序 B。根据此信息、当应用程序 A 遇到异常时、应用程序 B 可以通过 tivxjobj_desc_cmd_t 获取相应的 ipc_desc_prelease 信息、然后将 ipc 资源发送到 tiovxdesc_desc_desc_prelease、并通过 ipc 节点发送到应用程序 B 以使应用程序 B、从而使其通过 Objobj_release_re置 位。
经过一系列修改(主要将诸如 tivxObjDescGet 的接口更改为 ownObjDescGet (obj_desc_i)、前缀为"own")后、此使用场景在 SDK 9.2环境中使用、但它变得无效。 当前、它定位为通过 ownObjDescGet (obj_desc_I)获取的 tivx_obj_desc_cmd_t 结构不正确、最直接的指示是 base.type 不再是 TIVx_OBJ_DESC_CMD。
我想问以下问题:
1.这个使用场景是否可以适应 SDK 9.2环境? 我需要如何修改它?
2.如果此场景不适合适应 SDK9.2环境、是否有任何解决方案使应用程序 B 能够在应用程序 A 异常崩溃后执行 tiovx 资源发布操作?

此致、

xftu

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

    您好、xftu:

    我没有看到任何实现更改、只看到如您提到的从8.4到9.2版本所示的函数名称发生了更改。  obj_desc_cmd 由 nodeSendCommand API 使用,如果该 API  在任何地方被这个 API ownObjDescFree ()释放,如果你从应用程序中获得 obj_desc_id 在异常之前和异常之后的检查,并确保异常不会释放 obj_desc。

     您从  ownObjDescGet (obj_desc_I)获得的结构中存在的类型是什么、它是无效的还是存在某些类型?  

    同时检查其他类型的对象是否 为 ownObjDescGet (obj_desc_i)提供相同的对象类型。

    此致、
    Gokul

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

    尊敬的 Gokul S:

    感谢您的答复。

    我直接使用 killall 命令模拟了应用程序 A 中的异常。 应用程序具有处理 kill 的信号、但没有执行诸如 ownObjDescFree()之类的操作。 我只是打印了一些日志并退出(0)。
    使用 ownObjDescGet 获取类型为 tivx_obj_desc_cmd_t 的对象、获得的类型为7061;获取不同类型的对象、如 tivx_obj_desc_node_t、获得的类型也为7061。 获得的类型值对于不同的上电周期是相同的。

    此致、

    xftu

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

    您好、xftu:

    感谢您分享信息、我将从我的结尾重新创建此内容、并在本周结束时回复您

    此致、
    Gokul

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

    您好、xftu:

    我已经测试了它从我的侧,我可以使用 ownObjDescGet () API 从其他进程获取 obj_desc 即使在杀死其他进程后,也验证了类型(在两种情况下它是相同的)

    同时、您是否修改了 tiovx 框架中的任何内容?

    7061与任何 tivx_obj_desc_type_e 枚举都不匹配。

    您可以通过打印应用程序中分配的 obj_desc 来检查它、然后在其他过程中获得相同的 obj_desc 吗?

    此致、
    Gokul

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

    尊敬的 Gokul S:

    我更新了 tiovx 框架的一些代码、但只添加或更新了一些日志打印。

    我在 ownObjDescAlloc 上打印了所有分配的 obj_desc、下面4个是我使用的 obj_desc 的 ID。

    我打印了 obj_desc、实际上我的结果与您复制的结果不同。

    此外、我还要说明一下我在这里操作的关键步骤。 您能帮助我检查是否存在任何不当操作吗?

    我在将 obj_desc 发送到应用程序 a 之前打印了该信息、如下所示:

    然后我杀死应用 A、当应用 B 检测到应用 A 不在进程空间中时、它将执行以下 tiovx 操作:

    然后我在应用 B 中打印了 obj_desc 的信息、如下所示:

    此致、

    xftu

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

    您好、xftu:

    您在应用 B 中调用 tivxInit()、只需确认应用 B 是普通或 openvx 应用程序、如果它是 openvx 应用程序、则可以在开始时调用 AppInit()、然后无需再次调用 tivxInit()。

    可以尝试调用 AppInit()而不是调用、

    此致、
    Gokul

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

    尊敬的 Gokul S:

    应用 B 是 J721S2的 Linux 应用。 Vision 应用程序似乎没有实现 AppInit 接口。 是否希望我使用 Vision 应用程序界面? 我有一个误解吗? 如果是、请告诉我它是哪个库的接口。

    此致、

    xftu

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

    您好、xftu:

    我需要了解、您何时调用 API  

    是在进程 A 停止之后还是在应用程序 B 启动过程中?

    Vision 应用程序似乎没有实现 AppInit 接口。 是否希望我使用 Vision 应用程序界面? 我有一个误解吗? 如果是、请告诉我它是哪个库的界面

    我说的是 AppInit()

    该代码在每个 openvx 应用程序开始时调用、如果您在 SDK 中看到任何演示应用程序、则会从该 API 开始。 它在 vision_apps/utils/app_init/app_init.c 中进行了定义 src

    此致、
    Gokul

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

    尊敬的 Gokul S:

    这些 API 是在进程 A 被终止后调用的。

    在当前调用之上添加 tivxHostInit 接口调用将具有与调用 AppInit 相同的效果。 我稍后再试。

    此致、

    xftu

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

    尊敬的 Gokul S:

    我试图将 tivxHostInit 调用添加到上一个调用中、但它没有解决问题。

    此致、

    xftu

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

    您好、xftu:

    可以注释掉 appIpcRegisterNotifyHandler()并检查、该 API 在 tivxInit()内调用、它会注册 framework 使用的 objdescipchadler。

    我怎么能从我这边重现这个? 当我尝试终止进程 A (Ctrl +c ),然后打开进程 B 并打印进程 A 分配的对象描述符并验证其类型时,它与打印的进程 A 相匹配。

    您是否也可以在开始或停止应用程序 A 之前在应用程序 B 中尝试此 AppInit()调用

    此致、
    Gokul

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

    尊敬的 Gokul S:

    我该如何从我这边重现这个? 当我尝试终止进程 A (Ctrl +c ),然后打开进程 B 并打印进程 A 分配的对象描述符并验证其类型时,它与打印的进程 A 相匹配。[/报价]

    我将介绍应用场景的要点、并了解是否可以相应地重现此问题。  
    1. App A 和 App B 都是在后台运行的 Linux 应用程序;
    2.首先启动应用程序 B、然后通过 fork 和 execlp 上拉应用程序 A。 目前、应用 B 尚未初始化任何 tiovx 资源;
    3、App A 是 tiovx 的应用程序。 在 tiovx 的正常初始化后、应用 A 生成的对象描述符可与应用 B 同步;
    4.确保应用程序 B 接收对象描述符,然后使用 killall 命令终止应用程序 A;
    5.确认应用 A 已被终止后、应用 B 调用以下 tiovx 接口、 然后检查对象描述符是否有效。

    我将按照您的建议同时解决问题。

    此致、

    xftu

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

    尊敬的 Gokul S:

    您能否注释掉 appIpcRegisterNotifyHandler()并检查、该 API 调用于 tivxInit ()内部、它会注册由框架使用的 objdescipchadler。

    根据上述建议、将按如下方式更改这4个对象描述符的信息打印:

    您是否还可以在应用程序 B 开始或停止应用程序 A 之前尝试此 AppInit()调用。

    然后,根据第一条建议,根据第二条建议进行修改,印刷内容将按如下方式进行修改:

    所有类型都不正确。

    此致、

    xftu

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

    您好、xftu:

    您能否分享测试设置和代码、以便从我们这边重现这个问题。

    我将介绍应用场景的要点、并了解您是否可以相应地重现此情形。  [/报价]

    这将是一个很耗时的过程、并且可能需要一些时间来重新创建这个精确的方案、因此、如果可能、您可以创建一些测试代码以便我进行测试。

    此致、
    Gokul

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

    尊敬的 Gokul S:

    整个工程涉及大量代码、我将尝试提取这一部分并编写一个新的演示、这需要一些时间。 我将与大家分享所取得的任何进展。

    此致、

    xftu

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

    您好、xftu:

    谢谢、我会等待演示代码从我这边进行测试。

    此致、
    Gokul

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

    尊敬的 Gokul S:

    我们发现应用程序的内存映射出现错误、问题已解决。 感谢您的支持。

    此致、

    xftu

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

    感谢您的确认、即将结束该主题

    此致、
    Gokul