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.

[参考译文] 编译器/TDA3MD:如何将"链代码"封装到库文件中

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/849755/compiler-tda3md-how-to-package-the-chain-code-into-library-files

器件型号:TDA3MD

工具/软件:TI C/C++编译器

各位专家、您好!

,、我 在     TI 开发文档和架构 规则时、在 TI processor_sdk_VISION3.07 (TDA3 HW 和 TI BIOS)的基础上创建了应用程序库 、我 的应用代码 包括以下两 个部分 。

  1.    算法 插件的 ARp32代码
  2. M4代码、用于创建"链"以 控制 工作流 或 数据流

因此、我可以构建一个 CCS 项目来将 ARp32代码打包到库中、但我 无法理解 如何  将 "链代码"打包到静态 库或动态 库中!

有人可以帮助吗? 非常感谢!

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

    我不确定术语链代码是什么意思。  但我可以告诉您如何在 CCS 中启动静态库工程。   启动项目时、展开对话框的 Tool-chain 部分。  将标题为"Output type (输出类型)"的下拉选项设置为"Static Library (静态库)"。  使用下面的屏幕截图作为指南。

    谢谢、此致、

    乔治

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

    尊敬的 乔治:

    是,我 也可以找到这个 工具 链 ,并且 作为 你 构建 一个用于  测试的库的方法。

    ,我 将其集成到 visionSDK (TDA3)中,在   M4 Makefile (~vision_sdk\build\rtos\makerules\rules_m4.mk)中添加库路由,然后重新编译 SDK。

    但是 ,程序 在        库,和测试代码中的哪个软件包中崩溃,如下所示:

    空 UART_DEBUG_KSColdinit (空)

    printf ("有 UART_DEBUG_KSColdinit!!!!\r\n");
    返回;

    另外,我 发现 如果  删除   调用, 的函数,程序 可以  正常运行。

    ,我  还检查 了系统 、 UART_DEBUG_KSColdinit 函数  被编译 并链接到系统文件、 消息 如下所示:

    1. 当 我 打开 文件(~/vision_sdk/binaries/apps/tda3xx_evm_BIOS_all/vision_sdk/bin/tda3xx-evm/vision_sdk_ipu1_0_release.xem4),我 可以 找到 函数名称;
    2. 我还可以 在  库中找到函数名称;

    谢谢

    Nick。

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

    您好 George,

    是,我 也很喜欢 这个 工具 链 ,以及  作为你 构建 一个库 进行 测试的方法。

    ,我 将其集成到 visionSDK (TDA3)中,在   M4 Makefile (~vision_sdk\build\rtos\makerules\rules_m4.mk)中添加库路由,然后重新编译 SDK。

    但是 ,程序 在        库,和测试代码中的哪个软件包中崩溃,如下所示:

    空 UART_DEBUG_KSColdinit (空)

    printf ("有 UART_DEBUG_KSColdinit!!!!\r\n");
    返回;

    另外,我 发现 如果  删除   调用, 的函数,程序 可以  正常运行。

    ,我  还检查 了系统 、 UART_DEBUG_KSColdinit 函数  被编译 并链接到系统文件、 消息 如下所示:

      1. 当 我 打开 文件(~/vision_sdk/binaries/apps/tda3xx_evm_BIOS_all/vision_sdk/bin/tda3xx-evm/vision_sdk_ipu1_0_release.xem4),我 可以 找到 函数名称;
      2. 我还可以 在  库中找到函数名称;

    谢谢

    Nick。

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

    Nick、

    首先、我们在 Vision SDK 中验证的 M4工具链版本是 ti-cgt-arm_16.9.2.LTS。 对于库构建、可以使用不同版本、但最好使用与 Vision SDK 中其余 M4组件相同的编译器版本。

    第二、您能否注释掉"printf"并重试? 可能它未正确链接到 RTS 库。 我们使用 VPS_printf()在 Vision SDK 中打印跟踪。

    此致、
    斯坦利

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

    您好、Stanley、

    是的、我尝试注释掉"printf"、但 问题仍然 存在。

    //////////

    我的测试库代码如下所示:

    空 ArcTestinit (空)

    返回;

    无符号字符 ArcTestinit_output (void)

    unsigned char tmp = 123;
    返回 tmp;

    我可以在.map 文件中找到 func

    (笑声)

    85be60b8 ArcTestinit_output
    85be60c0 ArcTestinit

    (笑声)

    ////////////////////////////

    我的链代码如下:

    #if 1.
    vps_printf ("\n ArcTestinit addr:%p\n"、&ArcTestinit);
    Task_sleep (1000);
    vps_printf ("\n 请执行 ArcTestinit \n");
    Task_sleep (1000);
    ArcTestinit();
    Task_sleep (1000);
    vps_printf ("\n UART_DEBUG_KSColdinit_ts addr:%p\n"、&ArcTestinit_output);
    Task_sleep (1000);
    vps_printf ("\n 执行 ArcTestinit_output\n");
    uint8 TMV = ArcTestinit_output();
    Task_sleep (1000);
    vps_printf ("\n chains_ArcAlgComm:%s、%s:::%d\n"、__DATE__、__TIME__、TMV);
    #endif

    我  得到 的结果如下:

    [IPU1-0] ArcTestinit addr:85be60c0
    [IPU1-0] 4.713963:
    [IPU1-0] DO ArcTestinit

    // 程序 在此崩溃

    ,我应该  配置 “RTS library”? 以及 如何配置?

    谢谢

    Nick

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

    >>所以、我可以构建一个 CCS 项目来将 Arp32代码打包到库中、但我 无法理解 如何  将 "链代码"打包到静态 库或动态 库中!

    测试库代码是为 ARP32还是 M4构建的?

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

    您好 Stanley ,

    是,     VISION  SDK 中链路和链路预编译所需的 M4内核(IPU_0)的测试库代码构建, 例如:(~\processor_sdk_vision_03_07_00_00\vision_sdk\apps\src\rtos\usecases\VIP_single_subsubfram_copy\chain_viplea Subcamerc.c)

    我需要将部分 用户 代码封装到测试库中。

    无论如何、(processor_sdk_vision_03_07_00_00\vision_sdk\build\rtos\makerules\rules_m4.mk)这些生成器对我来说太复杂了。

    我认为 M4内核可以 访问 函数、但 无法   根据   UART 打印日志成功执行。 我  不知道   Core 为什么也会崩溃  。

    谢谢

    Nick

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

    Nick、

    您是否可以在 AlgorithmLink 插件函数中添加要作为 VSDK 一部分构建的函数、而不是构建库?

    让我们首先确保函数正常工作、然后再将其构建为库。

    此致、
    斯坦利

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

    有更新吗?

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

    您好 Stanley ,

    我 认为  我的测试 代码   非常简单 、我 认为它在 我的经验中可能工作正常。  

      换言之、  将"链代码"打包到库文件是不可能实现  的、并且我在 VSDK 或开发指南中找不到任何示例代码。

    我的测试库代码如下所示:

    空 ArcTestinit (空)

    返回;

    无符号字符 ArcTestinit_output (void)

    unsigned char tmp = 123;
    返回 tmp;

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

    感谢您的关注。

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

    您可以参考随附的在 Vision SDK 中构建库的示例。

    将其解压缩到~/vision_sdk/文件夹、您可以使用 gmake 将其构建为库。

    e2e.ti.com/.../algorithms.7z

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

    此外、该库正被~\vision_sdk\apps\src\rtos\alg_plugins\edgedetection 下的算法插件使用、并且使用案例~\vision_sdk\apps\src\rtos\usecases\vIP_single_cam_edge_detection。

    您可以按照此示例使用 makefile 并将源代码替换为您的代码。

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

    如果您有任何疑问、请告知我们。 谢谢。

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

    您好 Stanley ,

     起初,感谢  您 的帮助。 但 算法 演示生成 失败、当我执行 gmake 时、我没有得到以下内容:

    我 听说  将  代码打包 到库中会与 VISION SDK 框架发生冲突、这可能是因为库中的库包含    不同  客户的相同代码模块。 因此、不建议使用该方法。

    在 TDA4 OpenVX 框架中  、不会出现该问题。

    谢谢

    Nick

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

    您好、Nick、

    请按照以下步骤进行构建。

    -转至~/vision_sdk/build 目录

    -使用"gmake -s -j algorithmslib "在"Algorithms"文件夹下构建算法库

    -使用"gmake -s -j"构建其余链接和应用程序代码。

    我不清楚您关于将代码封装到库中的陈述。

    按照链代码、您是指创建链的用例源代码吗?

    在这种情况下、它是应用程序代码、只从链接框架调用 API。

    链接框架及其组件/模块内置于单独的库中。

    算法和算法插件代码构建在另一个库中。

    此致、
    斯坦利

    此致、
    斯坦利

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

    您好 Stanley ,

    我想我得到了正确的答案、感谢  您 的帮助。