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/LAUNCHXL-F28379D:SWI 问题、上下文错误。

Guru**** 2595800 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/671463/rtos-launchxl-f28379d-swi-issue-bad-context-error

器件型号:LAUNCHXL-F28379D

工具/软件:TI-RTOS

您好!

我尝试在 RTSC 项目中添加非常简单的 Swi。 我在*。cfg 文件中添加了 IDLE 函数和 swi。 以下是我的代码:

/*
=== main.c ======
*/
#include 
#include 

#include 
#include 

#include 

#include 
#include 


void swifxn (UArg a0、UArg A1)
{
system_printf ("enter swFxn ()\n");

system_printf ("exit swFxn ()\n");

system_flush();//强制 SysMin 输出到控制台*/
}

void idleFxn()
{
Swi_post (sw0);
//Task_sleep (1000);
}

/*
=== main ====
*/
int main()
{
system_printf ("enter main()\n");

BIOS_start();/*不返回*/
返回(0);
}

下面是来自控制台的日志:

[C28xx_CPU1]输入 main()
输入 swifxn()
exit swifxn()
ti.sysbios.gates.gateMutex:第99行:断言失败:a_badContext:调用上下文错误。 有关详细信息、请参阅 GateMutex API 文档。
xdc.runtime.Error.raise:终止执行

我不知道为什么它不起作用。

感谢您的任何帮助。

BR、

Dawid。

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

    您在.cfg 中使用哪个系统提供程序? 例如

    System.SupportProxy = SysMin;

    我将假定您正在使用 SysMin。。。

    当调用 System_flush 并且 SysMin 是底层代理时、写入内部 SysMin 缓冲区的字符将被刷写到 CCS 控制台。 要执行此操作的 API 是编译器 RTS 库中的 HOSTwrite。 由于 TI-RTOS 内核使用编译器的 RTS、因此它插入了用于线程安全的锁定机制。 默认情况下、我们插入 GateMutex。 HOSTwrite 使用此锁定。 由于您从 Swi (而不是任务)调用 System_flush、因此您将获得断言。

    如果使用 SysStd、则会在 System_printf 中发生问题、因为随后调用了 HOSTwrite。

    因此、简单的答案不是从 Hwi 或 Swi 调用 System_flush、而是从 main ()或任务调用。

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

    您好!

    你是对的。 我使用了 SysMin。 当我在空闲状态下使用 FLUSH 时、它正在工作。