“线程:测试”中讨论的其它部件
你好,亲爱的
作为 SRAM10测试的一部分,我正在执行从 CPU 的非法取款,这是按照 SDL 的“RAM 访问保护违规检测”示例进行的。 将内存 LS6设置为 CLA 的程序内存。 现在 ,调用此函数的 CPU 提取(已放入 LS6中)将导致 CPU 提取访问冲突。
但它将进入 illegalISR()并陷入其中,它仍在 中断中运行。最后,在地址0x3fb02a 处中断,没有可用的调试信息,或者在程序代码之外。
我的问题是:如何打破非法中断并运行正常程序。


#pragma code_section (testCPUFetchFunc,"ramls6");
testCPUFetchFunc( void);
UINT32_t 通气非主 CPU 紫外线()
{
UINT16_t 失败= 0U;
UINT16_t 超时= ISR_LOW_TIMEOUT;
//
//启用违规中断
//
MemCfg_enableViolationInterrupt (MEMCFG_NMVIIOL_CPUFETCH);
//
//内存在 CLA 和 CPU 之间共享。
//
MemCfg_setLSRAMMasterSel (MEMCFG_Sect_LS6,MEMCFG_LSRAMMASTER_CPU_CLA1);
//
//将内存设置为 CLA 的程序内存。 现在是从 CPU 中提取的内容
//将导致非主 CPU 获取违规。
//
MemCfg_setCLAMemType (MEMCFG_Sect_LS6,MEMCFG_CLA_MEEM_PROGRAM);
//
//清除访问冲突状态变量
//
illegalISRFlag =假;
小提琴 ISRFlag =假;
小提琴演奏者=0U;
违规状态= 0U;
//
//调用此函数(已被放置在 LS1中)将导致 CPU
//获取访问权限违规。
//
testCPUFetchFunc();
//
//违规将产生 ITRAP 中断和 RAM 访问
//违规中断。
//
While (((illegalISRFlag != true)||(violationISRFlag != true))&&
(超时!= 0U))
{
超时--;
}
//
//禁用中断。
//
MemCfg_disableViolationInterrupt (MMCFG_NMVO_L_CPUFETCH);
//
//检查中断是否按预期发生,或者循环是否超时。
//
IF (超时=0U)
{
FAIL++;
}
//
//检查违规地址是否为 testCPUFetchFunc()。
//
IF (小提琴问题!=(UINT32_t)&testCPUFetchFunc)
{
FAIL++;
}
//
//确认检测到预期违规类型。
//
IF ((违反状态和 MEMCFG_NMVO_L_CPUFETCH)== 0U)
{
FAIL++;
}
返回(失败);
}
无效 testCPUFetchFunc(无效)
{
NOP;
}
中断无效的非法 ISR(无效)
{
illegalISRFlag =真;
//
//需要删除 LS6RAM 的保护以允许我们返回。
//
MemCfg_setProtection (MEMCFG_Section_LS6,MEMCFG_PROT_ALLOWCPUFETCH);
MemCfg_setCLAMemType (MEMCFG_Sect_LS6,MEMCFG_CLA_MEEM_DATA);
}



