您好、TI 专家!
我最近正在开发 SDL (软件诊断库)版本。 1.0.0在我们的系统上,在 ESM 的开发过程中我有一些问题显示在下面。
我在 MCU1_0 Autosar OS 上部署了 SDL 提供的 ESM 示例(MCU&Wake-up 域)、发现 VTM 事件没有通过调试器进行观察来立即触发 ESM 中断。

换言之,useCaseTrigger()在不中断的情况下从索引 i=0执行到 i=2,然后触发 ESM 中断,调用回调函数。(然而,现在的全局变量 currTestCase 为3 ,这将影响回调函数的性能,然后测试用例失败)。
从我的角度来看,它应该是这样的:useCaseTrigger (0)-> ESM 中断和回调函数-> currTestCase++-> useCaseTrigger (1) -> ESM 中断和回调函数-> currTestCase++->……
如果我独立运行测试用例、它们都能正常工作(currTestCase 是正确的)。 所以, 在 useCaseTrigger()中的 VTM 触发函数 vtmTriggerTh1()有可能没有立即报告该事件吗? 设置新的温度阈值需要时间、因此 ESM 中断一次不启动?
2. 提供 SDL ESM API SDL_ESM_interruptHandler()来处理 ESM 事件,它会不断读取中断源直到 ESM 寄存器中没有事件(脉冲和电平):
/* Check on the highest priority event and handle it */
do {
(void)SDL_ESM_getGroupIntrStatus((uint32_t)esmInstBaseAddr,
(uint32_t)esmIntrPriorityLvlType,
&localEsmGroupIntrStatus);
intSrc1 = localEsmGroupIntrStatus.highestPendPlsIntNum;
SDL_ESM_processInterruptSource((uint32_t)esmInstBaseAddr, esmIntType, intSrc1);
intSrc2 = localEsmGroupIntrStatus.highestPendLvlIntNum;
SDL_ESM_processInterruptSource((uint32_t)esmInstBaseAddr, esmIntType, intSrc2);
} while ((intSrc1 != (uint32_t)(NO_EVENT_VALUE)) || (intSrc2 != (uint32_t)(NO_EVENT_VALUE)));
ESM 事件列表中有很多错误无法恢复、因此、在这些情况下、我们无法执行任何操作来处理中断源和退出中断、但可以复位系统。 无论如何、我们仍然需要将这些错误事件记录到非易失性存储器中。
SDL 是否提供任何 API 或解决方案、在 ESM 中断处理程序内启用 NVM 中的事件记录、以便我们在断电复位后仍然可以读回它们?
非常感谢您的耐心。