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.
您好、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 中的事件记录、以便我们在断电复位后仍然可以读回它们?
非常感谢您的耐心。
您好!
您能否提供有关您的构建设置的更多详细信息? 您是否正在使用作为最新 SDK 版本一部分提供的 SDL、或者 SDL 是否正在从某处下载并与某个应用程序集成?
SDL 是否提供任何 API 或解决方案来在 ESM 中断处理程序内的 NVM 中启用事件记录、以便我们在断电复位后仍能读回这些 API 或解决方案?
不可以、SDL 没有将 ESM 错误事件记录在非易失性存储器中的 API。 您可以根据 ESM 回调或处理程序(如果需要)手动记录它们。
谢谢。
约西塔
尊敬的 Josietaa:
感谢您的答复。
我下载了 SDK 8.05、并在 SDK 8.05中找到了 SDL。 然后、我将 SDL 集成到我们的系统中、在 MCU1_0上运行自动加载程序操作系统。
我尝试运行 SDL 版本中提供的 ESM 示例。 1.0.0并可了解提供的测试用例。 我运行 VTM 测试用例(用例 UC-1、UC-2、UC-3)。
但是我发现从 useCaseTrigger()到 SDL_ESM_applicationcallbackFunction()有一些延迟,这些延迟表明注册的 ESM 中断在每个用例被触发后都不会发出信号。 但 ESM 中断和回调函数可以在所有 useCaseTrigger()最终运行后触发。
/* Trigger each use Case */ for (i = 0; i < USE_CASES; i++) { retValue = useCaseTrigger(i); if (retValue != 0) { UART_printf("\nERR: Use Case Trigger for use Case %d failed \n", retValue); break; }
TI 是否实际测试了 SDL ESM 示例? 它是否遵循预期的顺序?
useCaseTrigger (0)-> ESM 中断和回调函数-> currTestCase++-> useCaseTrigger (1)-> ESM 中断和回调函数-> currTestCase++->...
由于 SDL ESM 示例应在非操作系统(裸机)环境中运行,因此我不确定操作系统是否重要。
您好!
这些是我在 SDK 8.5上运行 ESM_wkup_mcu_app 时获得的日志。
e2e.ti.com/.../esm_5F00_wkup_5F00_mcu_5F00_app_5F00_logs.txt
在按照预期的顺序对每个用例进行测试时、会发生 ESM 回调。 您也会观察到这些日志吗?
谢谢。
约西塔
尊敬的 Josietaa:
当我运行每个 VTM 用例时、它的工作方式与您在上面给出的日志完全一样! 但是、似乎仍然有一些延迟。 换而言之、在运行该用例时、中断和应用程序回调函数不会立即被调用、而是等待一段时间完成以下函数。
当我以
对于(I = 0;I < use_cases;I++){
retValue = useCaseTrigger (I);
我的站点中的顺序如下所示:
useCaseTrigger (0)-> useCaseTrigger (1)-> useCaseTrigger (2)->为案例1调用的 ESM 回调函数->为案例2调用的 ESM 回调函数->为案例3调用的 ESM 回调函数->……
如果光照环境工作正常、我认为这是自动加载操作系统问题。
谢谢。
您好!
当我运行每个 VTM 用例时,它的工作方式就像你上面给出的日志一样,完美无缺!
裸机示例应用程序似乎按预期工作。
如果光伏环境工作正常,我猜是自动操作系统问题。 [/报价]我无法确认问题是否是由自动加载程序操作系统问题引起的、因为我无法重现问题。
谢谢。
约西塔
尊敬的 Josietaa:
感谢您的回复。
至于断电记录问题、由于 SDL 不提供任何解决方案、您有什么想法、我们可以在重置之前在内存中记录一些内容吗?
我从我的同事那里听说过 PSRAM 在这种情况下是否可用、我可以参考有关其使用的任何文档?
您好!
在复位模块前、您可以手动更改 ESM 回调中的代码来记录 ESM 事件。 我们目前没有任何示例代码或文档。
谢谢。
约西塔