主题中讨论的其他器件: SEGGER
大家好
我将在具有 TM4C1290NCPDT 的定制板上使用 TI SMBus 实现。 我们之所以选择该器件、是因为它具有大量的 I2C 控制器。 该代码运行 FreeRTOS 系统、每个 I2C 控制器都有自己的 FreeRTOS 任务。
我使用的是中断驱动型 I2C 控制器、具有如下所示的 ISR
//针对 I2C void SMBusMasterIntHandler1 (void) 的 SMBus 特定处理程序{ BaseType_t xHigherPriorityTaskWoken = pdfFALSE; // 处理中断。 // eStatus1 = SMBusMasterIntProcess (&g_sMaster1); //处理返回函数 portYIELD_FER_ISR (xHigherPriorityTaskWoken)中的错误; }
并为每个中断处理程序提供一个副本。
对 SMBusMasterIntProcess 的调用、这是 TI 库中的一个函数、我认为这可能不是正确的方法。 它处理 SMBus/I2C 状态机,是一段长代码(数百行)。 ‘代码有时会在中断处理程序中崩溃,我想知道/担心中断处理程序是否“太长”。 我的印象是、中断处理程序应该尽可能的短、这似乎违反了这个 maxim。 不幸的是,当代码进入这种状态(不是崩溃,而是陷入困境)时,调试器就没有用处(我使用 SEGGER JLINK,有时似乎对 FreeRTOS 感到非常困惑,即使我使用的是 FreeRTOS 插件。)
那么、我的问题是、我的中断处理程序是否存在明显的错误? 我应该在这里做其他事情吗? 有智慧的话吗?
感谢您的任何指导
Peter