Thread 中讨论的其他器件:DP83822IF、 SYSBIOS
工具/软件: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