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.

[参考译文] RTOS/AM3357:如何避免 HwiProxy

Guru**** 2585275 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/607364/rtos-am3357-how-to-avoid-hwiproxy

器件型号:AM3357
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

尊敬的支持者:

我们正在开发的固件应用不需要从 AM335x 目标移植到其他支持 SYS/BIOS 的控制器。 因此、我 已经 我的应用中的特定实现 ti/sysBIOS/系列/arm/A8取代了 ti/sysBIOS/hal/Hwi 模块。

但是、TI RTOS 库(我们目前使用6.42.3.35)使用通用 Hwi 接口。 因此、所有关键段都使用 ti_SYSBIOS_hal_Hwi_HwiProxy_disable___E ()及其对应的恢复/启用函数、而不是较短的函数  ti_SYSBIOS_family_ARM_A8_intcps_Hwi_disable 等、尤其是在调度和任务间通信模块(tsk.csemaphore.c 等)等重要部分。 在性能分析中 ,我看到大约4.7%的 CPU 负载仅用于 HwiProxy 包装程序(加载值不包含 ..._intcps_Hwi 内核函数的加载,这又增加了7.1%!!!)。

我能否配置 SYS/BIOS 库以摆脱未使用的代理包装程序? 你建议什么?  感谢您的任何帮助...

祝你一切顺利、

贝内迪基

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Benedikt:

    SYS/BIOS hal Hwi 应该使用调用内在函数(e.g、_disable_IRQ ())的宏来覆盖对 HwiProxy_disable()的调用。  您是否在映射文件中看到 HwiProxy_disable()函数?  我尝试复制此文件、但在.map 文件中看不到 HwiProxy 函数。

    此致、

    Janet

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

    [引用 USER="Janet ]SYS/BIOS halHwi 应该使用调用内在函数(e.g、_disable_IRQ ())的宏覆盖对 HwiProxe_disable()/ restore()的调用。  您是否在映射文件中看到 HwiProxy_disable()函数?  我尝试复制此文件、但在.map 文件中看不到 HwiProxy 函数。

    Janet、您好!

    是的、我是。 在 Hwi.c 模块中定义了通用函数 ti_sysbios_hal_hwi_disable_e_E ()(它确实出现在我的映射文件中)。 它在 XDC 生成的代码中调用相应的代理函数 ti_sysbios_hal_hwi_hwiProxy_disable()。 后者会调用特定于目标的函数 ti_sysbios_family_arm_a8_intcps_Hwi_disable()、其中包括用于禁用中断的基本内联汇编器代码。

    在调试器上、我可以按照这个调用序列进行操作。 中间的 HwiProxy 函数还会保存一些寄存器、并在调用 family 函数之前创建另一个堆栈帧(请注意、我们必须在不进行优化的情况下使用 GCC)。 在这里、您可以看到在我们的构建中实际调用了什么:

    此致、

    贝内迪基

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

    尊敬的 Benedikt:

    您是否正在使用 GNU 工具链?  我可以使用 GNU 工具重现问题。  在我之前的帖子中、我使用了 TI 工具、但没有看到问题。  这看起来像是 BIOS 中的一个错误、我已经提交了一个错误报告(SYSBIOS-436:Hwi_disable()/Hwi_restore()没有内联到 GNU A8F 目标)。

    我通过修改文件 ti/sysbios/hal/hwi__epilogbeste.h 来解决这个问题、方法是更改以下行:

    #if ((defined (XDC_TARGET_IsaCompatibile_v7A9)))||\
        (已定义(XDC_TARGET_IsaCompatibile_v7A8))


    更改为

    #if ((defined (XDC_TARGET_IsaCompatibile_v7A9)))||\
        (已定义(XDC_TARGET_IsaCompatibile_v7A8))||\
        (已定义(XDC_TARGET_IsaCompatibile_v7A))

    然后、我想我不是修改 BIOS 代码、而是添加

    BIOS.customCCOpts ="-Dxdc_target__isaCompatibil_v7A8=1";

    我的.cfg 文件中、但我遇到了构建错误、因此很遗憾、这不是一个解决方法。

    此致、

    Janet

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

    Janet、您好!

    [引用 user="Janet"]我可以使用 GNU 工具重现问题。  在我之前的帖子中、我使用了 TI 工具、但没有看到问题。  这看起来像是 BIOS 中的一个错误、我已经提交了一个错误报告(SYSBIOS-436:Hwi_disable ()/Hwi_restore ()没有内联到 GNU A8F 目标)。

    感谢您使用 GNU 工具链进行测试。 我们的项目正处于关键阶段,因此我认为这是一个紧迫的问题。

    Janet 说:
    我通过修改文件 ti/sysBIOS/hal/hwi__收尾 程序.h、更改了行[...]

    来解决问题。

    目前、我只有 Sys/BIOS 库和头文件、代码位于 TI 安装目录中、但我找不到针对 Sys/BIOS 库源的任何 CCS/Eclipse 构建项目/配置。 您可以向我发送 BIOS 库构建配置(或指出在哪里找到它)吗?

    此致、

    贝内迪基

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

    尊敬的 Benedikt:

    SYS/BIOS 安装附带源代码和用于重建的 BIOS.mak。  如果您没有这些文件、您可能可以在此处进行安装:

    要重建、您需要编辑安装顶部的 BIOS.mak 文件、以设置 XDC_INSTALL_DIR GNU.targets.arm.A8F。  例如,对于我的 Windows 安装,我将这些设置为:

    XDC_INSTALL_DIR ?= c:/ti/xdctools_3_30_06_67_core
    GNU.targets.arm.A8F ?=C:/ti/ccsv6.1.0.00104/ccsv6/tools/compiler/gcc-arm-none-eabi-4_8-2014q3

    然后您可以运行 gmake -f BIOS.mak

    此致、

    Janet

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

    感谢您提供相关信息。 我将尝试使用 BIOS 库的自构建版本。 不过、我对您提到的错误报告(SYSBIOS-436)的结果感兴趣。 请告诉我。 提前感谢。

    此致、

    贝内迪基