Other Parts Discussed in Thread: HALCOGEN
你好。
我在使用RM44L520芯片时出现了问题,在使用TI提供的diagLib诊断库时,在sys_startup.c中调用SL_SelfTest_PBIST对所有TCMRAM进行自检时,自检完成后会覆盖所有的栈数据,因此在此函数return时,使用POP指令出栈就会进入abort异常。 请问一下,这个问题是否正常,应该怎么处理?
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.
您好,
请问一下,这个问题是否正常,
这个是正常的,PBIST 通常在器件启动时运行,因为它是一个破坏性测试,并且在测试期间被测试的 SRAM 模块的所有内容会被覆盖。 SRAM 分为多个组,您可以将数据和指令放在一个 SRAM 组中,并测试其他 SRAM 组。
当您在 MCU SRAM 上执行 PBIST 时,堆栈区域中的内容也将丢失。 这就是为什么在 HALCoGen 生成的 c_int00 ()中执行 SRAM pbist 测试的原因。
如果在启动期间对 SRAM 执行 PBIST,那么则无需将 SRAM 内容保存到其他位置,因为它不包含任何有用的数据(刚刚初始化)。 如果您对 SRAM 执行定期 pbist 测试,那么就需要在开始测试之前保存 SRAM 内容。
更多详细信息可以参阅下以下帖子:
非常感谢您的回复。
我理解了您的意思,但是我正是在c_int00 ()中执行 SRAM pbist 出现的问题。使用的是TI提供的诊断库自带的sys_startup.c文件,而不是halcogen生成的文件。
void afterSTC(void)
{
SL_CCMR4F_FailInfo failInfoCCMR4F; /* CCMR4 Self Test fail info */
volatile boolean retVal; /* For function return values */
SL_PBIST_FailInfo failInfoPBISTSRAM; /* PBIST Failure information for TCM RAM */
SL_SelfTest_Result failInfoFlash; /* Flash Self test failure information */
SL_SelfTest_Result failInfoTCMRAM; /* TCM RAM Failure information */
SL_PBIST_FailInfo failInfoPBISTOthers;/* PBIST Failure information for non-TCM memories */
SL_EFuse_Config stConfigEFuse; /* EFuse self test configuration */
......
......
retVal = SL_SelfTest_PBIST( PBIST_EXECUTE, /* Execute PBIST test */
(PBIST_RAMGROUP_06_ESRAM1 | PBIST_RAMGROUP_21_ESRAM5), /* On all TCM RAMs */
PBISTALGO_MARCH13N_RED_1PORT);
while (TRUE != SL_SelfTest_WaitCompletion_PBIST())
{
}
......
......
}
如上面的代码,在调用SL_SelfTest_PBIST时,自然产生了压栈和出栈操作,这与halcogen自动生成的代码并不一致。
所以产生如下问题:
1:TI提供的诊断库代码是否有问题?
2:为什么在debug调试时会在SL_SelfTest_PBIST函数返回时出栈故障进入abort,但在release全速运行时,又能正常进入main?
期待您的解惑。
抱歉回复晚了。
在执行 pbist 测试之前,您有没有将任何指令和数据放入 SRAM? 是abort Data abort还是prefetch abort?
CP15数据故障状态寄存器和指令故障状态寄存器中的故障状态是什么?
在 RELEASE 模式下要使用不同的优化级别。 您是否发现 pbist 自检函数中的哪条指令(反汇编)导致了中止?