AUTOSAR进阶图解==>AUTOSAR_SWS_TTCANInterface
AUTOSAR TTCAN接口详解
目录
- 概述
1.1 TTCAN接口简介
1.2 功能概览 - 架构
2.1 模块架构
2.2 与其他模块的关系 - 状态机
3.1 TTCAN接口状态
3.2 主从模式状态 - 通信机制
4.1 数据传输流程
4.2 任务列表执行 - 配置结构
5.1 主要配置类
5.2 配置参数 - API接口
6.1 核心功能接口
6.2 回调接口 - 错误处理
7.1 错误分类
7.2 错误处理机制 - 总结
1. 概述
1.1 TTCAN接口简介
TTCAN接口(TTCANInterface)是AUTOSAR标准中用于实现时间触发CAN通信的关键组件,提供了基于时间触发的确定性通信机制。时间触发CAN(TTCAN)是标准CAN的扩展,旨在提供严格的时间确定性通信,适用于对实时性要求高的应用场景。
TTCAN接口作为通信服务层的一部分,向上提供标准化的接口给上层协议(如PDU路由器),向下通过TTCAN驱动与TTCAN控制器交互。它管理TTCAN任务列表,协调时间触发的消息发送和接收,并提供错误处理机制。
1.2 功能概览
TTCAN接口提供以下主要功能:
- 时间触发通信: 根据预定义的时间表执行消息传输,确保通信的确定性
- 任务列表管理: 维护并执行包含发送和接收任务的任务列表
- 主从同步: 支持主节点和从节点模式,实现网络时间同步
- 错误检测与处理: 提供多级错误检测和处理机制
- 时间标记触发: 支持基于时间的事件触发
- 配置灵活性: 提供丰富的配置选项适应不同应用场景
2. 架构
2.1 模块架构
TTCAN接口在AUTOSAR通信栈中的位置及其内部结构如下图所示:
类 TTCAN接口:
- 功能: 提供TTCAN控制器访问接口,管理TTCAN任务列表,支持时间触发通信,处理错误和状态转换
- 关键组件:
- TTCAN任务列表:
- 描述: 存储和管理时间触发的发送和接收任务
- 功能: 按照时间顺序排列任务,确保消息按预定时间发送和接收
- 实现: 通过任务列表执行函数
CanIf_TTJobListExec_<Controller>
定期执行
- TTCAN状态机:
- 描述: 管理TTCAN接口的运行状态
- 功能: 控制接口的初始化、启动、停止和睡眠等状态转换
- 实现: 通过
CanIf_SetControllerMode
函数切换状态
- TTCAN任务列表:
层 应用层:
- 范围: 包含应用软件组件和上层通信协议
- 功能: 提供应用功能,使用下层通信服务
层 服务层:
- 范围: 包含PDU路由器和COM模块
- 功能: 管理协议数据单元的路由和通信服务
层 通信服务层:
- 范围: 包含TTCAN接口和CAN接口
- 功能: 提供标准化的通信接口服务
层 MCAL层:
- 范围: 包含TTCAN驱动和CAN驱动
- 功能: 提供对硬件的抽象和直接控制
层 硬件抽象层:
- 范围: 包含TTCAN控制器和CAN控制器
- 功能: 硬件设备的抽象表示
关系 上层通信协议–PDU路由器:
- 上层协议通过PDU路由器访问通信服务
- 上层协议依赖PDU路由器进行消息路由
关系 PDU路由器–TTCAN接口:
- PDU路由器通过标准接口使用TTCAN服务
- PDU路由器传递应用数据给TTCAN接口
关系 TTCAN接口–TTCAN驱动:
- TTCAN接口调用TTCAN驱动函数访问硬件
- TTCAN接口依赖TTCAN驱动实现硬件控制
以下是TTCAN接口与TTCAN驱动的交互代码示例:
/* TTCAN接口初始化 */
Std_ReturnType CanIf_Init(const CanIf_ConfigType* ConfigPtr)
{Std_ReturnType result = E_OK;/* 参数检查 */if (ConfigPtr == NULL) {#if (CANIF_DEV_ERROR_DETECT == STD_ON)Det_ReportError(CANIF_MODULE_ID, CANIF_INSTANCE_ID, CANIF_INIT_API_ID, CANIF_E_PARAM_POINTER);#endifreturn E_NOT_OK;}/* 保存配置指针 */CanIf_ConfigDataPtr = ConfigPtr;/* 初始化TTCAN驱动 */result = CanTTDrv_Init(ConfigPtr->CanTTDrvConfig);/* 初始化状态机 */for (uint8 controllerId = 0; controllerId < CANIF_MAX_CONTROLLER; controllerId++) {CanIf_ControllerState[controllerId] = CANIF_CS_STOPPED;}return result;
}
2.2 与其他模块的关系
TTCAN接口与其他AUTOSAR模块的关系如下:
-
与PDU路由器(PduR)的关系:
- PDU路由器调用TTCAN接口发送消息
- TTCAN接口在接收消息时通知PDU路由器
- PDU路由器负责消息的路由和分发
-
与TTCAN驱动的关系:
- TTCAN接口调用TTCAN驱动实现对硬件的控制
- TTCAN驱动向TTCAN接口提供硬件状态和事件通知
- TTCAN接口封装TTCAN驱动的复杂性,提供标准化接口
-
与操作系统(OS)的关系:
- 任务列表执行函数通常由操作系统调度
- 回调函数在中断上下文或任务上下文中执行
-
与上层应用的关系:
- 上层应用通过PDU路由器间接使用TTCAN接口
- 上层应用可以配置TTCAN接口的行为
3. 状态机
3.1 TTCAN接口状态
TTCAN接口的状态机定义了模块的生命周期和运行状态,如下图所示:
状态 UNINIT (未初始化):
- 描述: 模块尚未初始化,不能处理任何请求
- 进入条件: 系统上电或复位后
- 退出条件: 调用
CanIf_Init()
函数 - 行为限制: 此状态下除初始化外的所有API调用都会返回错误
状态 STOPPED (已停止):
- 描述: 控制器已初始化但未激活,可以配置控制器但不能发送/接收数据
- 进入条件:
- 从UNINIT状态调用
CanIf_Init()
- 从STARTED状态调用
CanIf_SetControllerMode(STOPPED)
- 从SLEEP状态调用
CanIf_SetControllerMode(STOPPED)
- 从UNINIT状态调用
- 退出条件:
- 调用
CanIf_SetControllerMode(STARTED)
进入STARTED状态
- 调用
- 行为限制: 此状态下不能发送或接收CAN消息
状态 STARTED (已启动):
- 描述: 控制器完全激活,可以发送和接收数据,任务列表正在执行
- 进入条件:
- 从STOPPED状态调用
CanIf_SetControllerMode(STARTED)
- 从SLEEP状态调用
CanIf_SetControllerMode(STARTED)
- 从STOPPED状态调用
- 退出条件:
- 调用
CanIf_SetControllerMode(STOPPED)
进入STOPPED状态 - 调用
CanIf_SetControllerMode(SLEEP)
进入SLEEP状态
- 调用
- 行为特性: 此状态下可以正常发送和接收CAN消息
状态 SLEEP (睡眠模式):
- 描述: 控制器处于低功耗状态,通信暂停,唤醒条件激活
- 进入条件: 从STARTED状态调用
CanIf_SetControllerMode(SLEEP)
- 退出条件:
- 调用
CanIf_SetControllerMode(STARTED)
进入STARTED状态 - 调用
CanIf_SetControllerMode(STOPPED)
进入STOPPED状态 - 总线唤醒事件触发时自动进入STARTED状态
- 调用
- 行为限制: 此状态下不能发送或接收CAN消息,但可以响应唤醒事件
以下是状态转换的代码示例:
/* TTCAN接口状态转换函数 */
Std_ReturnType CanIf_SetControllerMode(uint8 ControllerId, CanIf_ControllerModeType ControllerMode)
{Std_ReturnType result = E_NOT_OK;/* 参数检查 */if (ControllerId >= CANIF_MAX_CONTROLLER) {#if (CANIF_DEV_ERROR_DETECT == STD_ON)Det_ReportError(CANIF_MODULE_ID, CANIF_INSTANCE_ID, CANIF_SETCONTROLLERMODE_API_ID, CANIF_E_PARAM_CONTROLLER);#endifreturn E_NOT_OK;}/* 获取当前状态 */CanIf_ControllerModeType currentMode = CanIf_ControllerState[ControllerId];/* 状态转换处理 */switch (ControllerMode) {case CANIF_CS_STARTED:if (currentMode == CANIF_CS_STOPPED || currentMode == CANIF_CS_SLEEP) {/* 调用驱动启动控制器 */result = CanTTDrv_SetControllerMode(ControllerId, CANTTDRV_CS_STARTED);if (result == E_OK) {CanIf_ControllerState[ControllerId] = CANIF_CS_STARTED;}}break;case CANIF_CS_STOPPED:if (currentMode == CANIF_CS_STARTED || currentMode == CANIF_CS_SLEEP) {/* 调用驱动停止控制器 */result = CanTTDrv_SetControllerMode(ControllerId, CANTTDRV_CS_STOPPED);if (result == E_OK) {CanIf_ControllerState[ControllerId] = CANIF_CS_STOPPED;}}break;case CANIF_CS_SLEEP:if (currentMode == CANIF_CS_STARTED) {/* 调用驱动进入睡眠模式 */result = CanTTDrv_SetControllerMode(ControllerId, CANTTDRV_CS_SLEEP);if (result == E_OK) {CanIf_ControllerState[ControllerId] = CANIF_CS_SLEEP;}}break;default:#if (CANIF_DEV_ERROR_DETECT == STD_ON)Det_ReportError(CANIF_MODULE_ID, CANIF_INSTANCE_ID, CANIF_SETCONTROLLERMODE_API_ID, CANIF_E_PARAM_CONTROLLERMODE);#endifbreak;}return result;
}
3.2 主从模式状态
在STARTED状态下,TTCAN接口根据配置和网络状态,可以处于以下主从模式状态之一:
状态 IDLE (空闲):
- 描述: 控制器已启动但尚未确定主从角色
- 进入条件: TTCAN控制器初次进入STARTED状态
- 退出条件: 根据配置自动进入MASTER或SLAVE状态
- 行为特性: 此状态下可以通信但未建立时间同步
状态 MASTER (主节点):
- 描述: 控制器作为时间主节点,负责发送参考消息
- 进入条件:
- 从IDLE状态根据配置自动进入
- 从SLAVE状态检测到无主节点或成为更高优先级的主节点
- 退出条件: 检测到更高优先级的主节点时进入SLAVE状态
- 行为特性: 发送参考消息,维护网络时间同步
状态 SLAVE (从节点):
- 描述: 控制器作为时间从节点,接收参考消息并同步
- 进入条件:
- 从IDLE状态根据配置自动进入
- 从MASTER状态检测到更高优先级的主节点
- 退出条件: 检测到无主节点且自身配置为可成为主节点时进入MASTER状态
- 行为特性: 接收参考消息,维持与主节点的时间同步
主从模式状态转换的代码示例:
/* 主从状态更新函数 */
void CanIf_UpdateMasterSlaveState(uint8 ControllerId, CanIf_TTMasterStateType NewState)
{/* 获取当前状态 */CanIf_TTMasterStateType currentState = CanIf_TTMasterState[ControllerId];/* 仅在状态变化时处理 */if (currentState != NewState) {/* 更新状态 */CanIf_TTMasterState[ControllerId] = NewState;/* 状态变化通知回调 */#if (CANIF_TT_MASTER_STATE_CHANGE_CALLBACK == STD_ON)CanIf_TTMasterStateChange(ControllerId, currentState, NewState);#endif/* 特定状态处理 */switch (NewState) {case CANIF_TT_MASTER_STATE_ACTIVE:/* 激活主节点时钟源 */CanIf_TTActivateMasterClock(ControllerId);break;case CANIF_TT_MASTER_STATE_PASSIVE:/* 同步到主节点时钟 */CanIf_TTSynchronizeToClock(ControllerId);break;default:/* 其他状态处理 */break;}}
}
4. 通信机制
4.1 数据传输流程
TTCAN接口的数据传输流程如下图所示:
序列图元素解释:
参与者 上层协议(PDU Router):
- 角色: 负责消息的路由和分发
- 职责: 向下发送消息,接收来自下层的消息通知,并传递给上层应用
- 位置: 在AUTOSAR通信栈的应用层与TTCAN接口之间
参与者 TTCAN接口:
- 角色: 实现时间触发CAN通信功能
- 职责: 提供时间触发通信服务,管理任务列表,协调消息发送和接收
- 位置: 在BSW层,位于PDU路由器和TTCAN驱动之间
参与者 TTCAN任务列表执行函数:
- 角色: 负责执行TTCAN任务列表
- 职责: 按照时间顺序执行任务列表中的任务
- 位置: TTCAN接口内部
参与者 TTCAN驱动:
- 角色: 直接与TTCAN控制器交互
- 职责: 提供硬件抽象,实现对TTCAN控制器的访问
- 位置: 在MCAL层,位于TTCAN接口和TTCAN控制器之间
参与者 TTCAN控制器:
- 角色: 硬件设备
- 职责: 实现TTCAN协议的硬件功能
- 位置: 在硬件层
消息 CanIf_Init():
- 目的: 初始化TTCAN接口
- 参数: 配置指针
- 返回值: 初始化状态(E_OK/E_NOT_OK)
- 含义: 初始化TTCAN接口,准备通信
消息 CanTTDrv_Init():
- 目的: 初始化TTCAN驱动
- 参数: 驱动配置指针
- 返回值: 初始化状态
- 含义: 初始化TTCAN驱动,配置TTCAN控制器
消息 CanIf_Transmit():
- 目的: 发送CAN消息
- 参数: TxPduId(发送PDU标识符),PduInfoPtr(PDU信息指针)
- 返回值: 发送状态(E_OK/E_NOT_OK)
- 含义: 请求发送CAN消息
4.2 发送与接收过程
以下是TTCAN接口的发送和接收过程的详细说明:
-
发送流程:
- 上层协议(PDU Router)调用
CanIf_Transmit(TxPduId, PduInfoPtr)
请求发送消息 - TTCAN接口将消息添加到任务列表中
- 当达到预定的发送时间时,TTCAN任务列表执行函数触发发送
- TTCAN接口调用
<User_TriggerTransmit>(TxPduId, PduInfoPtr)
获取最新数据 - TTCAN接口调用TTCAN驱动的
CanTTDrv_Transmit(TxPduId, PduInfoPtr)
函数发送消息 - TTCAN驱动将消息写入TTCAN控制器进行发送
- 上层协议(PDU Router)调用
-
接收流程:
- TTCAN控制器接收到消息时,触发接收中断
- TTCAN驱动调用TTCAN接口的
CanIf_RxIndication(RxPduId, PduInfoPtr)
函数 - TTCAN接口将接收任务记录到任务列表中
- TTCAN任务列表执行函数处理接收任务
- TTCAN接口调用PDU Router的
CanIf_RxIndication(RxPduId, PduInfoPtr)
函数 - PDU Router将消息传递给上层应用
-
错误处理流程:
- 当TTCAN控制器检测到错误时,触发错误中断
- TTCAN驱动调用TTCAN接口的
CanIf_TTTimingError(Controller, ErrorType)
函数 - TTCAN接口进行错误处理,并根据需要通知上层应用
4.3 任务列表执行
TTCAN接口的任务列表执行是时间触发CAN通信的核心机制,其工作原理如下:
-
任务列表结构:
- 任务列表包含按时间顺序排列的发送和接收任务
- 每个任务包含时间信息、PDU标识符和操作类型
-
任务列表初始化:
- 在系统初始化时,TTCAN接口通过
CanIf_Init()
函数初始化任务列表 - 根据配置信息构建任务列表
- 在系统初始化时,TTCAN接口通过
-
任务列表执行:
- 操作系统定期调用
CanIf_TTJobListExec_<Controller>
函数 - 任务列表执行函数检查当前时间,执行到期的任务
- 执行发送任务时,获取最新数据并发送
- 执行接收任务时,处理接收到的消息
- 操作系统定期调用
-
时间同步:
- 在主节点模式下,TTCAN接口负责发送参考消息,维护网络时间
- 在从节点模式下,TTCAN接口接收参考消息,同步本地时间
以下是任务列表执行函数的代码示例:
/* TTCAN任务列表执行函数 */
void CanIf_TTJobListExec_0(uint8 ControllerId)
{/* 获取当前控制器时间 */CanIf_TTTimeType currentTime;CanIf_TTGetControllerTime(ControllerId, ¤tTime);/* 获取任务列表 */const CanIf_TTJobListType* jobList = &CanIf_TTJobList[ControllerId];/* 遍历任务列表,执行到期的任务 */for (uint16 i = 0; i < jobList->JobCount; i++) {const CanIf_TTJobType* job = &jobList->Jobs[i];/* 检查任务是否到期 */if (currentTime >= job->ExecutionTime && !job->IsExecuted) {/* 根据任务类型执行操作 */switch (job->JobType) {case CANIF_TT_JOB_TX:/* 执行发送任务 */CanIf_TTExecuteTxJob(ControllerId, job);break;case CANIF_TT_JOB_RX:/* 执行接收任务 */CanIf_TTExecuteRxJob(ControllerId, job);break;case CANIF_TT_JOB_TIME_MARK:/* 执行时间标记任务 */CanIf_TTExecuteTimeMarkJob(ControllerId, job);break;default:/* 未知任务类型 */break;}/* 标记任务已执行 */CanIf_TTMarkJobExecuted(ControllerId, i);}}
}---## 5. 配置结构### 5.1 主要配置类TTCAN接口的配置结构如下图所示:TTCAN接口的主要配置类包括:类 CanIfTTGeneral:
- 功能: 包含TTCAN接口的全局配置参数,如主从模式设置、回调函数等
- 关键属性:- CanIfTTMasterEnable:- 描述: 控制是否启用主节点模式- 类型: boolean- 取值范围: TRUE/FALSE- 默认值: FALSE- 约束: 当设置为TRUE时,节点可以成为时间主节点- CanIfTTSlavesEnable:- 描述: 控制是否启用从节点模式- 类型: boolean- 取值范围: TRUE/FALSE- 默认值: FALSE- 约束: 当设置为TRUE时,节点可以作为时间从节点- CanIfTTJobListExecutionFunction:- 描述: 任务列表执行函数- 类型: function- 取值范围: 函数指针- 约束: 必须指向有效的任务列表执行函数- CanIfTTMainFunctionPeriod:- 描述: 主函数周期时间- 类型: float- 取值范围: 正浮点数- 默认值: 无默认值,必须在配置时指定- 约束: 必须大于0- CanIfTTWatchdogTimeout:- 描述: 看门狗超时时间- 类型: float- 取值范围: 正浮点数- 默认值: 无默认值,必须在配置时指定- 约束: 必须大于0类 CanIfTTDemEventParameterRefs:
- 功能: 定义与诊断事件管理器(DEM)相关的参数引用
- 关键属性:- CanIfTTClockDriftLimit:- 描述: 时钟漂移限制事件参数引用- 类型: reference- 取值范围: 有效的DEM事件ID- CanIfTTMissedStartOfCycle:- 描述: 错过周期开始事件参数引用- 类型: reference- 取值范围: 有效的DEM事件ID- CanIfTTMasterSlaveShift:- 描述: 主从切换事件参数引用- 类型: reference- 取值范围: 有效的DEM事件ID类 CanIfTTTxFrameTriggering:
- 功能: 定义发送帧的触发配置,包括起始时间、周期和优先级等
- 关键属性:- CanIfTTTxPduId:- 描述: 发送PDU标识符- 类型: integer- 取值范围: 非负整数- 约束: 必须唯一- CanIfTTTxUserTriggerTransmit:- 描述: 用户触发发送函数- 类型: function- 取值范围: 函数指针- CanIfTTTxStartTime:- 描述: 发送起始时间- 类型: integer- 取值范围: 非负整数- 约束: 必须在周期时间范围内- CanIfTTTxCycleTime:- 描述: 发送周期时间- 类型: integer- 取值范围: 正整数- 约束: 必须大于0类 CanIfTTRxFrameTriggering:
- 功能: 定义接收帧的触发配置,包括起始时间、周期和时间窗口等
- 关键属性:- CanIfTTRxPduId:- 描述: 接收PDU标识符- 类型: integer- 取值范围: 非负整数- 约束: 必须唯一- CanIfTTRxStartTime:- 描述: 接收起始时间- 类型: integer- 取值范围: 非负整数- 约束: 必须在周期时间范围内- CanIfTTRxCycleTime:- 描述: 接收周期时间- 类型: integer- 取值范围: 正整数- 约束: 必须大于0### 5.2 配置参数TTCAN接口支持多种配置参数,以适应不同的应用场景:1. **同步模式参数**:- CANIF_TT_SYNC_MODE_DISABLE: 禁用同步模式- CANIF_TT_SYNC_MODE_AUTO: 自动选择主从模式- CANIF_TT_SYNC_MODE_MASTER: 强制作为主节点- CANIF_TT_SYNC_MODE_SLAVE: 强制作为从节点2. **主节点状态**:- CANIF_TT_MASTER_STATE_IDLE: 空闲状态- CANIF_TT_MASTER_STATE_INIT: 初始化状态- CANIF_TT_MASTER_STATE_ACTIVE: 活动状态- CANIF_TT_MASTER_STATE_PASSIVE: 被动状态3. **错误级别**:- CANIF_TT_ERROR_LEVEL_S0: 无错误- CANIF_TT_ERROR_LEVEL_S1: 轻微错误- CANIF_TT_ERROR_LEVEL_S2: 中等错误- CANIF_TT_ERROR_LEVEL_S3: 严重错误4. **时间源类型**:- CANIF_TT_TIME_SOURCE_EXTERNAL: 外部时间源- CANIF_TT_TIME_SOURCE_INTERNAL: 内部时间源配置示例代码:```c
/* TTCAN接口配置结构 */
typedef struct {boolean CanIfTTMasterEnable; /* 启用主节点模式 */boolean CanIfTTSlavesEnable; /* 启用从节点模式 */void (*CanIfTTJobListExecutionFunction)( /* 任务列表执行函数 */uint8 ControllerId);float32 CanIfTTMainFunctionPeriod; /* 主函数周期时间 */float32 CanIfTTWatchdogTimeout; /* 看门狗超时时间 */void (*CanIfTTTimingErrorCallback)( /* 时序错误回调函数 */uint8 ControllerId,CanIf_TTTimingErrorIRQType Error);void (*CanIfTTSevereErrorCallback)( /* 严重错误回调函数 */uint8 ControllerId,CanIf_TTSevereErrorEnumType Error);void (*CanIfTTGapCallback)( /* 间隙回调函数 */uint8 ControllerId);void (*CanIfTTStartOfCycleCallback)( /* 周期开始回调函数 */uint8 ControllerId);
} CanIfTTGeneral;/* TTCAN接口发送帧触发配置 */
typedef struct {uint16 CanIfTTTxPduId; /* 发送PDU标识符 */Std_ReturnType (*CanIfTTTxUserTriggerTransmit)( /* 用户触发发送函数 */PduIdType TxPduId,PduInfoType* PduInfoPtr);uint32 CanIfTTTxStartTime; /* 发送起始时间 */uint32 CanIfTTTxCycleTime; /* 发送周期时间 */uint8 CanIfTTTxCycleCountMax; /* 最大周期计数 */boolean CanIfTTTxIsTimeMark; /* 是否为时间标记 */uint8 CanIfTTTxPriority; /* 发送优先级 */
} CanIfTTTxFrameTriggering;/* 初始化配置示例 */
const CanIfTTGeneral CanIfTTGeneralConfig = {.CanIfTTMasterEnable = TRUE,.CanIfTTSlavesEnable = TRUE,.CanIfTTJobListExecutionFunction = CanIf_TTJobListExec_0,.CanIfTTMainFunctionPeriod = 0.001f, /* 1ms */.CanIfTTWatchdogTimeout = 0.01f, /* 10ms */.CanIfTTTimingErrorCallback = CanIf_TTTimingError,.CanIfTTSevereErrorCallback = CanIf_TTSevereError,.CanIfTTGapCallback = CanIf_TTGap,.CanIfTTStartOfCycleCallback = CanIf_TTStartOfCycle
};
6. API接口
6.1 核心功能接口
TTCAN接口的核心功能接口包括:
- CanIf_Init(): 初始化TTCAN接口
- CanIf_SetControllerMode(): 设置TTCAN接口的控制器模式
- CanIf_TTJobListExec_: 执行TTCAN任务列表
6.2 回调接口
TTCAN接口的回调接口包括:
- CanIf_ControllerModeIndication(): 通知TTCAN接口控制器模式变化
- CanIf_TTMasterStateChange(): 通知TTCAN接口主从模式状态变化
7. 错误处理
7.1 错误分类
TTCAN接口的错误分类包括:
- 参数错误: 输入参数无效
- 运行时错误: 在运行过程中发生的错误
- 系统错误: 系统级错误
7.2 错误处理机制
TTCAN接口的错误处理机制包括:
- 错误检测: 在API调用时进行参数检查
- 错误报告: 通过
Det_ReportError()
函数报告错误 - 错误恢复: 根据错误类型采取相应的恢复措施
8. 总结
ack = CanIf_TTGap,
.CanIfTTStartOfCycleCallback = CanIf_TTStartOfCycle
};
---## 6. API接口### 6.1 核心功能接口TTCAN接口的核心功能接口包括:- **CanIf_Init()**: 初始化TTCAN接口
- **CanIf_SetControllerMode()**: 设置TTCAN接口的控制器模式
- **CanIf_TTJobListExec_<Controller>**: 执行TTCAN任务列表### 6.2 回调接口TTCAN接口的回调接口包括:- **CanIf_ControllerModeIndication()**: 通知TTCAN接口控制器模式变化
- **CanIf_TTMasterStateChange()**: 通知TTCAN接口主从模式状态变化---## 7. 错误处理### 7.1 错误分类TTCAN接口的错误分类包括:- **参数错误**: 输入参数无效
- **运行时错误**: 在运行过程中发生的错误
- **系统错误**: 系统级错误### 7.2 错误处理机制TTCAN接口的错误处理机制包括:- **错误检测**: 在API调用时进行参数检查
- **错误报告**: 通过`Det_ReportError()`函数报告错误
- **错误恢复**: 根据错误类型采取相应的恢复措施---## 8. 总结TTCAN接口作为通信服务层的一部分,提供了基于时间触发的确定性通信机制,适用于对实时性要求高的应用场景。它管理TTCAN任务列表,协调时间触发的消息发送和接收,并提供错误处理机制。通过TTCAN接口,上层协议可以方便地使用时间触发通信服务,而无需了解底层的硬件细节。