当前位置: 首页 > news >正文

AUTOSAR进阶图解==>AUTOSAR_SWS_TimeSyncOverFlexRay

AUTOSAR SWS TimeSyncOverFlexRay 详解文档

FlexRay时间同步模块详细技术规范与架构分析

目录

  • 1. 概述
  • 2. 模块架构
  • 3. 时间同步机制
  • 4. 消息格式
  • 5. 状态管理
  • 6. 配置参数
  • 7. API接口
  • 8. 错误处理
  • 9. 总结

1. 概述

FrTSyn(FlexRay Time Synchronization)模块是AUTOSAR基础软件中的一个重要组件,负责在FlexRay网络上实现精确的时间同步。该模块通过分发同步时间信息,确保网络中的所有节点具有一致的时间基准。

1.1 主要功能

  • 全局时间同步:在FlexRay网络上分发全局时间信息
  • 偏移时间管理:处理时间偏移值的传输和接收
  • 消息格式处理:支持SYNC和OFS两种消息格式
  • CRC保护:提供可选的CRC校验功能
  • 传输模式控制:支持动态开启/关闭传输功能

1.2 应用场景

  • 汽车电子系统中的时间同步
  • 分布式控制系统的协调
  • 实时数据采集的时间戳对齐
  • 网络诊断和监控

2. 模块架构

FrTSyn模块采用分层架构设计,与多个AUTOSAR模块进行交互,实现完整的时间同步功能。

在这里插入图片描述

FrTSyn模块架构图展示了模块的分层结构和依赖关系

2.1 架构层次

应用层
  • BswM(基础软件模式管理器):负责协调网络访问,通过FrTSyn_SetTransmissionMode()控制传输模式
中间层
  • FrTSyn(FlexRay时间同步):核心模块,包含以下子组件:
    • 时间主控器:负责生成和发送时间同步消息
    • 时间从控器:负责接收和处理时间同步消息
    • 消息处理器:处理消息的格式化和验证
  • StbM(同步时间基管理器):提供时间基管理功能,维护虚拟本地时间
底层
  • FrIf(FlexRay接口):提供FlexRay通信功能
  • DET(默认错误跟踪器):处理开发错误报告
  • CRC(循环冗余校验):提供CRC计算功能

2.2 接口关系

  • 传输接口:FrTSyn向FrIf提供传输服务
  • 接收接口:FrTSyn向FrIf提供接收服务
  • 时间管理接口:FrTSyn与StbM交互时间信息
  • 错误报告接口:FrTSyn向DET报告错误
  • CRC计算接口:FrTSyn使用CRC模块进行校验

2.3 代码示例

/* FrTSyn模块初始化示例 */
Std_ReturnType FrTSyn_Init(const FrTSyn_ConfigType* ConfigPtr)
{Std_ReturnType result = E_NOT_OK;/* 参数检查 */if (ConfigPtr == NULL) {DET_ReportError(FRTSYN_MODULE_ID, 0, FRTSYN_INIT_SID, FRTSYN_E_PARAM_POINTER);return E_NOT_OK;}/* 初始化内部变量 */FrTSyn_Internal_InitVariables();/* 设置序列计数器为0 */FrTSyn_Internal_SetSequenceCounter(0);/* 初始化时间同步状态 */FrTSyn_Internal_SetModuleState(FRTSYN_STATE_INITIALIZED);return E_OK;
}/* 传输模式控制示例 */
Std_ReturnType FrTSyn_SetTransmissionMode(uint8 Controller, FrTSyn_TransmissionModeType Mode)
{Std_ReturnType result = E_NOT_OK;/* 参数验证 */if (Controller >= FRTSYN_NUMBER_OF_CONTROLLERS) {DET_ReportError(FRTSYN_MODULE_ID, 0, FRTSYN_SETTRANSMISSIONMODE_SID, FRTSYN_E_PARAM_CONTROLLER);return E_NOT_OK;}if ((Mode != FRTSYN_TX_OFF) && (Mode != FRTSYN_TX_ON)) {DET_ReportError(FRTSYN_MODULE_ID, 0, FRTSYN_SETTRANSMISSIONMODE_SID, FRTSYN_E_PARAM_MODE);return E_NOT_OK;}/* 设置传输模式 */FrTSyn_Internal_SetTransmissionMode(Controller, Mode);return E_OK;
}

3. 时间同步机制

FrTSyn模块通过特定的消息序列实现时间同步,支持全局时间同步和偏移时间同步两种模式。

在这里插入图片描述

时间同步序列图展示了Time Master和Time Slave之间的交互流程

3.1 全局时间同步流程

时间主控器(Time Master)处理
  1. 获取当前时间:调用StbM_GetCurrentVirtualLocalTime()获取虚拟本地时间
  2. 计算时间值:计算下一周期0的时间值T0
  3. 组装SYNC消息:包含时间值、序列计数器、用户数据等
  4. 发送消息:通过FrIf发送到FlexRay网络
时间从控器(Time Slave)处理
  1. 接收SYNC消息:从FlexRay网络接收消息
  2. 验证消息:检查Type字段和CRC值
  3. 获取当前时间:调用StbM_GetCurrentVirtualLocalTime()
  4. 计算时间元组:计算[T1; T1VLT]时间元组
  5. 更新全局时间:调用StbM_BusSetGlobalTime()更新时间

3.2 偏移时间同步流程

时间主控器处理
  1. 获取偏移时间:调用StbM_GetOffset()获取当前偏移时间
  2. 组装OFS消息:包含偏移时间值、序列计数器等
  3. 发送消息:通过FrIf发送到FlexRay网络
时间从控器处理
  1. 接收OFS消息:从FlexRay网络接收消息
  2. 验证OFS消息:检查消息格式和内容
  3. 计算偏移时间元组:计算偏移时间元组
  4. 更新偏移时间:调用StbM_BusSetGlobalTime()更新偏移时间

3.3 关键函数说明

StbM_GetCurrentVirtualLocalTime()
  • 描述:获取当前虚拟本地时间值
  • 参数:无
  • 返回值:虚拟本地时间值(纳秒)
  • 用途:用于时间同步计算
StbM_BusSetGlobalTime()
  • 描述:设置总线全局时间
  • 参数
    • TimeBaseId:时间基标识符
    • TimeValue:时间值
    • TimeBaseStatus:时间基状态
  • 返回值:操作结果
  • 用途:更新全局时间或偏移时间

3.4 代码示例

/* 全局时间同步处理示例 */
Std_ReturnType FrTSyn_ProcessGlobalTimeSync(void)
{uint64 currentTime;uint64 nextCycleTime;FrTSyn_SyncMessageType syncMsg;Std_ReturnType result;/* 获取当前虚拟本地时间 */currentTime = StbM_GetCurrentVirtualLocalTime();/* 计算下一周期0的时间值 */nextCycleTime = FrTSyn_Internal_CalculateNextCycleTime(currentTime);/* 组装SYNC消息 */syncMsg.Type = FRTSYN_SYNC_TYPE;syncMsg.TimeDomain = FrTSyn_Internal_GetTimeDomain();syncMsg.SyncTimeSec = (uint32)(nextCycleTime / 1000000000ULL);syncMsg.SyncTimeNSec = (uint32)(nextCycleTime % 1000000000ULL);syncMsg.SequenceCounter = FrTSyn_Internal_GetNextSequenceCounter();/* 计算CRC(如果启用) */if (FrTSyn_Internal_IsCrcEnabled()) {syncMsg.Crc = Crc_CalculateCRC8H2F(&syncMsg.Data, sizeof(syncMsg.Data));}/* 发送SYNC消息 */result = FrIf_Transmit(FRTSYN_CHANNEL_ID, &syncMsg, sizeof(syncMsg));return result;
}/* 偏移时间同步处理示例 */
Std_ReturnType FrTSyn_ProcessOffsetTimeSync(void)
{uint32 offsetTimeSec, offsetTimeNSec;FrTSyn_OffsetMessageType offsetMsg;Std_ReturnType result;/* 获取当前偏移时间 */result = StbM_GetOffset(FRTSYN_TIME_BASE_ID, &offsetTimeSec, &offsetTimeNSec);if (result != E_OK) {return result;}/* 组装OFS消息 */offsetMsg.Type = FRTSYN_OFS_TYPE;offsetMsg.TimeDomain = FrTSyn_Internal_GetTimeDomain() + 16; /* 偏移时间域 */offsetMsg.OfsTimeSec = offsetTimeSec;offsetMsg.OfsTimeNSec = offsetTimeNSec;offsetMsg.SequenceCounter = FrTSyn_Internal_GetNextSequenceCounter();/* 计算CRC(如果启用) */if (FrTSyn_Internal_IsCrcEnabled()) {offsetMsg.Crc = Crc_CalculateCRC8H2F(&offsetMsg.Data, sizeof(offsetMsg.Data));}/* 发送OFS消息 */result = FrIf_Transmit(FRTSYN_CHANNEL_ID, &offsetMsg, sizeof(offsetMsg));return result;
}

4. 消息格式

FrTSyn模块支持两种主要消息格式:SYNC消息(全局时间同步)和OFS消息(偏移时间同步),每种消息都支持CRC保护和非CRC保护两种模式。

在这里插入图片描述

消息格式类图展示了SYNC和OFS消息的结构和关系

4.1 SYNC消息格式

非CRC保护SYNC消息
  • Type:0x10,标识SYNC非CRC保护消息
  • UserByte2:用户数据字节2,默认值0
  • D:时间域(0-15),表示全局时间域
  • SGW:同步网关状态,设置为SyncToGTM
  • UserByte0/UserByte1:用户数据字节,默认值0
  • SyncTimeSec:48位时间值(秒部分)
  • SyncTimeNSec:32位时间值(纳秒部分)
CRC保护SYNC消息
  • Type:0x20,标识SYNC CRC保护消息
  • CRC:8位CRC校验值
  • 其他字段与非CRC保护消息相同

4.2 OFS消息格式

非CRC保护OFS消息
  • Type:0x34,标识OFS非CRC保护消息
  • UserByte2:用户数据字节2,默认值0
  • D:时间域(16-31),表示偏移时间域
  • SGW:同步网关状态,设置为SyncToSubDomain
  • UserByte0/UserByte1:用户数据字节,默认值0
  • reserved:保留字段,默认值0
  • OfsTimeSec:32位偏移时间值(秒部分)
  • OfsTimeNSec:32位偏移时间值(纳秒部分)
CRC保护OFS消息
  • Type:0x44,标识OFS CRC保护消息
  • CRC:8位CRC校验值
  • 其他字段与非CRC保护消息相同

4.3 消息字段说明

消息类型(MessageType)
  • 0x10:SYNC非CRC保护
  • 0x20:SYNC CRC保护
  • 0x34:OFS非CRC保护
  • 0x44:OFS CRC保护
时间域(TimeDomain)
  • 0-15:全局时间域,用于SYNC消息
  • 16-31:偏移时间域,用于OFS消息
序列计数器(SequenceCounter)
  • 0-15:4位序列计数器
  • 独立于SYNC和OFS消息
  • 每次传输递增1,15后回绕到0

4.4 代码示例

/* 消息格式定义 */
typedef struct {uint8 Type;                    /* 消息类型 */uint8 UserByte2;               /* 用户数据字节2 */uint8 D;                       /* 时间域 */uint8 SGW;                     /* 同步网关状态 */uint8 UserByte0;               /* 用户数据字节0 */uint8 UserByte1;               /* 用户数据字节1 */uint8 SyncTimeSec[6];          /* 48位时间值(秒) */uint8 SyncTimeNSec[4];         /* 32位时间值(纳秒) */
} FrTSyn_SyncMessageType;typedef struct {uint8 Type;                    /* 消息类型 */uint8 UserByte2;               /* 用户数据字节2 */uint8 D;                       /* 时间域 */uint8 SGW;                     /* 同步网关状态 */uint8 UserByte0;               /* 用户数据字节0 */uint8 UserByte1;               /* 用户数据字节1 */uint8 reserved[2];             /* 保留字段 */uint8 OfsTimeSec[4];           /* 32位偏移时间值(秒) */uint8 OfsTimeNSec[4];          /* 32位偏移时间值(纳秒) */
} FrTSyn_OffsetMessageType;/* 消息组装示例 */
Std_ReturnType FrTSyn_AssembleSyncMessage(FrTSyn_SyncMessageType* msg, uint64 timeValue, boolean crcEnabled)
{if (msg == NULL) {return E_NOT_OK;}/* 设置消息类型 */msg->Type = crcEnabled ? FRTSYN_SYNC_TYPE_CRC : FRTSYN_SYNC_TYPE_NO_CRC;/* 设置用户数据 */msg->UserByte2 = 0;msg->UserByte0 = 0;msg->UserByte1 = 0;/* 设置时间域和SGW */msg->D = FrTSyn_Internal_GetTimeDomain();msg->SGW = FRTSYN_SGW_SYNC_TO_GTM;/* 设置时间值(大端序) */uint32 secPart = (uint32)(timeValue / 1000000000ULL);uint32 nsecPart = (uint32)(timeValue % 1000000000ULL);FrTSyn_Internal_WriteUint48(msg->SyncTimeSec, secPart);FrTSyn_Internal_WriteUint32(msg->SyncTimeNSec, nsecPart);return E_OK;
}/* 消息验证示例 */
Std_ReturnType FrTSyn_ValidateSyncMessage(const FrTSyn_SyncMessageType* msg, boolean crcEnabled)
{if (msg == NULL) {return E_NOT_OK;}/* 验证消息类型 */uint8 expectedType = crcEnabled ? FRTSYN_SYNC_TYPE_CRC : FRTSYN_SYNC_TYPE_NO_CRC;if (msg->Type != expectedType) {return E_NOT_OK;}/* 验证时间域 */if (msg->D > 15) {return E_NOT_OK;}/* 验证CRC(如果启用) */if (crcEnabled) {uint8 calculatedCrc = Crc_CalculateCRC8H2F(&msg->Data, sizeof(msg->Data));if (calculatedCrc != msg->Crc) {return E_NOT_OK;}}return E_OK;
}

5. 状态管理

FrTSyn模块采用状态机设计,管理模块的初始化、运行和错误处理状态。

在这里插入图片描述

状态机图展示了FrTSyn模块的状态转换和业务流程

5.1 主要状态

未初始化状态
  • 等待初始化:模块等待初始化调用
  • 初始化中:正在执行初始化过程
  • 初始化完成:初始化成功完成
  • 初始化失败:初始化过程中出现错误
已初始化状态
  • 空闲状态:模块正常运行,等待事件
  • 处理时间同步:正在处理全局时间同步
  • 处理偏移同步:正在处理偏移时间同步
  • 处理错误:正在处理错误情况
严重错误状态
  • 停止服务:模块停止提供服务
  • 等待复位:等待复位信号
  • 复位处理:正在执行复位操作
传输模式控制
  • 传输开启:允许发送时间同步消息
  • 传输关闭:禁止发送时间同步消息

5.2 状态转换

正常转换
  • 未初始化 → 已初始化FrTSyn_Init()成功调用
  • 空闲状态 → 处理时间同步:收到时间同步请求
  • 空闲状态 → 处理偏移同步:收到偏移同步请求
  • 处理时间同步 → 空闲状态:同步完成
  • 处理偏移同步 → 空闲状态:同步完成
错误转换
  • 处理错误 → 空闲状态:错误恢复成功
  • 处理错误 → 严重错误:错误恢复失败
  • 严重错误 → 未初始化:复位完成
传输模式转换
  • 传输开启 → 传输关闭FrTSyn_SetTransmissionMode(FRTSYN_TX_OFF)
  • 传输关闭 → 传输开启FrTSyn_SetTransmissionMode(FRTSYN_TX_ON)

5.3 代码示例

/* 状态定义 */
typedef enum {FRTSYN_STATE_UNINITIALIZED,     /* 未初始化 */FRTSYN_STATE_IDLE,              /* 空闲状态 */FRTSYN_STATE_PROCESSING_SYNC,   /* 处理时间同步 */FRTSYN_STATE_PROCESSING_OFS,    /* 处理偏移同步 */FRTSYN_STATE_ERROR,             /* 错误状态 */FRTSYN_STATE_CRITICAL_ERROR     /* 严重错误 */
} FrTSyn_StateType;typedef enum {FRTSYN_TX_MODE_OFF,             /* 传输关闭 */FRTSYN_TX_MODE_ON               /* 传输开启 */
} FrTSyn_TransmissionModeType;/* 状态机处理函数 */
void FrTSyn_MainFunction(void)
{FrTSyn_StateType currentState;FrTSyn_TransmissionModeType txMode;/* 获取当前状态 */currentState = FrTSyn_Internal_GetCurrentState();txMode = FrTSyn_Internal_GetTransmissionMode();switch (currentState) {case FRTSYN_STATE_IDLE:/* 空闲状态处理 */if (txMode == FRTSYN_TX_MODE_ON) {/* 检查是否需要发送时间同步消息 */if (FrTSyn_Internal_IsTimeSyncRequired()) {FrTSyn_Internal_SetState(FRTSYN_STATE_PROCESSING_SYNC);FrTSyn_ProcessGlobalTimeSync();}/* 检查是否需要发送偏移同步消息 */if (FrTSyn_Internal_IsOffsetSyncRequired()) {FrTSyn_Internal_SetState(FRTSYN_STATE_PROCESSING_OFS);FrTSyn_ProcessOffsetTimeSync();}}break;case FRTSYN_STATE_PROCESSING_SYNC:/* 处理时间同步状态 */if (FrTSyn_Internal_IsSyncComplete()) {FrTSyn_Internal_SetState(FRTSYN_STATE_IDLE);} else if (FrTSyn_Internal_IsSyncError()) {FrTSyn_Internal_SetState(FRTSYN_STATE_ERROR);}break;case FRTSYN_STATE_PROCESSING_OFS:/* 处理偏移同步状态 */if (FrTSyn_Internal_IsOffsetSyncComplete()) {FrTSyn_Internal_SetState(FRTSYN_STATE_IDLE);} else if (FrTSyn_Internal_IsOffsetSyncError()) {FrTSyn_Internal_SetState(FRTSYN_STATE_ERROR);}break;case FRTSYN_STATE_ERROR:/* 错误状态处理 */if (FrTSyn_Internal_CanRecoverFromError()) {FrTSyn_Internal_RecoverFromError();FrTSyn_Internal_SetState(FRTSYN_STATE_IDLE);} else {FrTSyn_Internal_SetState(FRTSYN_STATE_CRITICAL_ERROR);}break;case FRTSYN_STATE_CRITICAL_ERROR:/* 严重错误状态处理 */FrTSyn_Internal_StopService();/* 等待外部复位 */break;default:/* 未知状态处理 */FrTSyn_Internal_SetState(FRTSYN_STATE_CRITICAL_ERROR);break;}
}/* 传输模式控制 */
Std_ReturnType FrTSyn_SetTransmissionMode(uint8 Controller, FrTSyn_TransmissionModeType Mode)
{Std_ReturnType result = E_NOT_OK;/* 参数验证 */if (Controller >= FRTSYN_NUMBER_OF_CONTROLLERS) {DET_ReportError(FRTSYN_MODULE_ID, 0, FRTSYN_SETTRANSMISSIONMODE_SID, FRTSYN_E_PARAM_CONTROLLER);return E_NOT_OK;}if ((Mode != FRTSYN_TX_MODE_OFF) && (Mode != FRTSYN_TX_MODE_ON)) {DET_ReportError(FRTSYN_MODULE_ID, 0, FRTSYN_SETTRANSMISSIONMODE_SID, FRTSYN_E_PARAM_MODE);return E_NOT_OK;}/* 设置传输模式 */FrTSyn_Internal_SetTransmissionMode(Controller, Mode);/* 如果关闭传输,停止所有传输请求 */if (Mode == FRTSYN_TX_MODE_OFF) {FrTSyn_Internal_StopAllTransmissions(Controller);}return E_OK;
}

6. 配置参数

FrTSyn模块支持多种配置参数,用于控制模块的行为和性能。

6.1 主要配置参数

时间同步配置
  • FrTSynGlobalTimeTxPeriod:全局时间传输周期
  • FrTSynGlobalTimeTxCrcSecured:全局时间传输CRC保护配置
  • FrTSynGlobalTimeDebounceTime:全局时间防抖时间
  • FrTSynImmediateTimeSync:立即时间同步配置
偏移时间配置
  • FrTSynOffsetTimeTxPeriod:偏移时间传输周期
  • FrTSynOffsetTimeTxCrcSecured:偏移时间传输CRC保护配置
  • FrTSynOffsetTimeDebounceTime:偏移时间防抖时间
接收配置
  • FrTSynRxCrcValidated:接收CRC验证配置
  • FrTSynGlobalTimeSyncDataIDList:全局时间同步数据ID列表
  • FrTSynGlobalTimeOfsDataIDList:全局时间偏移数据ID列表

6.2 配置结构定义

/* FrTSyn配置结构 */
typedef struct {uint8 ModuleId;                           /* 模块标识符 */boolean ModuleEnabled;                    /* 模块启用状态 */uint8 NumberOfControllers;                /* 控制器数量 */uint8 NumberOfTimeDomains;                /* 时间域数量 *//* 全局时间配置 */uint16 GlobalTimeTxPeriod;                /* 全局时间传输周期 */boolean GlobalTimeTxCrcSecured;           /* 全局时间CRC保护 */uint16 GlobalTimeDebounceTime;            /* 全局时间防抖时间 */boolean ImmediateTimeSync;                /* 立即时间同步 *//* 偏移时间配置 */uint16 OffsetTimeTxPeriod;                /* 偏移时间传输周期 */boolean OffsetTimeTxCrcSecured;           /* 偏移时间CRC保护 */uint16 OffsetTimeDebounceTime;            /* 偏移时间防抖时间 *//* 接收配置 */FrTSyn_CrcValidationType RxCrcValidated; /* 接收CRC验证 */uint16* GlobalTimeSyncDataIDList;         /* 全局时间同步数据ID列表 */uint16* GlobalTimeOfsDataIDList;          /* 全局时间偏移数据ID列表 *//* 循环消息恢复配置 */uint16 CyclicMsgResumeTime;               /* 循环消息恢复时间 */} FrTSyn_ConfigType;/* CRC验证类型 */
typedef enum {FRTSYN_CRC_NOT_VALIDATED,                 /* 不验证CRC */FRTSYN_CRC_VALIDATED,                     /* 验证CRC */FRTSYN_CRC_IGNORED,                       /* 忽略CRC */FRTSYN_CRC_OPTIONAL                       /* 可选CRC */
} FrTSyn_CrcValidationType;

6.3 配置初始化示例

/* 配置初始化函数 */
void FrTSyn_InitializeConfig(FrTSyn_ConfigType* config)
{if (config == NULL) {return;}/* 基本配置 */config->ModuleId = FRTSYN_MODULE_ID;config->ModuleEnabled = TRUE;config->NumberOfControllers = 1;config->NumberOfTimeDomains = 2;/* 全局时间配置 */config->GlobalTimeTxPeriod = 1000;        /* 1秒周期 */config->GlobalTimeTxCrcSecured = TRUE;    /* 启用CRC保护 */config->GlobalTimeDebounceTime = 100;     /* 100ms防抖时间 */config->ImmediateTimeSync = TRUE;         /* 启用立即同步 *//* 偏移时间配置 */config->OffsetTimeTxPeriod = 2000;        /* 2秒周期 */config->OffsetTimeTxCrcSecured = TRUE;    /* 启用CRC保护 */config->OffsetTimeDebounceTime = 100;     /* 100ms防抖时间 *//* 接收配置 */config->RxCrcValidated = FRTSYN_CRC_VALIDATED;/* 数据ID列表配置 */config->GlobalTimeSyncDataIDList = FrTSyn_GlobalTimeSyncDataIDList;config->GlobalTimeOfsDataIDList = FrTSyn_GlobalTimeOfsDataIDList;/* 循环消息恢复配置 */config->CyclicMsgResumeTime = 5000;       /* 5秒恢复时间 */
}/* 数据ID列表定义 */
static const uint16 FrTSyn_GlobalTimeSyncDataIDList[16] = {0x1000, 0x1001, 0x1002, 0x1003, 0x1004, 0x1005, 0x1006, 0x1007,0x1008, 0x1009, 0x100A, 0x100B, 0x100C, 0x100D, 0x100E, 0x100F
};static const uint16 FrTSyn_GlobalTimeOfsDataIDList[16] = {0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007,0x2008, 0x2009, 0x200A, 0x200B, 0x200C, 0x200D, 0x200E, 0x200F
};

7. API接口

FrTSyn模块提供丰富的API接口,支持模块的初始化、配置、控制和状态查询。

7.1 初始化接口

FrTSyn_Init()
  • 功能:初始化FrTSyn模块
  • 参数const FrTSyn_ConfigType* ConfigPtr
  • 返回值Std_ReturnType
  • 说明:初始化所有内部变量,设置模块为初始化状态
FrTSyn_GetVersionInfo()
  • 功能:获取模块版本信息
  • 参数Std_VersionInfoType* versioninfo
  • 返回值void
  • 说明:返回模块的版本信息

7.2 控制接口

FrTSyn_SetTransmissionMode()
  • 功能:设置传输模式
  • 参数uint8 Controller, FrTSyn_TransmissionModeType Mode
  • 返回值Std_ReturnType
  • 说明:控制时间同步消息的传输
FrTSyn_MainFunction()
  • 功能:主函数,处理周期性任务
  • 参数:无
  • 返回值void
  • 说明:处理时间同步、消息传输等周期性任务

7.3 状态查询接口

FrTSyn_GetState()
  • 功能:获取模块状态
  • 参数uint8 Controller, FrTSyn_StateType* StatePtr
  • 返回值Std_ReturnType
  • 说明:返回指定控制器的当前状态

7.4 代码示例

/* API接口实现示例 */
Std_ReturnType FrTSyn_Init(const FrTSyn_ConfigType* ConfigPtr)
{Std_ReturnType result = E_NOT_OK;/* 参数检查 */if (ConfigPtr == NULL) {DET_ReportError(FRTSYN_MODULE_ID, 0, FRTSYN_INIT_SID, FRTSYN_E_PARAM_POINTER);return E_NOT_OK;}/* 检查模块是否已初始化 */if (FrTSyn_Internal_IsInitialized()) {DET_ReportError(FRTSYN_MODULE_ID, 0, FRTSYN_INIT_SID, FRTSYN_E_ALREADY_INITIALIZED);return E_NOT_OK;}/* 保存配置 */FrTSyn_Internal_SaveConfig(ConfigPtr);/* 初始化内部变量 */FrTSyn_Internal_InitVariables();/* 设置序列计数器为0 */FrTSyn_Internal_SetSequenceCounter(0);/* 初始化时间同步状态 */FrTSyn_Internal_SetModuleState(FRTSYN_STATE_INITIALIZED);/* 初始化传输模式为关闭 */FrTSyn_Internal_SetTransmissionMode(0, FRTSYN_TX_MODE_OFF);return E_OK;
}void FrTSyn_GetVersionInfo(Std_VersionInfoType* versioninfo)
{if (versioninfo != NULL) {versioninfo->vendorID = FRTSYN_VENDOR_ID;versioninfo->moduleID = FRTSYN_MODULE_ID;versioninfo->sw_major_version = FRTSYN_SW_MAJOR_VERSION;versioninfo->sw_minor_version = FRTSYN_SW_MINOR_VERSION;versioninfo->sw_patch_version = FRTSYN_SW_PATCH_VERSION;}
}Std_ReturnType FrTSyn_GetState(uint8 Controller, FrTSyn_StateType* StatePtr)
{Std_ReturnType result = E_NOT_OK;/* 参数检查 */if (Controller >= FRTSYN_NUMBER_OF_CONTROLLERS) {DET_ReportError(FRTSYN_MODULE_ID, 0, FRTSYN_GETSTATE_SID, FRTSYN_E_PARAM_CONTROLLER);return E_NOT_OK;}if (StatePtr == NULL) {DET_ReportError(FRTSYN_MODULE_ID, 0, FRTSYN_GETSTATE_SID, FRTSYN_E_PARAM_POINTER);return E_NOT_OK;}/* 检查模块是否已初始化 */if (!FrTSyn_Internal_IsInitialized()) {DET_ReportError(FRTSYN_MODULE_ID, 0, FRTSYN_GETSTATE_SID, FRTSYN_E_UNINIT);return E_NOT_OK;}/* 获取状态 */*StatePtr = FrTSyn_Internal_GetCurrentState();return E_OK;
}/* 主函数实现 */
void FrTSyn_MainFunction(void)
{/* 检查模块是否已初始化 */if (!FrTSyn_Internal_IsInitialized()) {return;}/* 处理状态机 */FrTSyn_Internal_ProcessStateMachine();/* 处理周期性时间同步 */FrTSyn_Internal_ProcessCyclicTimeSync();/* 处理立即时间同步 */FrTSyn_Internal_ProcessImmediateTimeSync();/* 处理防抖计数器 */FrTSyn_Internal_ProcessDebounceCounters();/* 处理循环消息恢复计数器 */FrTSyn_Internal_ProcessCyclicMsgResumeCounter();
}

8. 错误处理

FrTSyn模块提供完善的错误处理机制,包括开发错误检测和运行时错误处理。

8.1 开发错误类型

参数错误
  • FRTSYN_E_PARAM_POINTER:空指针参数
  • FRTSYN_E_PARAM_CONTROLLER:无效控制器参数
  • FRTSYN_E_PARAM_MODE:无效模式参数
状态错误
  • FRTSYN_E_UNINIT:模块未初始化
  • FRTSYN_E_ALREADY_INITIALIZED:模块已初始化
配置错误
  • FRTSYN_E_INVALID_PDU_SDU_ID:无效PDU/SDU ID
  • FRTSYN_E_INVALID_PDUID:无效PDU ID

8.2 错误处理机制

开发错误检测
  • 使用DET模块报告开发错误
  • 在API函数中进行参数验证
  • 检查模块初始化状态
运行时错误处理
  • 消息格式验证失败处理
  • CRC校验失败处理
  • 超时错误处理

8.3 代码示例

/* 错误处理宏定义 */
#define FRTSYN_E_OK                       0x00
#define FRTSYN_E_NOT_OK                   0x01
#define FRTSYN_E_PARAM_POINTER            0x02
#define FRTSYN_E_PARAM_CONTROLLER         0x03
#define FRTSYN_E_PARAM_MODE               0x04
#define FRTSYN_E_UNINIT                   0x05
#define FRTSYN_E_ALREADY_INITIALIZED      0x06
#define FRTSYN_E_INVALID_PDU_SDU_ID       0x07
#define FRTSYN_E_INVALID_PDUID            0x08/* 错误处理函数 */
Std_ReturnType FrTSyn_HandleError(FrTSyn_ErrorType errorType, uint8 controller)
{Std_ReturnType result = E_NOT_OK;switch (errorType) {case FRTSYN_ERROR_INVALID_MESSAGE:/* 处理无效消息错误 */DET_ReportError(FRTSYN_MODULE_ID, controller, FRTSYN_MAINFUNCTION_SID, FRTSYN_E_INVALID_PDU_SDU_ID);FrTSyn_Internal_SetState(FRTSYN_STATE_ERROR);break;case FRTSYN_ERROR_CRC_FAILED:/* 处理CRC失败错误 */DET_ReportError(FRTSYN_MODULE_ID, controller, FRTSYN_MAINFUNCTION_SID, FRTSYN_E_INVALID_PDUID);FrTSyn_Internal_SetState(FRTSYN_STATE_ERROR);break;case FRTSYN_ERROR_TIMEOUT:/* 处理超时错误 */FrTSyn_Internal_HandleTimeout(controller);break;case FRTSYN_ERROR_CRITICAL:/* 处理严重错误 */FrTSyn_Internal_SetState(FRTSYN_STATE_CRITICAL_ERROR);FrTSyn_Internal_StopService();break;default:/* 未知错误处理 */result = E_NOT_OK;break;}return result;
}/* 消息验证错误处理 */
Std_ReturnType FrTSyn_ValidateMessage(const uint8* message, uint32 messageLength)
{if (message == NULL) {return FRTSYN_E_PARAM_POINTER;}if (messageLength < FRTSYN_MIN_MESSAGE_LENGTH) {return FRTSYN_E_INVALID_PDU_SDU_ID;}/* 验证消息类型 */uint8 messageType = message[0];if ((messageType != FRTSYN_SYNC_TYPE_NO_CRC) && (messageType != FRTSYN_SYNC_TYPE_CRC) &&(messageType != FRTSYN_OFS_TYPE_NO_CRC) &&(messageType != FRTSYN_OFS_TYPE_CRC)) {return FRTSYN_E_INVALID_PDUID;}/* 验证CRC(如果启用) */if ((messageType == FRTSYN_SYNC_TYPE_CRC) || (messageType == FRTSYN_OFS_TYPE_CRC)) {uint8 calculatedCrc = Crc_CalculateCRC8H2F(&message[2], messageLength - 2);if (calculatedCrc != message[1]) {return FRTSYN_E_INVALID_PDUID;}}return FRTSYN_E_OK;
}/* 超时错误处理 */
void FrTSyn_Internal_HandleTimeout(uint8 controller)
{/* 记录超时事件 */FrTSyn_Internal_LogTimeoutEvent(controller);/* 重新启动传输定时器 */FrTSyn_Internal_RestartTransmissionTimer(controller);/* 检查是否需要进入错误状态 */if (FrTSyn_Internal_GetTimeoutCount(controller) > FRTSYN_MAX_TIMEOUT_COUNT) {FrTSyn_Internal_SetState(FRTSYN_STATE_ERROR);}
}

9. 总结

FrTSyn模块作为AUTOSAR基础软件的重要组成部分,为FlexRay网络提供了可靠的时间同步功能。

9.1 主要优势

精确的时间同步
  • 支持微秒级的时间同步精度
  • 基于FlexRay网络的确定性传输
  • 支持全局时间和偏移时间同步
灵活的配置选项
  • 可配置的传输周期和防抖时间
  • 可选的CRC保护机制
  • 支持多种时间域配置
完善的错误处理
  • 开发错误检测和报告
  • 运行时错误恢复机制
  • 状态机管理确保系统稳定性

9.2 应用场景

汽车电子系统
  • 发动机控制系统时间同步
  • 制动系统协调控制
  • 车身电子系统同步
工业控制系统
  • 分布式控制节点同步
  • 实时数据采集时间戳对齐
  • 多轴运动控制系统协调
网络通信系统
  • 网络诊断和监控
  • 数据包时间戳处理
  • 网络性能分析

9.3 技术特点

标准化设计
  • 遵循AUTOSAR标准规范
  • 与其他AUTOSAR模块良好集成
  • 支持多种配置和部署方式
高性能实现
  • 优化的消息处理算法
  • 高效的状态机设计
  • 最小化CPU和内存占用
可靠性保证
  • 完善的错误检测和处理
  • 状态机确保系统稳定性
  • 支持故障恢复和复位

FrTSyn模块通过其精确的时间同步能力、灵活的配置选项和完善的错误处理机制,为AUTOSAR系统提供了可靠的时间同步解决方案,满足了现代汽车电子系统对时间同步的严格要求。

http://www.xdnf.cn/news/1486837.html

相关文章:

  • 轻松Linux-8.动静态库的制作及原理
  • SoundSource for Mac 音频控制工具
  • PyTorch Lightning(训练评估框架)
  • Python+DRVT 从外部调用 Revit:批量创建楼板
  • 基于SpringBoot+Vue的健身房管理系统的设计与实现(代码+数据库+LW)
  • 多环境配置切换机制能否让开发与生产无缝衔接?
  • 【论文阅读】自我进化的AI智能体综述
  • Unity学习----【进阶】Input System学习(一)--导入与基础的设备调用API
  • 《探索C++11:现代语法的内存管理优化“性能指针”(下篇)》
  • LeetCode 面试经典 150 题:移除元素(双指针思想优化解法详解)
  • RICOH理光 Priport DX4443c速印机 印A3的问题
  • 数据结构之二叉树(2)
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘setuptools’问题
  • 嵌入式学习---(ARM)
  • AutoHotkey将脚本编译为exe文件
  • DevOps实战(3) - 使用Arbess+GitLab+Hadess实现Java项目自动化部署
  • 【Java基础|第三十五篇】类加载与反射
  • 如何在Python中使用正则表达式?
  • 基于Apache Flink Stateful Functions的事件驱动微服务架构设计与实践指南
  • Flink TaskManager日志时间与实际时间有偏差
  • 鱼眼相机模型
  • JVM-默背版
  • 实验室服务器配置|通过Docker实现Linux系统多用户隔离与安全防控
  • Flink NetworkBufferPool核心原理解析
  • Android --- SystemUI 导入Android Studio及debug
  • 2025年体制内职业发展相关认证选择指南
  • 超越自动补全:将AI编码助手深度集成到你的开发工作流​​
  • 微信小程序中实现AI对话、生成3D图像并使用xr-frame演示
  • C++ 连接 Redis:redis-plus-plus 安装与使用入门指南
  • 关于npm的钩子函数