我尝试将 SafeTI 诊断库集成到我的应用中、但遇到了一些严重问题。
整个自检正在运行、但在 SRAM 测试运行时、我会得到未屏蔽的中断。
演示应用程序有一个 VIC 和数据中止中断示例、但我无法理解这应该如何在功能安全相关应用程序中工作。
演示应用程序中的'exception_handler.c'文件包含一个实际存在于私有 SafeTI 诊断库模块中的函数的手动原型:
布尔 SL_FLAG_GET (sint32 flag_id);//避免编译器警告*/
这似乎是避免物理上包含 SafeTI 诊断库私有头文件的一种方法、我是否正确解释了?
异常处理程序是应用程序还是 SafeTI 诊断库的一部分?
演示应用程序仅屏蔽异常、自检如何确保异常被实际引发?
似乎存在故障注入测试回调日志记录的实现、但它不会对记录的结果执行任何操作、它是应用程序的一部分、并且包含 SafeTI 诊断库的专用 API。
演示应用程序异常处理程序本身包含一个屏蔽机制来停止自检期间生成的异常的传播。 正是这种机制使用 SafeTI 诊断库中的专用接口。
/* 由于访问 L2存储器的非法事务而导致 DAbort? * 0x00000008表示它是由读取引起的外部中止、是 AXI 解码错误 * 0xFFF80000是用于创建 L2互连错误陷阱 AXI 解码错误 的受保护位置* if ((true = sl_FLAG_GET (INTERL2CONNECT_UNPRIVELEGED_ACCESS)))&&) ((0x00000008u =(0x0000008u &_SL_GET_DataFault_Status ()))&& (0xFFF7A400U =_SL_GET_DataFault_Address ())) ){ maskDAbort = true; }
以上代码片段来自演示应用。 我的应用是功能安全相关产品、我需要能够证明上述代码的正确性。 要实现整个屏蔽机制、需要详细了解用于生成错误的存储器地址和引起的异常数量等项目、但在 SafeTI 诊断库 API 或安全手册中无法找到这一点。
此外,上述代码片段使用'_sl_get_DataFault_Address',SafeTI 诊断库 API 中将其描述为'note: for future enhancions. 请勿使用这些 API。
如何在不访问 SafeTI 诊断库中的专用 API 的情况下实现屏蔽机制?
如何在没有有关 SafeTI 诊断库中诊断测试的详细信息的情况下实施屏蔽机制?
有人能不能帮助我、我不知道如何继续我的集成、因为我不知道在这里要实现什么、 我找不到 SafeTI 诊断库文档中的相关信息、似乎需要在应用中实现自检库的一个大型后端部分。