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/AM3356:[T=0x19f81955] xdc.runtime.Main:错误:"src/tirtos/SemaphoreP_tirtos.c"、第212行:断言失败

Guru**** 2540720 points
Other Parts Discussed in Thread: DP83822IF, SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/837536/ccs-am3356-t-0x19f81955-xdc-runtime-main-error-src-tirtos-semaphorep_tirtos-c-line-212-assertion-failure

器件型号:AM3356
Thread 中讨论的其他器件:DP83822IFSYSBIOS

工具/软件:Code Composer Studio

您好!

我正在开发一个软件、以验证我们开发的硬件。 到目前为止、我的软件工作正常。 现在、我必须将 HSR 示例应用集成到我的代码中、以显示 PRU 在使用光纤 PHY (DP83822IF)时工作正常。 为此、我安装了"PRU-ICSS-HSR-PRP-DAN_01.00.04.02"软件包并将项目"HSR_APP_AM335x_ARM"导入到 CCS 中、我将代码从示例项目复制到我自己的项目中。 此时、我复制了所有内容、并且我正在尝试运行代码、但遇到以下错误:

    [T=0x19f81955] xdc.runtime.Main:错误:"src/tirtos/SemaphoreP_tirtos.c"、第212行:断言失败
    [T=0x1a180576] ti.sysbios.KNL.Semaphore:错误:第214行:断言失败:a_badContext:调用上下文错误。 必须从任务调用。

当我将其跟踪回导致此情况的代码时、我最终使用函数"Mailbox_pend"在邮箱上等待的任务之一。 这个邮箱被使用"GPIO_setCallback"从一个连接到 GPIO 引脚的函数中发布、作为回调函数。

    "src/tirtos/SemaphoreP_tirtos.c"、第212行是函数"SemaphoreP_pend"中的"SEBL_assert ((handle = NULL));"
    TI.SYSBIOS.KNL.Semaphore:错误:在函数"semaphore_pend"中、第214行是"assert_isTrue ((BIOS_getThreadType ()= BIOS_ThreadType_Task)、semaphore_a_badContext);"。

当我在没有任何 HSR 功能调用的情况下运行代码时、一切都正常、信号量挂起/发布正常工作、当我触发 GPIO 引脚时、我可以看到在 Semaphore_ped 中等待的任务被激活。 在我从示例项目中启用与 HSR 协议相关的代码后、我就会得到该错误。

当我禁用代码中与 GPIO 中断相关的部分时、这意味着我不为 GPIO 设置回调函数、也不创建任务、我会遇到相同的问题、 但现在、在使用信号量从连接到 DMTIMERS 之一的函数触发的任务中。 如果我还排除了该代码、我会在作为 HSR/Timesync 初始化的一部分创建的任务中遇到错误、创建的任务列表中的任务名称是"{empty-instance-name}"。 我已经指定了我的所有任务、因此我知道这不是我的任务之一。

导致错误的任务以高优先级(13和14)运行、这可能与之相关。 但是正如我说过的、当我不启用任何与 HSR 协议相关的内容时、问题就不会发生、并且我的软件运行没有任何问题。

所以我的问题是,是否有什么东西可以解释这种行为? 在某些情况下、似乎不允许调用"mailbox_pend"或"semaphore_pend"、这些情况似乎是由我在项目中集成/启用 HSR 协议触发的。

如果您对此有任何想法、请告诉我。

此致、
  Han Hoekstra

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

    更多测试后的其他信息:

    我在自定义错误提升挂钩(xdc.runtime.Error.raiseHook)中看到的是函数'BIOS_getThreadType ()'返回'BIOS_ThreadType_Main'、因此正确 触发了' ti.sysbios.KNL.semaphore:error:line 214'中的断言。 我不知道为什么函数返回'BIOS_ThreadType_Main'、因为'BIOS_start'函数已经被调用来启动调度程序、我的调试打印也显示任务已经在运行、一个是我自己的启动任务、另一个是 HSR 启动任务。 在我自己的启动任务中、我还打印当前线程类型、并在其中正确显示"BIOS_ThreadType_Task"。

    在主函数中的'BIOS_start'调用之后、我还有一个'System_print'函数、说明 SYSBIOS 已终止、但我看不到控制台窗口中打印的文本。 因此调度程序仍应运行。

    是否有人知道为什么'BIOS_getThreadType ()'可以返回'BIOS_ThreadType_Main'?

    此致、

      韩文

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

    Han、

    >>当我禁用与 GPIO 中断相关的代码部分时,这意味着我不设置 GPIO 的回调函数,也不创建任务,我会遇到同样的问题, 但现在、在使用信号量从连接到 DMTIMERS 之一的函数触发的任务中

    您是否可以正常运行默认的 HSR/PRP 应用程序? 您使用的是哪种 DMTIMER? 您是否启用了 DMTIMER?

    您可能可以从 HSR 示例开始、并逐步添加应用程序、而不是将 HSR 示例添加到您的项目中、从而导致问题的根本原因?

    确保在项目中添加了 HSR_APP CCS 项目中定义的所有符号(CCS Build->GNU compiler->Symbols)。

    此致、

    Garrett

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

    您好、Garrett、

    >>您是否有正常运行默认 HSR/PRP 应用程序的情况?
    默认 HSR 应用程序不编译、在"uint8"、"Uint16"等未找到的内容上有很多错误。 我还无法找到声明或定义这些类型的头文件。 因此、我无法测试应用程序、我宁愿不花时间修复这些编译器问题、而是更愿意将时间放入我自己的应用程序中。
    我已将 HSR 应用程序的构建日志文件附加到此消息供您参考、您可能可以告诉我错误的地方。

    >>您使用的是哪个 DMTIMER?
    我用于应用程序的 DMTIMER2、它是3、但这与 Timesync 模块冲突、因此我将其更改为2。 即使我启用了所有与 PRU 相关的内容、我的计时器似乎也能正常工作。 我知道这是因为计时器触发时调用的函数会切换其中一个 GPIO 引脚、我可以使用逻辑分析仪看到这一点。 在我的软件因断言错误而崩溃之前、它只会被调用两次。

    >>您是否启用了 DMTIMER?
    DMTIMER 已启用、否则我将看不到计时器触发我的函数。

    >>您可能可以从 HSR 示例开始、逐步添加应用程序以找出问题的根本原因、而不是将 HSR 示例添加到您的项目中?
    将代码添加到 HSR 应用程序的选项目前实际上并不是一个选项、因为 HSR 应用程序甚至不会进行编译。 此外、HSR 应用示例中缺少一个东西、那就是"Board_init"函数调用。 电路板设置是否像引脚多路复用等。在应用程序中完全手动完成,与 SYSBIOS 中的电路板模块没有任何关系?
    在这方面我是否会有问题? 当我通过使用以下标志调用'Board_init'来执行硬件初始化时:
    BOARD_INIT_PLL | BOARD_INIT_DDR | BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_MODULE_CLOLOCK | BOARD_INIT_ETH_PHY | BOARD_INIT_ICSS_PINMUX | BOARD_INIT_ICSS_ETH_PHY;
    我已经更改了从 ICE V2板定义中获取的'Board_init'函数、以在标志'Board_init_module_clock'上执行'Board_pinmuxConfig'、而对于'Board_init_ICSS_PINMUX'则不执行任何操作。 'Board_init'由于标志'Board_init_PINMUX_config'调用的函数'Board_pinmuxConfig'将始终调用'PINMUXModuleConfig (CHIPDB_MOD_ID_CPSW、0U、1U);'和'PINMUXModuleConfig (CHIPDB_MOD_ID_CPSW、0U、1U);'和'PINMUXModuleConfig (CHIPDB_ID_NULL、ICUNULL_ID_ID_UNULL'、ICSS、PRU); 因为我需要 CPSW 和 ICSS 进行网络通信。

    >>确保您的项目中添加了 HSR_APP CCS 项目中定义的所有符号(CCS Build->GNU compiler->Symbols)。
    我已经在"CCS Build"项目下检查了整个项目配置、并确保它们尽可能匹配、因为我的配置更加复杂、因为我的应用程序具有更多的功能。
    因此、这不应是问题的原因。

    您是否有任何建议可供我尝试,无论是关于不编译的 HSR 应用程序,还是当我启用 PRU 相关代码时应用程序中的断言?

    此致、
      韩文

    e2e.ti.com/.../0474.2019_2D00_09_2D00_10-_2D00_-Build-errors-hst_5F00_app_5F00_AM335x_5F00_arm.txt

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

    Han、

    从日志中的 PDK 版本'pdk_am335x_1_0_12'中、您似乎没有使用 HSR/PRP UG 中指定的所需处理器 SDK v4.3 -  

    http://software-dl.ti.com/processor-industrial-sw/esd/docs/indsw/hsr_prp/01_00_04/PRU_ICSS_HSR_PRP_Release_Notes.html#system-requirements

    所有相关的软件包都应与 PRSDK 发行说明- http://software-dl.ti.com/processor-sdk-rtos/esd/docs/04_03_00_05/rtos/Release_Specific.html#processor-sdk-rtos-release-notes 保持一致

    在 PRSDK v5.1中将 NDK 从 PRSDK v4.3中的2.x 升级到3.x、这可能会导致您看到编译错误。

    请降级到 PRSDK v4.3、然后尝试测试 HSR/PRP 并集成到您的项目中。

    此致、
    Garrett

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

    您好!

    我一直在研究其他一些问题,因此我没有时间研究这个问题。 但今天我已经在这方面做了很多工作。

    我所做的是安装旧版本的 SDK、并将 TI HSR 示例应用设置为使用旧 SDK。 我的配置如下:
    EDMA       2.12.5
    NDK        2.26.0.08
    SYSBIOS    6.52.0.12
    AM335x PDK 1.0.10
    XDCTool    3.50.3.33_CORE

    HSR 示例应用程序现在编译时没有错误、只出现一些警告、我希望这些警告是正确的。
    我尝试在 TI ICE V2 EVM 上运行应用程序的 Release 和 Debug 构建、但两者都崩溃、并显示以下消息:
        CortxA8:未处理的 ADP_Stopped 异常0x20023

    您是否有什么想法会导致这种情况? 我已经为您附加了构建日志、这可能会让您了解问题可能是什么。

    我们宁愿不降级到较旧的 SDK、因为这对我们来说意味着很多工作、因为我们已经使用当前的硬软件进行了初步类型测试。 返回 SDK 版本意味着我们必须首先启动软件并再次运行、然后重新应用我们在 SDK 中执行的修复。 然后、我们需要再次运行大量测试、以验证所有内容是否仍然正常工作。
    此外、还存在运行到新 SDK 版本中已修复的问题的风险。
    所以,对我们来说,这是一项重大的工作。
    将 HSR/PRP 库更新为新 SDK 版本的计划是什么?

    此致、
      Han Hoekstrae2e.ti.com/.../Build-HSR-test-app.log

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

    Han、

    您是否按照 HSR/PRP 用户指南中的说明应用了补丁?

    http://software-dl.ti.com/processor-industrial-sw/esd/docs/indsw/hsr_prp/01_00_04/PRU_ICSS_HSR_PRP.html#system-requirements

    "若要编译工程、请确保 [INSTALL-DIR]/protocols/pdk_patches/04.03.00 应用了中的 PDK 补丁。 这是一个必需的步骤、因为它依赖于基线处理器 SDK。"

    我们计划对所有协议进行 SDK 版本更新、而 HSR/PRP 将是第一个要更新的协议。 升级将不会在本季度进行。

    此致、
    Garrett

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

    Han、  

    我正在关闭该线程、因为我们认为问题是由不兼容的 PDK 引起的。 如果有任何新问题、请随时打开另一个主题。

    谢谢、

    Garrett