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

AUTOSAR进阶图解==>AUTOSAR_SWS_TTCANInterface

AUTOSAR TTCAN接口详解

基于AUTOSAR 4.4.0标准的时间触发CAN接口规范

目录

  1. 概述
    1.1 TTCAN接口简介
    1.2 功能概览
  2. 架构
    2.1 模块架构
    2.2 与其他模块的关系
  3. 状态机
    3.1 TTCAN接口状态
    3.2 主从模式状态
  4. 通信机制
    4.1 数据传输流程
    4.2 任务列表执行
  5. 配置结构
    5.1 主要配置类
    5.2 配置参数
  6. API接口
    6.1 核心功能接口
    6.2 回调接口
  7. 错误处理
    7.1 错误分类
    7.2 错误处理机制
  8. 总结

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函数切换状态

层 应用层:

  • 范围: 包含应用软件组件和上层通信协议
  • 功能: 提供应用功能,使用下层通信服务

层 服务层:

  • 范围: 包含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模块的关系如下:

  1. 与PDU路由器(PduR)的关系

    • PDU路由器调用TTCAN接口发送消息
    • TTCAN接口在接收消息时通知PDU路由器
    • PDU路由器负责消息的路由和分发
  2. 与TTCAN驱动的关系

    • TTCAN接口调用TTCAN驱动实现对硬件的控制
    • TTCAN驱动向TTCAN接口提供硬件状态和事件通知
    • TTCAN接口封装TTCAN驱动的复杂性,提供标准化接口
  3. 与操作系统(OS)的关系

    • 任务列表执行函数通常由操作系统调度
    • 回调函数在中断上下文或任务上下文中执行
  4. 与上层应用的关系

    • 上层应用通过PDU路由器间接使用TTCAN接口
    • 上层应用可以配置TTCAN接口的行为

3. 状态机

3.1 TTCAN接口状态

TTCAN接口的状态机定义了模块的生命周期和运行状态,如下图所示:

在这里插入图片描述

状态 UNINIT (未初始化):

  • 描述: 模块尚未初始化,不能处理任何请求
  • 进入条件: 系统上电或复位后
  • 退出条件: 调用CanIf_Init()函数
  • 行为限制: 此状态下除初始化外的所有API调用都会返回错误

状态 STOPPED (已停止):

  • 描述: 控制器已初始化但未激活,可以配置控制器但不能发送/接收数据
  • 进入条件:
    • 从UNINIT状态调用CanIf_Init()
    • 从STARTED状态调用CanIf_SetControllerMode(STOPPED)
    • 从SLEEP状态调用CanIf_SetControllerMode(STOPPED)
  • 退出条件:
    • 调用CanIf_SetControllerMode(STARTED)进入STARTED状态
  • 行为限制: 此状态下不能发送或接收CAN消息

状态 STARTED (已启动):

  • 描述: 控制器完全激活,可以发送和接收数据,任务列表正在执行
  • 进入条件:
    • 从STOPPED状态调用CanIf_SetControllerMode(STARTED)
    • 从SLEEP状态调用CanIf_SetControllerMode(STARTED)
  • 退出条件:
    • 调用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接口的发送和接收过程的详细说明:

  1. 发送流程

    • 上层协议(PDU Router)调用CanIf_Transmit(TxPduId, PduInfoPtr)请求发送消息
    • TTCAN接口将消息添加到任务列表中
    • 当达到预定的发送时间时,TTCAN任务列表执行函数触发发送
    • TTCAN接口调用<User_TriggerTransmit>(TxPduId, PduInfoPtr)获取最新数据
    • TTCAN接口调用TTCAN驱动的CanTTDrv_Transmit(TxPduId, PduInfoPtr)函数发送消息
    • TTCAN驱动将消息写入TTCAN控制器进行发送
  2. 接收流程

    • TTCAN控制器接收到消息时,触发接收中断
    • TTCAN驱动调用TTCAN接口的CanIf_RxIndication(RxPduId, PduInfoPtr)函数
    • TTCAN接口将接收任务记录到任务列表中
    • TTCAN任务列表执行函数处理接收任务
    • TTCAN接口调用PDU Router的CanIf_RxIndication(RxPduId, PduInfoPtr)函数
    • PDU Router将消息传递给上层应用
  3. 错误处理流程

    • 当TTCAN控制器检测到错误时,触发错误中断
    • TTCAN驱动调用TTCAN接口的CanIf_TTTimingError(Controller, ErrorType)函数
    • TTCAN接口进行错误处理,并根据需要通知上层应用

4.3 任务列表执行

TTCAN接口的任务列表执行是时间触发CAN通信的核心机制,其工作原理如下:

  1. 任务列表结构

    • 任务列表包含按时间顺序排列的发送和接收任务
    • 每个任务包含时间信息、PDU标识符和操作类型
  2. 任务列表初始化

    • 在系统初始化时,TTCAN接口通过CanIf_Init()函数初始化任务列表
    • 根据配置信息构建任务列表
  3. 任务列表执行

    • 操作系统定期调用CanIf_TTJobListExec_<Controller>函数
    • 任务列表执行函数检查当前时间,执行到期的任务
    • 执行发送任务时,获取最新数据并发送
    • 执行接收任务时,处理接收到的消息
  4. 时间同步

    • 在主节点模式下,TTCAN接口负责发送参考消息,维护网络时间
    • 在从节点模式下,TTCAN接口接收参考消息,同步本地时间

以下是任务列表执行函数的代码示例:

/* TTCAN任务列表执行函数 */
void CanIf_TTJobListExec_0(uint8 ControllerId)
{/* 获取当前控制器时间 */CanIf_TTTimeType currentTime;CanIf_TTGetControllerTime(ControllerId, &currentTime);/* 获取任务列表 */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接口配置类图](../image_water/TTCANInterface_ConfigClasses.png)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接口,上层协议可以方便地使用时间触发通信服务,而无需了解底层的硬件细节。
http://www.dtcms.com/a/330198.html

相关文章:

  • 开发避坑指南(25):MySQL不支持带有limit语句的子查询的解决方案
  • 【学习嵌入式day23-Linux编程-文件IO】
  • imx6ull-驱动开发篇22——Linux 时间管理和内核定时器
  • 力扣top100(day02-04)--二叉树 01
  • 18.10 SQuAD数据集实战:5步高效获取与预处理,BERT微调避坑指南
  • 数据分析可视化学习总结(美妆2)
  • Python解包技巧全解析
  • Python 基础语法(一)
  • 多处理器技术:并行计算的基石与架构演进
  • 疯狂星期四文案网第38天运营日记
  • 继《念念有词》后又一作品《双刃》开播 马来西亚新人演员业文Kevin挑战多面角色引期待
  • CF每日3题(1600)
  • element-ui 时间线(timeLine)内容分成左右两侧
  • npm run dev 的作用
  • Unity_2D动画
  • 游戏盾的安全作用
  • RK3568嵌入式音视频硬件编解码4K 60帧 rkmpp FFmpeg7.1 音视频开发
  • Celery+RabbitMQ+Redis
  • Traceroute命令使用大全:从原理到实战技巧
  • IPC Inter-Process Communication(进程间通信)
  • 2小时构建生产级AI项目:基于ViT的图像分类流水线(含数据清洗→模型解释→云API)(第十七章)
  • 基于Supervision工具库与YOLOv8模型的高效计算机视觉任务处理与实践
  • 1.Cursor快速入门与配置
  • Multisim的使用记录
  • GQA:从多头检查点训练广义多查询Transformer模型
  • 蒙以CourseMaker里面的录屏功能真的是完全免费的吗?
  • C#标签批量打印程序开发
  • Redis 键扫描优化:从 KEYS 到 SCAN 的优雅升级
  • Nginx Stream代理绕过网络隔离策略
  • 论文Review 激光SLAM VoxelMap | RAL 2022 港大MARS出品!| 经典平面特征体素激光SLAM