LIN协议栈 AUTOSAR架构下 状态管理

2024-09-05 07:36

本文主要是介绍LIN协议栈 AUTOSAR架构下 状态管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、LIN State Manager 概述

  • 功能 :负责控制 LIN 总线的通信状态,包括切换调度表(仅 LIN 主节点)、处理睡眠和唤醒操作、通知上层新状态等。
  • 约束 :每个 ECU 中最多有一个实例;所有关于调度表的操作仅适用于 LIN 主节点;适用于所有使用 LIN 的汽车领域。
  • 依赖关系 :依赖于 Communication Manager(ComM)和 LIN Interface(LinIf),与操作系统、Default Error Tracer(DET)、Diagnostic Event Manager(DEM)、BSW Mode Manager 等有交互。

二、状态和转换

  • LINSM_UNINIT
  • 定义 :初始状态,在启动时激活,在任何 API 调用之前。
  • 激活条件 :在启动时自动激活,且在任何 API 调用之前保持该状态。
  • LINSM_INIT
  • 定义 :初始化后激活的状态。
  • 进入条件 :当 LinSM_Init 函数被调用时,从任何状态或子状态转换到此状态。
  • 子状态设置 :进入此状态时,所有网络的子状态将转换为 LINSM_NO_COM。
  • 初始化设置 :进入此状态时,将相关全局变量等设置为默认值(复位值)。
  • 默认子状态 :进入此状态时,对于所有网络,子状态 LINSM_NO_COM 将被激活。
  • 与 LinIf 的关系 :LinSM_Init 函数应将每个配置通道的调度类型设置为 NULL_SCHEDULE(仅适用于 LIN 主节点),且在此函数中不应调用 LinIf 的某些 API(如 LinIf_SetTrcvMode)。
  • LINSM_NO_COM
  • 定义 :在初始化后、ComM 模块请求无通信(LIN 主节点)或 LinIf 指示总线睡眠事件(LIN 从节点)时激活的子状态。
  • 状态通知 :进入此状态时,LinSM 模块应通知 ComM 和 BswM(除特殊情况外)关于状态的变化。
  • 特殊情况 :当 LinSM 正在执行 LinSM_Init 函数时,不应进行状态通知。
  • 通信限制 :在此状态下,LinSM 模块不应命令 LinIf 模块为所选网络进行通信,即总线应保持静默。
  • 收发器设置 :进入此状态时,根据 LinSMTransceiverPassiveMode 的值,通过 LinIf_SetTrcvMode 设置收发器为 STANDBY 或 SLEEP(仅当 LinSMTransceiverPassiveMode 为该通道配置时适用)。
  • LINSM_FULL_COM
  • 定义 :允许在 LIN 总线上进行通信的状态,每个网络可独立进入此状态。
  • 状态通知 :进入此状态时,应通知 ComM 和 BswM 关于状态的变化。
  • 收发器设置 :进入此状态时,通过 LinIf_SetTrcvMode 将收发器设置为活动状态(仅当 LinSMTransceiverPassiveMode 为该通道配置时适用)。
  • 子状态进入 :进入此状态时,子状态 LINSM_RUN_COMMUNICATION 将被进入。
  • 睡眠操作(Goto sleep)
  • 主节点 :当状态为 LINSM_FULL_COM 且 ComM 请求 COMM_NO_COMMUNICATION 时,LinSM 应调用 LinIf_GotoSleep 发送睡眠命令。
  • 从节点 :当状态为 LINSM_FULL_COM 且 ComM 请求 COMM_NO_COMMUNICATION 时,LinSM 应存储请求的通信模式并返回 E_OK。
  • 通用规则 :LinSM 模块仅在 LINSM_FULL_COM 和 LINSM_RUN_COMMUNICATION 状态下才可调用 LinIf_GotoSleep API;当 LinSM_GotoSleepConfirmation 被调用且当前状态为 LINSM_FULL_COM/LINSM_GOTOSLEEP 时,LinSM 应将状态设置为 LINSM_NO_COM(与 “success” 参数无关),在其他状态下应忽略该确认;若 LinIf_GotoSleep 返回 E_OK,则 LinSM 应设置子状态为 LINSM_GOTOSLEEP。
  • 唤醒操作(Wake up)
  • 触发条件 :由 ComM 模块通过 LinSM_RequestComMode 请求唤醒或 LIN 节点传输唤醒信号触发。
  • 处理方式 :当 ComM 请求 COMM_FULL_COMMUNICATION 时,LinSM 应直接调用 LinIf_Wakeup 发送唤醒信号(在特定情况下除外),并重置最大重试次数计数器;若 LinIf_Wakeup 返回 E_NOT_OK,LinSM_RequestComMode 应直接返回 E_NOT_OK 且不进行其他操作;当 LinIf 通知唤醒成功发送时,状态应设置为 LINSM_FULL_COM,在其他情况下,状态应设置为与请求前相同的状态。

三、状态管理相关的其他要点

  • 错误分类 :包括开发错误、运行时错误、瞬态故障、生产错误和扩展生产错误。
  • API 规范 :提供了如 LinSM_Init、LinSM_ScheduleRequest、LinSM_GetVersionInfo 等与状态管理相关的 API 函数。
  • 配置规范 :定义了配置参数和其聚类到容器中的方式,LinSM_Configuration 包含 LinSM、LinSMConfigSet、LinSMChannel、LinSMGeneral、LinSMSchedule 等容器和参数,这些配置与状态管理的各种设置和行为相关。

总之,LIN State Manager 通过对这些状态的管理和转换,实现了对 LIN 总线通信状态的精确控制,以满足汽车电子系统中不同场景的需求。

这篇关于LIN协议栈 AUTOSAR架构下 状态管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138339

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp