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 中产生。
当尝试执行单步操作时,请 在地址“0x3616f3”处断开,但没有可用的调试信息,或者在程序代码之外。
感谢您的回应,
将尝试重现您所看到的问题并随时发布。
此致
西达尔斯
您好,
我可以运行该代码,而不会遇到任何此类问题。 我确实收到 了非法 ISR 中断,但从 ISR 返回后它返回到正常代码。
您能否检查是否有其他代码分配给“RAMLS6”?
在我的案例中, testCPUFetchFunc 是 RAMLS6中唯一的代码。
附注:我在 F28388D 上试用了它,因为我没有 F280049C 板可用。
此致
西达尔斯
根据您的建议,我只将 testCPUFetchFunc() 分配给“RAMLS6”,RAM 部分如下所示,它使用[B000,b002]
但当 ITRAP0出现时,所有 ramlsLS6 (包括 ramlsLS5 )都将更改为 ITRAP0。
运行单步时,它在地址“0xb004”处断开,没有可用的调试信息,或在程序代码之外。
为什么
您好,
这是我的拆分窗口的快照,请勿在代码中看到返回指令(RETUR)。
您能否分享您的 CCS 项目,以便我了解一下?
此致
西达尔斯