工具/软件:
您好:
自从上一个问题关闭后、我会在新主题中重新打开此问题、我相信我在解决最初遇到的问题方面已经取得了进展。 现在、我想确认我的逻辑和实现是否有效、以及观察到的行为是否可能导致安全诊断库 (SDL) 中的问题。
调用测试功能之前、模式会更改为用户。
portSWITCH_TO_USER_MODE(); status = SL_SelfTest_PSCON(PSCON_PMA_TEST, TRUE, &failInfoPSCON);
我更改了 SL_SelfTest_PSCON 函数、以便在测试此行之前将 ARM 模式从用户更改为特权、因为只能在特权模式下写入该寄存器。 这解决了我的程序 在没有进展的情况下持续执行测试的问题。
/* Revert to normal operation */ sl_pmmREG->PRCKEYREG = PMM_PRCKEYREG_MKEY_LKSTEP_MODE;
我对 SDL 中的异常处理有其他疑问。 在 safety_library\common\source\exception_handers.c 中、我将 0xFFFF00A0 更改为 0xFFFF00AC、因此 maskDabort 将设置为 true。
* DAbort due to access to PMM global control register (sl_pmmREG->GLOBALCTRL1) access in user mode?
* 0x00000009 indicates that it is an external abort caused by read and is AXI decode error
* 0xFD000000 is the reserved location accessed to create the L2 interconnect error trap AXI decode error
*/
if ((TRUE == SL_FLAG_GET(PSCON_PMA_TEST)) &&
((0x00000800u == (0x0000800u & _SL_Get_DataFault_Status())) &&
(0xFFFF00A0 == _SL_Get_DataFault_Address()))){
maskDAbort = TRUE;
}
这也是一个错误、因为此处的异常处理程序会检查 GLOBALCTRL1 寄存器上是否发生特权模式访问违例、但在测试函数中、我们将使用地址 0xFFFF00AC 写入 PRCKEYREG。
此致、
Ilija.


