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.

[参考译文] TMS320C28346:SYSBIOS GateMux 故障

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/746245/tms320c28346-sysbios-gatemux-failure

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

获取以下错误:

 TI.SYSBIOS.Gates.GateMutex:第97行:断言失败:

a_badContext:调用上下文错误。

有关详细信息、请参阅 GateMutex API 文档。

 xdc.runtime.Error.raise:终止执行

 

中断处理程序中的中断。

 

程序以 abort()终止;

 

  1. 如何定义我自己的 abort()处理程序来调试它?
  2. 我已经看到、这个问题也是、如果在第二个 IRQ 信号到达并且最后一个处理程序还未完成后执行 Semaphore_post 调用。

BR

安德斯兰热

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

    Anders、您好!

    您是否有可能从中断中调用 gateMutex 函数(我假设它是一个 Hwi)?  不允许从 Hwi 或 Swi 上下文调用大多数 gateMutex 函数。 您可以在 CDOC API 参考(ti->SysBIOS ->门)中看到哪些门允许调用上下文:

    http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/sysbios/6_73_01_01/exports/bios_6_73_01_01/docs/cdoc/index.html

    请注意、以上内容适用于最新内核、您可以从以下链接中选择所使用的内核、并按照"API 文档"链接操作:

    http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/sysbios/

    如果发生这种情况、您可能需要一个可以从中断上下文调用的 gateHwi。

    如果不是这样、您应该能够将"系统"模块添加到您的 cfg 文件中。 这将使您能够按照 SYSBIOS 用户指南中的以下摘录进行操作:

    ABORT 函数

    默认情况下,当应用程序因错误条件而中止时,系统模块会调用其标准中止函数,该函数进而调用 ANSI C 标准中止()函数。 如果您希望应用程序无限期地旋转,以便调试应用程序的状态,请在配置中添加以下语句:system.abortFxn = System.abortSpin;配置此“spin”函数也会减小应用程序的代码大小。 应用程序不应直接调用 System_abortSpin() API。 自定义中止处理程序的原型为:typedef void (* System_AbortFxn)();

    希望这有所帮助、

    肖恩