您好,运行SafeTI诊断库时,程序到下面两部分语句时
1、/* Run 2Bit ECC test on TCM RAM */
retVal = SL_SelfTest_SRAM(SRAM_ECC_ERROR_FORCING_2BIT, TRUE, &failInfoTCMRAM);
INCREMENT_PASS_FAIL_COUNTER(failInfoTCMRAM, retVal);
2、/* Run RAD Self tests on TCMRAM */
retVal = SL_SelfTest_SRAM(SRAM_RADECODE_DIAGNOSTICS, TRUE, &failInfoTCMRAM);;
INCREMENT_PASS_FAIL_COUNTER(failInfoTCMRAM, retVal);
会跳转到
#pragma INTERRUPT ( _excpt_vec_abort_pref, PABT)
void _excpt_vec_abort_pref()
{
while(1);
}
然后就在这一直循环,请问是什么原因?
Ken Wang:
Hi wei,
看程序,这是一个正常的操作。因为那两个语句是系统强制性检测RAM有两个比特位的错误发生时,系统会怎么办。
我们的MCU是支持单比特位自动校正,双比特位报错的机制。因为这是RAM的检测,在ESM模块里面应该有定义这个错误产生的话,直接触发中断。
所以我们的程序才会跳到中断程序里面,这里只用while(1)的语句的意思是,我们希望用户自己定义这个中断函数。所以系统才会一直在这里循环。
谢谢
ken
wei wang13:
回复 Ken Wang:
谢谢您的回复,请问程序是怎么产生这个错误的呢,是什么原因导致的呢?我想知道运行这2种RAM检测发生错误的原因。
Ken Wang:
回复 wei wang13:
这是芯片内部自带的校验机制,即通过配置寄存器,强制产生一个2bit 错误的信号给ECC的校验模块,用来测试它的工作正不正常。
相关的配置和寄存器可以在我们的TRM手册上面找到。
谢谢,
ken
wei wang13:
回复 Ken Wang:
我是想说这是我的什么原因造成的?是RAM的操作不当,还是什么别的原因?
Ken Wang:
回复 wei wang13:
这是我们safety library针对芯片内部模拟校验RAM ECC功能的一项操作,和你对RAM的操作无关,不是你操作不当。如果你不想系统一直处于while(1)无限循环的话,你可以不让MCU自动产生有2bit出错的信号。
谢谢
ken
wei wang13:
回复 Ken Wang:
您好,又打扰您了!我可能没把问题说清楚,我知道MCU有这个校验机制,我是想知道是什么错误触发了这个机制,为什么我的程序每次跑到这个RAM ECC校验时就会出错?正常运行的话应该没有这个现象的,即使校验也是应该可以通过的,不会跳到_excpt_vec_abort_pref这个中断里。
ron chow:
回复 wei wang13:
我也遇到了,就是插入2bit错误系统会进入异常,这项检验是通不过的。