<sa8650>Safety Monitor 之 API介绍 (第二部分)

<sa8650>Safety Monitor 之 API介绍

  • 4.由APSS安全监视器支持的接口
    • 4.1数据结构文件
      • 4.1.1 struct sm_handle
      • 4.1.2 struct safety_msg_initial_fault
      • 4.1.3 struct safety_msg_notify_fault
    • 4.2 Enumeration documentation
      • 4.2.1 safety_fault_subsystem
      • 4.2.2 safety_health_status
      • 4.2.3 msg_id
      • 4.2.4 safety_health_timer_group
      • 4.2.5 safety_fault_severity
      • 4.2.6 safety_fault_subscriber
      • 4.2.7 safety_msg_bcs_header
    • 4.3消息格式
      • 4.3.1运行状况消息
      • 4.3.2故障消息
        • 4.3.2.1初始故障消息
        • 4.3.2.2详细故障信息
    • 4.4 Function documentation
      • 4.4.1 sm_register_client ()
      • 4.4.2 sm_notify_fault()
      • 4.4.3 sm_report_health()
      • 4.4.4 sm_subscribe_faults()
      • 4.4.5 sm_add_fault_subscription_filter()
      • 4.4.6 sm_add_fault_sev_bitmask()
      • 4.4.7 sm_unregister_client()
      • 4.4.8 sm_unsubscribe_faults()
      • 4.4.9 sm_print_fault_msg()
      • 4.4.10 sm_get_soc_health_status()
      • 4.4.11 sm_send_err_fatal()
      • 4.4.12 sm_get_subsystem_health_status()
      • 4.4.13 sm_set_debug_mode()
    • 4.5 Header files
      • 4.5.1 FUSA头文件
      • 4.5.2安全监视器客户端库头文件
      • 4.5.3子系统头文件
      • 4.5.4向safety_fault_msg_type联合子系统添加故障信息结构
  • 5由SAIL安全监视器支持的接口
    • 5.1数据结构文件
    • 5.2 Enumeration documentation
      • 5.2.1 msg_id
      • 5.2.2 safety_health_timer_group
      • 5.2.3 safety_fault_severity
      • 5.2.4 safety_fault_subscriber
      • 5.2.5 safety_msg_bcs_header
    • 5.3 Message format
    • 5.4 Function documentation
      • 5.4.1 ssm_client_register ()
      • 5.4.2 ssm_notify_fault()
      • 5.4.3 ssm_health_report()
      • 5.4.4 ssm_client_dereg()
      • 5.4.5 ssm_subscribe_faults()
      • 5.4.6 ssm_unsubscribe_faults()
  • 6用户指南
    • 6.1安全监视器的命令行选项
      • 6.1.1在安全监视器中启用调试模式
      • 6.1.2在安全监控器中启用生产模式
      • 6.1.3如何将子系统标记为关键子系统
      • 6.1.4 如何添加新的子系统
      • 6.1.5如何添加新的故障订阅户
    • 6.2 测试应用程序的命令行选项
    • 6.3客户端应用程序开发
    • 6.4测试应用程序使用示例
      • 6.4.1 发送故障信息
      • 6.4.2正在发送运行状况消息
      • 6.4.3订阅错误(使用s选项)
      • 6.4.4通过测试-app命令行设置调试模式
    • 6.5 AURIX串行控制台打印
      • 6.5.1消息摘要
      • 6.5.2运行状况消息摘要
      • 6.5.3故障消息摘要
    • 6.6 Source structure
    • 6.7 AURIX source structure
  • A References
    • A.1首字母缩略词和术语

4.由APSS安全监视器支持的接口

4.1数据结构文件

4.1.1 struct sm_handle

安全手柄由安全客户端分配,并提供给安全监控客户端库。
struct sm_handle
{
int fd;
volatile unsigned registered;
safety_fault_subsystem subsys;
safety_fault_subscriber subs_id;
int chid;
sm_fault_rx_cb f_cb;
osal_thread_handle_t subs_thread;
safety_health_timer_group h_grp;
osal_queue_t queue;
uint8_t fault_subs_seq_no;
};
在这里插入图片描述

4.1.2 struct safety_msg_initial_fault

typedef struct
{
safety_msg_bcs_header hdr;
safety_msg_common_hdr_type safety_common_hdr;
safety_msg_fault_common_hdr_type fault_common_hdr;
} safety_msg_initial_fault;

safety_msg_initial_fault的成员包含了系统中所有故障的通用信息。有关这些头结构的详细信息,请参阅第4.5.1节中提到的头文件。

4.1.3 struct safety_msg_notify_fault

typedef struct
{
safety_msg_common_hdr_type safety_common_hdr;
safety_msg_fault_common_hdr_type fault_common_hdr;
safety_msg_fault_specific_hdr_type fault_specific_hdr;
safety_fault_msg_type safety_msg_fault_item;
} safety_msg_notify_fault;
safety_msg_notify_fault的前3个成员(safety_common_hdr、fault_common_hdr和fault_specific_hdr)包含了系统中所有故障的常见信息。有关这些头结构的详细信息,请参阅第4.5.1节中提到的头文件。

最后一个元素safety_fault_msg_type是系统中定义的故障的联合。

子系统fauft_info结构的声明由子系统所有者在其子系统头文件中提供。

有关将子系统故障信息结构添加到safety_fault_msg_type联合系统中的详细步骤,请参见第4.5.4节。

例如,在notint_fault中使用的safety_msg_xNOC_fault xnoc_fault示例可以在头文件中找到(参见第4.5.1节)。

4.2 Enumeration documentation

下面的部分描述了接口中的一些枚举的示例值。

4.2.1 safety_fault_subsystem

typedef enum
{
CAM,
NOC,
APSS,
VSENSE,
SMMU,
PCIE,
OCIMEM,
DDR,
APSS_XPU,
EMAC0,
EMAC1,
NSP,
TSENSE,
TCSR,
SA9000,
TZ,
SMSS,
UFS,
EVA,
GIC,
NSP_RM,
AVP5_FWP,
APSS_EDAC,
APSS_STL,
DUMMY1,
DUMMY2,
DUMMY3,
/* NOTE: Any new subsystems should be added after DUMMY3 /
PFM,
TSC0,
GFX_GPU,
SAIL_EMAC,
SAIL_CAN,
SAIL_TSC0,
SAIL_TESTCLIENT1,
SAIL_TESTCLIENT2,
/
Customer subsystems start here */
CUSTOM0,
CUSTOM1,
CUSTOM2,
CUSTOM3,
CUSTOM4,
CLIENT_SUBSYS_MAX
} safety_fault_subsystem;;

4.2.2 safety_health_status

typedef enum
{
NOT_REPORTED,
HEALTHY,
NOT_HEALTHY,
NOT_REGISTERED,
} safety_health_status;

4.2.3 msg_id

typedef enum
{
FAULT_MSG = 0x1,
HEALTH_MSG,
INITIAL_FAULT_MSG,
PASSTHROUGH_MSG,
/Used between APSS and SMSS/
SMSS_CONFIG_MSG,
BIST_RESULT_MSG,
/* For use on APSS */
REGISTER_APP_MSG,
UNREGISTER_APP_MSG,
FAULT_SUBSCRIBE,
FAULT_UNSUBSCRIBE
} msg_id ;

4.2.4 safety_health_timer_group

typedef enum
{
SM_HEALTH_TIMER_25MS,
SM_HEALTH_TIMER_50MS,
SM_HEALTH_TIMER_100MS,
SM_HEALTH_TIMER_200MS,
SM_HEALTH_TIMER_500MS,
SM_HEALTH_TIMER_1000MS,
SM_HEALTH_NO_TIMER,
SM_HEALTH_TIMER_MAX,
} safety_health_timer_group;

4.2.5 safety_fault_severity

typedef enum
{
SAFETY_WARNING,
/*

  • SAFETY_ERROR is not be used by subsystems and is
  • to be used between SAIL and VIP/MCU only

*/
SAFETY_ERROR,
SAFETY_RECOVERABLE_ERROR,
SAFETY_SOC_FATAL_ERROR,
SAFETY_SUBSYSTEM_FATAL_ERROR,
SAFETY_SUBSYSTEM_DEGRADED,
SAFETY_SUBSYSTEM_NONFATAL,
SAFETY_FAULT_SEV_MAX
} safety_fault_severity;
注意:在当前的设计中不支持SAFETY_RECOVERABLE_ERROR。

4.2.6 safety_fault_subscriber

typedef enum
{
FAULT_SUBS_0,
FAULT_SUBS_1,
FAULT_SUBS_2,
FAULT_SUBS_3,
FAULT_SUBS_4,
FAULT_SUBS_RSM,
FAULT_SUBS_QAIC,
FAULT_SUBS_TSENSE,
/* Customer subscriber applications start here */
FAULT_SUBS_CUSTOM0,
FAULT_SUBS_MAX
} safety_fault_subscriber;

4.2.7 safety_msg_bcs_header

此结构用于存储消息的报头信息。
typedef struct
{
uint8 crc;
uint8 cmd;
uint8 version;
uint8 len;
uint8 seq;
} attribute((packed)) safety_msg_bcs_header;
在这里插入图片描述

4.3消息格式

运行状况消息和故障消息的消息格式如下所述。

4.3.1运行状况消息

在这里插入图片描述
图4-1运行状况消息布局

声明:
typedef struct
{
safety_msg_bcs_header hdr;
uint8 id;
safety_msg_common_hdr_type safety_common_hdr;
uint8 aggregated_health[SAFETY_HEALTH_SIZE_BYTES];
} attribute((packed)) safety_msg_soc_aggregated_health_status;

运行状况消息由safety_msg_bcs_header和aggregated_health状态组成。aggregated_health提供了所有应用程序的运行状况状态。任何应用程序的运行状况状态都被定义为第4.2.2节中描述的枚举safety_soc_health_status。
在这里插入图片描述

4.3.2故障消息

4.3.2.1初始故障消息

在这里插入图片描述
图4-2初始故障消息信息布局

初始故障信息的描述见第4.1.1节。

4.3.2.2详细故障信息

在这里插入图片描述
图4-3详细的故障信息布局

详细的故障信息详见第4.1.3节。

4.4 Function documentation

4.4.1 sm_register_client ()

函数原型:
int sm_register_client(safety_fault_subsystem subsys,
safety_health_timer_group h_grp,
apss_client_bist_publish *r_bist,
struct sm_handle *sm_h)

参数:
在这里插入图片描述
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端ID应存在于safety_fail_system枚举中,以便能够成功调用sm_register_Client API。

4.4.2 sm_notify_fault()

向安全监测器报告故障。

函数原型:
int sm_notify_fault(struct sm_handle *sm_handle,
safety_msg_notify_fault *fmsg,
uint32_t fault_len)

参数:
在这里插入图片描述
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端应用程序应已向安全监视器注册。

4.4.3 sm_report_health()

向安全监视器报告健康状态。

函数原型:
int sm_report_health(struct sm_handle *sm_handle,
safety_health_status hstatus,
boolean faultclr_flag)
参数:
在这里插入图片描述
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端应用程序应已向安全监视器注册

注意:
已使用计时器组(Safety_health_timer_group)<FDTI(75毫秒)注册到安全监视器的客户端将收到用于健康报告的宽限窗口FDTI-Safety_heart_timer_group。
因此,FDTI内的客户应报告最新的健康状况。
而对于在(safety_health_timer_group)>FDTI注册的客户端,则会授予额外的宽限期(12.5毫秒)。因此,客户端应在safety_health_timer_group+宽限期(12.5ms)内报告运行状况更新。
当客户端未能在指定的限制内发送运行状况更新时,将在下一个周期中引发严重级别为(SAFETY_SOC_FATAL_ERROR/SAFETY_SUBSYSTEM_FATAL_ERR)的故障,具体取决于客户端的关键性。

FDTI为75 ms,是针对当前的系统设计,是一个可配置的实体。
下表列出了所有safety_health_timer_group成员的宽限期:
在这里插入图片描述

4.4.4 sm_subscribe_faults()

从安全监控器中订阅故障。

函数原型:
int sm_subscribe_faults(struct sm_handle *sm_h,
sm_fault_rx_cb f_cb,
safety_fault_subscriber subs_id,
sm_subs_msg_filter *sm_filter)

参数:
在这里插入图片描述
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
None

示例用法:
fault_sev_bitmask fault_sev = 0;
sm_subs_msg_filter sm_filter = {0};

fault_sev = sm_add_fault_sev_bitmask(SAFETY_SOC_FATAL_ERROR) |
sm_add_fault_sev_bitmask(SAFETY_SUBSYSTEM_FATAL_ERROR);

ret = sm_add_fault_subscription_filter(&sm_filter, APSS, fault_sev);
ret = sm_add_fault_subscription_filter(&sm_filter, SA9000, fault_sev);

sm_subscribe_faults(&sub_fault_handle, fault_cb, FAULT_SUBS_0, &sm_filter);

4.4.5 sm_add_fault_subscription_filter()

为子系统添加故障订阅筛选器。使用故障订阅,应用程序可以订阅来自特定子系统和特定严重程度的故障。

函数原型:
int sm_add_fault_subscription_filter(sm_subs_msg_filter *sm_filter,
safety_fault_subsystem subsys,
fault_sev_bitmask fault_sev_bitmask)

参数:
在这里插入图片描述
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
None

4.4.6 sm_add_fault_sev_bitmask()

函数原型:
fault_sev_bitmask sm_add_fault_sev_bitmask(safety_fault_severity sev)

参数:
在这里插入图片描述
返回值:
fault_sev_bitmask为输入参数safety_fallt_severity sev启用掩码的位掩码。

4.4.7 sm_unregister_client()

从安全监控器中注销应用程序的故障/运行状况报告。

函数原型:
int sm_unregister_client(struct sm_handle *sm_handle)

参数:
在这里插入图片描述

返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端应用程序应已向安全监视器注册。

4.4.8 sm_unsubscribe_faults()

取消对安全监控器的故障的订阅。

函数原型:
int sm_unsubscribe_faults(struct sm_handle *sm_handle)

参数:
在这里插入图片描述
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端应用程序应已订阅故障。

注意:此API不应从故障回调中调用。请参考testapp实现作为示例。

4.4.9 sm_print_fault_msg()

打印故障消息的内容。

函数原型:
int sm_print_fault_msg(safety_msg_publish_fault *fmsg);

参数:
在这里插入图片描述

返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

4.4.10 sm_get_soc_health_status()

从安全监控器中获取所有子系统/客户端的运行状况状态

函数原型:
int sm_get_soc_health_status(struct sm_handle *sm_h,
safety_aggregated_health *agg_health);

参数:
在这里插入图片描述
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端应用程序应该已经注册或订阅了故障。

4.4.11 sm_send_err_fatal()

本API仅适用于非安全监视器客户端,不应由安全监视器客户端使用。此API用于软件进程向安全监视器发送故障消息,以指示safety_SOC_FATAL消息,从而可以通过致命处理路径立即关闭SOC。

函数原型:
int sm_send_err_fatal(void);

参数:
没有输入参数

返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
None

4.4.12 sm_get_subsystem_health_status()

从安全监视器中获取客户端的运行状况状态。

函数原型:
int sm_get_subsystem_health_status(struct sm_handle *sm_h,
safety_fault_subsystem subsys,
safety_health_status *hstatus)

参数:
在这里插入图片描述
返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

依赖项:
客户端应用程序应已注册以进行健康报告。

4.4.13 sm_set_debug_mode()

将APSS或/和SAIL上的安全监视器置于调试模式。

函数原型:
int sm_set_debug_mode(safety_debug_type debug_state)

参数:
在这里插入图片描述

返回值:
成功后,返回EOK,否则,返回错误代码(EINVAL,EIO)

注意:
在APSS上启用调试模式时,安全状态和非安全看门狗咬的触发被禁用。
在SAIL上启用调试模式时,禁用sm_err引脚和看门狗的触发。
调试模式是互斥的,即一次只能调用一个调试模式。详见第6.4节。

4.5 Header files

4.5.1 FUSA头文件

▪位置-<构建根目录> /qnx_ap/AMSS/safety_shared/inc/fusa_msg_interface.h
▪描述-包含在第4.1节和第4.2节中所述的故障和运行状况消息的结构和枚举声明。

4.5.2安全监视器客户端库头文件

▪位置-<安全监控源根>/sm_client/public/amss/sm_client.h
▪描述-包含由客户端/子系统用于与安全监视器接口的函数原型、结构和枚举声明。

4.5.3子系统头文件

以下子系统头文件是安全共享公用文件夹的一部分:
位置-<构建根目录>/qnx_ap/AMSS/safety_shared/inc/
fusa_bist_types.h
fusa_fault_msg_apss_edac.h
fusa_fault_msg_ddrss.h
fusa_fault_msg_eva.h
fusa_fault_msg_gpu.h
fusa_fault_msg_noc.h
fusa_fault_msg_nsp_rm.h
fusa_fault_msg_smmu.h
fusa_msg_apss_def.h
fusa_msg_avp5.h
fusa_msg_camera.h
fusa_msg_camera_mcu.h
fusa_msg_camera_SA8650.h
fusa_msg_interface.h
fusa_msg_pfm.h
sa9000_safety_msgs_fusa.h

4.5.4向safety_fault_msg_type联合子系统添加故障信息结构

1.子系统创建一个新的头文件,其中包含fault_info结构的声明。
2.新的头文件应该复制到公共位置-<构建根目录>/qnx_ap/AMSS/safety_shared/inc/
3.报头文件还声明了故障源代码和故障代码的枚举。
4.此头文件包含在安全监控器fusa_msg_interface.h头文件中,子系统故障_info结构变量将被添加到safety_fault_msg_type联合中。

5由SAIL安全监视器支持的接口

5.1数据结构文件

请参见第4.1.2节和第4.1.3节。

5.2 Enumeration documentation

以下部分介绍接口中某些枚举的示例值。
关于APSS和SAIL安全监测器之间常见的列举,请参阅第5.2节。

5.2.1 msg_id

参见第4.2节。
typedef enum
{
FAULT_MSG = 0x1,
HEALTH_MSG,
INITIAL_FAULT_MSG,
PASSTHROUGH_MSG,
BIST_TYPE_MSG,
/Used between APSS and SMSS/
SAIL_CONFIG_MSG,
BIST_RESULT_MSG,
/* For use on APSS */
REGISTER_APP_MSG,
UNREGISTER_APP_MSG,
FAULT_SUBSCRIBE,
FAULT_UNSUBSCRIBE
} msg_id ;

5.2.2 safety_health_timer_group

typedef enum
{
SM_HEALTH_TIMER_25MS,
SM_HEALTH_TIMER_MAX,
} safety_health_timer_group;

5.2.3 safety_fault_severity

typedef enum
{
SAFETY_WARNING,
/*

  • SAFETY_ERROR is not be used by subsystems and is
  • to be used between SAIL and VIP/MCU only

*/
SAFETY_ERROR,
SAFETY_RECOVERABLE_ERROR,
SAFETY_SOC_FATAL_ERROR,
SAFETY_SUBSYSTEM_FATAL_ERROR,
SAFETY_SUBSYSTEM_DEGRADED,
SAFETY_SUBSYSTEM_NONFATAL,
SAFETY_FAULT_SEV_MAX
} safety_fault_severity;

注意:在当前的设计中不支持SAFETY_RECOVERABLE_ERROR。

5.2.4 safety_fault_subscriber

typedef enum
{
SAILFAULT_SUBS_0,
SAILFAULT_SUBS_1,
SAILFAULT_SUBS_2,
SAILFAULT_SUBS_3,
SAILFAULT_SUBS_4,
/* Customer subscriber applications start here */
SAILFAULT_SUBS_CUSTOM0,
SAILFAULT_SUBS_MAX
} sail_safety_fault_subscriber;

5.2.5 safety_msg_bcs_header

此结构用于存储消息的报头信息。
typedef struct
{
uint8 crc;
uint8 cmd;
uint8 version;
uint8 len;
uint8 seq;
} attribute((packed)) safety_msg_bcs_header;
在这里插入图片描述

5.3 Message format

请参见第4.3节。

5.4 Function documentation

5.4.1 ssm_client_register ()

向SAIL安全监控器登记。

函数原型:
int ssm_client_reg(safety_fault_subsystem subsys, safety_health_timer_group h_grp)

参数:
在这里插入图片描述
返回值:
成功后,返回1,否则,返回错误代码

依赖项:
客户端ID应存在于safety_falt_system枚举中,以便可以成功调用ssm_Client_register API。

5.4.2 ssm_notify_fault()

向SAIL安全监视器报告故障。
函数原型:
int ssm_notify_fault(safety_fault_subsystem subsys ,
safety_msg_notify_fault *fmsg,
uint32_t fault_len)

参数:
在这里插入图片描述
返回值:
成功后,返回1,否则,返回错误代码

依赖项:
客户端应用程序应已向安全监视器注册。

5.4.3 ssm_health_report()

向安全监视器报告健康状态。
函数原型:
int ssm_health_report(safety_fault_subsystem subsys,
safety_health_status hstatus,
boolean faultclr_flag)

参数:
在这里插入图片描述

返回值:
成功后,返回1,否则,返回错误代码

依赖项:
客户端应用程序应已向安全监视器注册。

注意:
客户端已使用计时器组(Safety_health_timer_group)注册到安全监视器。
当客户端未能在指定的限制内发送运行状况更新时,客户端的运行状况状态将更改为UNHEALTHY。
下表列出了所有safety_health_timer_group成员的宽限期:

在这里插入图片描述

5.4.4 ssm_client_dereg()

从SAIL安全监视器中注销应用程序的故障/运行状况报告。

函数原型:
int ssm_client_dereg(safety_fault_subsystem subsys);

参数:
在这里插入图片描述
返回值:
成功后,返回1,否则,返回错误代码

依赖项:
客户端应用程序应该已经注册了故障和健康监控。

5.4.5 ssm_subscribe_faults()

从安全监控器中订阅故障。

函数原型:
int ssm_subscribe_faults(subscriberCallbackFnptr pCB,
sail_safety_fault_subscriber subs_id,
sm_subs_msg_filter *sm_filter)

参数:
在这里插入图片描述
返回值:
成功后,返回1,否则,返回错误代码

依赖项:
None

5.4.6 ssm_unsubscribe_faults()

取消对安全监控器的故障的订阅。

函数原型:
int ssm_unsubscribe_faults(sail_safety_fault_subscriber subs_id)

参数:
在这里插入图片描述
返回值:
成功后,返回1,否则,返回错误代码

依赖项:
客户端应用程序应该已经订阅了错误。

6用户指南

6.1安全监视器的命令行选项

6.1.1在安全监视器中启用调试模式

在启动时启动安全监视器时,可以通过添加-<0、1、2、3>参数来启用调试模式。
$ safetymonitor safetymonitor -a 1 &
此参数使SAIL和APSS安全监视器处于调试模式。支持的调试模式:
0–Debug mode is OFF
1-调试模式都开启
2-调试模式仅适用于APSS
3-调试模式仅为SAIL打开

6.1.2在安全监控器中启用生产模式

生产模式允许检查所有关键客户端的注册情况。如果任何关键客户端未能在指定的时间段内注册,则会显示严重性为Soc_catal的故障类型。它由adding-d参数启用,同时在启动时启动安全监视器。
$ safetymonitor safetymonitor -d &
以下是关键的客户端子系统:
APSS
TSENSE

6.1.3如何将子系统标记为关键子系统

在sm_cfg.h文件的数组critical_subs_list[]中添加枚举数据类型safety_fallt_system中的子系统ID。例如,将CUSTOM0添加到关键子系统列表中:
critical_subs_list[] ={…, CUSTOM0,… };

注:目前列表critical_subs_list[]包含两个子系统:APSS和Tsense。

6.1.4 如何添加新的子系统

在数据类型safety_fail_system中添加新的枚举成员。例如,要在枚举列表中添加新的子系统CUSTOM5:
typedef enum
{

DUMMY3,
/* Customer subsystems start here */
CUSTOM0,

CUSTOM5,
CLIENT_SUBSYS_MAX
} safety_fault_subsystem;

6.1.5如何添加新的故障订阅户

在数据类型safety_fail_subscriber中添加新的枚举成员。
要在枚举列表中添加新的子系统FAULT_SUBS_CUSTOM1,请执行以下操作:
typedef enum
{

FAULT_SUBS_4,
/* Customer subscriber applications start here */
FAULT_SUBS_CUSTOM0,
FAULT_SUBS_CUSTOM1,
FAULT_SUBS_MAX
} safety_fault_subscriber;

6.2 测试应用程序的命令行选项

testapp options
在这里插入图片描述

6.3客户端应用程序开发

客户端应用程序可以基于随发行版提供的testapp进行开发。
testapp代码位于第6.6.节中列出的位置。
在common.mk文件中,添加以下内容以链接到sm_client库:
LIBS+= ^sm_client
客户端代码必须包含标头文件:
#include “sm_client.h”

6.4测试应用程序使用示例

6.4.1 发送故障信息

命令:$testapp -r -i 24 -f
Testapp向安全监视器注册(-r选项)客户端应用程序id 24(-i选项),并向AURIX发送故障消息(-f选项)。testapp生成与客户端应用程序id 24相对应的硬编码故障消息。
在这里插入图片描述
在这里插入图片描述

6.4.2正在发送运行状况消息

命令:$ testapp -r -i 24 -h 1
Testapp向安全监视器注册(-r选项)客户端应用程序id 24(-i选项),并向AURIX发送健康状态(-h选项)。在本例中,它将健康状态更新消息发送为健康。
在这里插入图片描述

6.4.3订阅错误(使用s选项)

这个测试可以通过运行两个测试应用程序客户端应用程序来执行。
▪应用程序ID为24的客户端,订阅并等待故障60秒
$on -u 0:1002 testapp -r -i 24 10 -s 1 -b 60

▪从应用程序ID为: 25的客户端发送故障。
$testapp -r -i 25 -f
在这里插入图片描述

在发送故障之后,具有应用ID 24的testapp的第一实例接收具有故障有效载荷的故障指示。

上例中打印的故障内容:
buf_len = 0x16
Msg_id = FAULT_MSGapp_id = DUMMY1
fault_severity = SAFETY_ERROR

6.4.4通过测试-app命令行设置调试模式

APSS和SAIL可以使用测试应用程序命令进入调试模式。

命令:testapp -e <调试模式>,其中调试模式可以是以下模式之一:
0–Debug mode is OFF
1-调试模式都开启
2-调试模式仅适用于APSS
3-调试模式仅为SAIL打开
注意:调试模式是相互排斥的,即:一次只能调用一个调试模式。
例如,如果将调试模式设置为1,则APSS和SAIL都将处于调试模式。但是现在,如果调试模式被设置为2,这将导致只有APSS保持在调试模式下,而在SAIL上的调试模式将被禁用。
同样,如果调试模式设置为3,这将导致APSS的调试模式被禁用,SAIL的调试模式将被启用。
此外,在当前的生产构建中验证调试模式2和3具有挑战性,因为APSS和SAIL相互依赖,并且有自己的安全状态机制。因此,建议今后只验证调试模式1(同时用于APSS和SAIL)选项。

6.5 AURIX串行控制台打印

6.5.1消息摘要

两个soc每1秒就会在AURIX串行控制台上连续打印一次摘要。
在串行控制台上打印的摘要如下所示:
在这里插入图片描述
AURIX上的安全应用程序连续打印了SOC1和SOC2的以下摘要:
▪串行控制台打印“Info:SOC1[T:] / info:SOC2[T:]”,描述摘要是来自SOC1还是SOC2,时间以秒为单位。
▪在最近1秒内收到的运行状况消息总数。
▪客户端在1秒的时间间隔内变得不健康的次数将出现在“不健康的状态”中。
▪在1秒的时间间隔内,每个客户端ID的最新健康状态将出现在“健康状况”中。
▪在过去1秒内收到的总故障消息和任何客户端特定的警告/错误数将出现在“总故障”中。
▪故障序列扩展了总故障总数的定义。它表示来自特定子系统的故障发生的顺序,也表示故障的严重程度。

6.5.2运行状况消息摘要

在串行控制台上打印的运行状况消息摘要如下所示:
在这里插入图片描述
在MCU上收到的总结包括:
▪“总健康状况”表示在过去1秒内收到的健康状况总数。
▪不健康:这将显示客户是不健康的。这只打印给那些不健康的客户端(UH)。
▪此快照显示“不健康”下的“[12:40]”,其中“12”是客户端ID,“40”是客户端报告为不健康的次数。
▪“健康状况”将显示健康状况为不健康(UH)、未注册(NREG)或未报告(NREP)的客户端的健康状态。
▪健康的(H)客户将不会出现在“健康状况”的打印版中。
▪要向APSS安全监视器注册客户端,并将健康状态发送为健康和不健康,请参见第6.1.3节。

6.5.3故障消息摘要

在串行控制台上打印的故障消息摘要如下所示:
在这里插入图片描述

在MCU上收到的总结包括:
▪“故障总数”显示了在最近1秒内接收到的故障总数。
▪“客户端”显示故障严重程度的客户端编号和1秒内接收故障的次数
▪此快照显示“0[2:20]”,其中“0”是客户端,“2”是故障的严重程度,“20”是在1秒内接收到的故障次数。
▪故障序列扩展了总故障总数的定义。它表示来自特定子系统的故障发生的顺序,也表示故障的严重程度。在“[0,2]”快照中,这里“0”是客户端ID,“2”是故障严重程度。

6.6 Source structure

▪/qnx_ap/AMSS/safety/safetymonitor/safetymonitor/src/-安全监控源
▪/qnx_ap/AMSS/safety/safetymonitor/public/AMSS/–安全监视器FUSA头文件。
▪/safetymonitor/sm_client–安全监视器客户端库
▪/safetymonitor/testapp–样本测试应用程序

6.7 AURIX source structure

列出的文件可以在META构建中的qnx_ap\AMS\vip\aurix\src\AppSw\Tricore中找到。

在这里插入图片描述
在这里插入图片描述

A References

A.1首字母缩略词和术语

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端:让一个div悬浮在另一个div之上

使用 CSS 的 position 属性和 z-index 属性 首先&#xff0c;将第二个 div 元素的 position 属性设为 relative 或 absolute。这样可以让该元素成为一个定位元素&#xff0c;使得后代元素可以相对于它进行定位。 然后&#xff0c;将要悬浮的 div 元素的 position 属性设为 ab…

分布式锁常见实现方案

分布式锁常见实现方案 基于 Redis 实现分布式锁 如何基于 Redis 实现一个最简易的分布式锁&#xff1f; 不论是本地锁还是分布式锁&#xff0c;核心都在于“互斥”。 在 Redis 中&#xff0c; SETNX 命令是可以帮助我们实现互斥。SETNX 即 SET if Not eXists (对应 Java 中…

Redis7--基础篇7(哨兵sentinel)

1. 关于哨兵的介绍 1、监控redis运行状态&#xff0c;包括master和slave&#xff08;主从监控&#xff09; 2、哨兵可以将故障转移的结果发送给客户端&#xff08;消息通知&#xff09; 3、当master down机&#xff0c;能自动将slave切换成新master&#xff08;故障转移&#…

软件测试理论

含义&#xff1a;使用技术手段来验证软件是否满足使用需求 目的&#xff1a;减少软件缺陷&#xff0c;保障软件质量 单元测试&#xff1a;对模块/函数进行的测试 集成测试&#xff1a;把多个模块/函数组装到一起进行的测试 系统测试&#xff1a;计算机程序结合外设网络等其…

springboot077基于SpringBoot的汽车票网上预订系统

springboot077基于SpringBoot的汽车票网上预订系统 成品项目已经更新&#xff01;同学们可以打开链接查看&#xff01;需要定做的及时联系我&#xff01;专业团队定做&#xff01;全程包售后&#xff01; 2000套项目视频链接&#xff1a;https://pan.baidu.com/s/1N4L3zMQ9n…

流量异常-挂马造成百度收录异常关键词之解决方案(虚拟主机)

一.异常现象&#xff1a;流量突然暴涨&#xff0c;达到平时流量几倍乃至几十倍&#xff0c;大多数情况下因流量超标网站被停止。 二.排查原因&#xff1a; 1.首先分析web日志&#xff1a;访问量明显的成倍、几十倍的增加&#xff1b;访问页面不同&#xff1b;访问IP分散并不固…

err_connect_length_mismatch错误

原因: 官网解释为&#xff1a;err_content_length_mismatch:错误的内容长度不匹配&#xff08;请求的Heather 里content-length长度与返回的content-length不一致&#xff09; 问题截图: 分析: 由截图可见,静态资源加载错误,提示err_content_length_mismatch,经排查,网络页签…

“新KG”视点 | 知识与大模型融合技术在电信领域应用探索

OpenKG 大模型专辑 导读 知识图谱和大型语言模型都是用来表示和处理知识的手段。大模型补足了理解语言的能力&#xff0c;知识图谱则丰富了表示知识的方式&#xff0c;两者的深度结合必将为人工智能提供更为全面、可靠、可控的知识处理方法。在这一背景下&#xff0c;OpenKG组织…

M2芯片回顾

M芯片&#xff0c; 一竟到底&#xff1a; M1芯片的体积&#xff1a; M2 代表 M 系列芯片的第二代&#xff1a; 其进一步提升了芯片的性能和功率 &#xff0c;这也是 M 芯片目前的追求&#xff1a;最大化性能的同时&#xff0c;最大限度降低功耗。 UMA 统一内存架构被再一次提到…

什么是 shell 脚本?

一、什么是 shell&#xff1f; Shell 是一个应用程序&#xff0c;它负责接收用户输入的命令&#xff0c;然后根据命令做出相应的动作&#xff0c; Shell 负责将应用层或者用户输入的命令传递给系统内核&#xff0c;由操作系统内核来完成相应的工作&#xff0c;然后将结果反馈给…

西门子 ULTRAMAT 23多组分气体分析仪 端子接线说明

后面板端子分布图 RS485接口 模拟量&#xff08;开关量&#xff09;接口 特此记录 anlog 2023年12月6日

天眼销为电销行业降低获客成本

当下&#xff0c;做电销的老板都有一个深刻体会&#xff1a;市场竞争越来越激烈&#xff0c;获客成本不断攀升&#xff0c;但效率不升返降&#xff0c;企业经营困难。特别是在这一两年&#xff0c;市场环境紧张&#xff0c;业务不好开展&#xff0c;更是雪上加霜。 销售也感觉…

1.3角色设计精要

一、角色设计流程 二、确定角色关键词 OW角色小美 关键词&#xff1a; 中国防守英雄冰与雪聪明的邻家大姐姐探索与冒险南极科考航天科技 OW角色猎空 关键词&#xff1a; 英国敏捷飞行员进攻英雄年轻动感活泼 三、收集素材和灵感 概念设计 由分析用户需求到生成概念产品一系…

FTP协议(PORT和PASV模式)

目录 FTP协议基本概念 PORT主动模式工作流程 PORT工作过程 PORT工作报文 PASV被动模式工作流程 PASV工作过程 PASV工作报文 FTP协议基本概念 FTP文件传输协议&#xff0c;用于在互联网上进行文件传输&#xff0c;基于C/S架构 FTP的连接模式 FTP采用双TCP连接方式 控制连…

OSG编程指南<十四>:OSG纹理渲染之普通纹理、多重纹理、Mipmap多级渐远纹理及TextureRectangle矩阵纹理

1、纹理映射介绍 物体的外观不仅包括形状&#xff0c;不同物体表面有着不同的颜色和图案。一个简单而有效地实现这种特性的方法就是使用纹理映射。在三维图形中&#xff0c;纹理映射&#xff08;Texture Mapping&#xff09;的方法运用广泛&#xff0c;使用该技术可以大大提高物…

校园教务管理系统

学年论文&#xff08;课程设计&#xff09; 题目&#xff1a; 信息管理系统 校园教务管理系统 摘要&#xff1a;数据库技术是现代信息科学与技术的重要组成部分&#xff0c;是计算机数据处理与信息管理系统的核心&#xff0c;随着计算机技术的发展&#xff0c;数据库技…

记录 | linux静态库和动态库的理解

hello.cpp&#xff1a; #include <cstdio>void hello() {printf("Hello, world!\n"); }main.cpp&#xff1a; #include <cstdio>void hello();int main() {hello();return 0; }静态库编译配置&#xff1a; cmake_minimum_required(VERSION 3.12) proj…

C++大小写字母转换

这内容确实很初级了&#xff0c;就是ascii码的加减转换类型输出&#xff0c;但是以往都是学学理论&#xff0c;好多东西还真掌握不扎实&#xff0c;现在通过实验了验证一下&#xff0c;代码如下 可以看到字母的大小写直接差了32&#xff0c;如果要进行转换的话对应加减就可以了…

Hello World

世界上最著名的程序 from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}app.get("/hello/{name}") async def say_hello(name: str):return {"message": f"…