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中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、