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.
您好:
我 正在执行 CPU 获取保护。testCPUFUetchFunc()函数位于 第0页的 ramls6中。 ramls6 设置为 CPU 粪便保护。 但它卡在 非法 ISR 中,不会返回到正常程序。
下面是逐步运行的。
您能检查出问题的地方吗?
谢谢
#pragma code_section (testCPUFetchFunc,"ramls6");
testCPUFetchFunc( void);
UINT32_t generateMasterCPUFetchViolation()
{
UINT16_t 失败= 0U;
UINT16_t 超时= ISR_LOW_TIMEOUT;
//
//启用违规中断
//
MemCfg_enableViolationInterrupt (MEMCFG_MVIOL_CPUFETCH);
//
//设置获取保护,在中生成主 CPU 获取违规
// CPU 提取的大小写。
//
MemCfg_setProtection (MEMCFG_Section_LS6,MEMCFG_PROT_BLOCKCPUFETCH);
//
//清除访问冲突状态变量
//
illegalISRFlag =假;
小提琴 ISRFlag =假;
小提琴演奏者=0U;
违规状态= 0U;
//
//调用此函数(已放置在 LS6中)将导致 CPU
//获取访问权限违规。
//
testCPUFetchFunc();
//
//违规将产生 ITRAP 中断和 RAM 访问
//违规中断。
//
While (((illegalISRFlag != true)||(violationISRFlag != true))&&
(超时!= 0U))
{
超时--;
}
//
//禁用中断。
//
MemCfg_disableViolationInterrupt (MMCFG_MVIOL_CPUFETCH);
//
//检查中断是否按预期发生,或者循环是否超时。
//
IF (超时=0U)
{
FAIL++;
}
返回(失败);
}
无效 testCPUFetchFunc(无效)
{
NOP;
}
中断无效的非法 ISR(无效)
{
illegalISRFlag =真;
//
//需要删除 LS1RAM 的保护以允许我们返回。
//
MemCfg_setProtection (MEMCFG_Section_LS6,MEMCFG_PROT_ALLOWCPUFETCH);
MemCfg_setCLAMemType (MEMCFG_Sect_LS6,MEMCFG_CLA_MEEM_DATA);
}
您好,
被困在非法 ISR 中意味着什么? 它是否不是来自 ISR,还是 非法 ISR 多次触发?
一旦触发了非法 ISR,您是否尝试过一次代码的逐步操作?
将尝试重现您所看到的问题并随时发布。
此致
西达尔斯
感谢你的帮助
它总是在 非法的 ISR 中运行,而不是从 ISR 中产生。
当尝试执行单步操作时,请 在地址“0x3616f3”处断开,但没有可用的调试信息,或者在程序代码之外。
感谢您的回应,
将尝试重现您所看到的问题并随时发布。
此致
西达尔斯
您好,
我可以运行该代码,而不会遇到任何此类问题。 我确实收到 了非法 ISR 中断,但从 ISR 返回后它返回到正常代码。
您能否检查是否有其他代码分配给“RAMLS6”?
在我的案例中, testCPUFetchFunc 是 RAMLS6中唯一的代码。
附注:我在 F28388D 上试用了它,因为我没有 F280049C 板可用。
此致
西达尔斯
根据您的建议,我只将 testCPUFetchFunc() 分配给“RAMLS6”,RAM 部分如下所示,它使用[B000,b002]
但当 ITRAP0出现时,所有 ramlsLS6 (包括 ramlsLS5 )都将更改为 ITRAP0。
运行单步时,它在地址“0xb004”处断开,没有可用的调试信息,或在程序代码之外。
为什么
您好,
这是我的拆分窗口的快照,请勿在代码中看到返回指令(RETUR)。
您能否分享您的 CCS 项目,以便我了解一下?
此致
西达尔斯