深入解析AUTOSAR BswM及C/C++源码

版权申诉
1星 1 下载量 8 浏览量 更新于2024-11-05 收藏 962KB ZIP 举报
资源摘要信息:"AUTOSAR BswM介绍,autosar详细介绍,C,C++源码.zip" AUTOSAR(汽车开放系统架构)是一个全球性的工业组织,旨在制定汽车电子软件、硬件和网络架构的标准。该组织的目标是提供一个开放和标准化的汽车软件架构,以促进汽车电子系统的模块化、可重用性和可移植性,同时降低系统的复杂性。BswM是AUTOSAR体系中的一个重要组件,全称为Basic Software Module,它提供了一系列基本软件模块,使得应用层的软件可以轻松地与车辆的硬件进行交互。 ### AUTOSAR BswM(基础软件模块) BswM是AUTOSAR基础软件的一部分,负责管理所有基础软件模块的配置和运行时行为。它是一个静态配置管理器,可以看作是基础软件层中的一个“大脑”,负责控制其他软件模块的启动、停止、参数设置以及状态监控等任务。BswM的职责主要包括: 1. **启动和停止基本软件模块**:在系统启动时,BswM负责初始化整个基础软件架构,并启动所有必要的软件模块。在系统关闭时,负责安全地停止这些模块。 2. **参数化**:BswM可以配置软件模块的参数,允许对系统行为进行微调。 3. **状态管理和诊断**:BswM监测软件模块的状态,并提供诊断信息,以便于问题追踪和故障分析。 4. **通信管理**:负责处理基础软件层与应用层之间的通信请求,包括传递数据和事件。 ### C, C++源码解析 C和C++是编程语言中最常用于嵌入式系统开发的语言,因为它们提供了对硬件的底层控制能力和高效性。在AUTOSAR架构中,C和C++语言被广泛用于实现基础软件模块和应用软件。 - **C语言**:作为基础软件模块的主要实现语言,C语言提供了高效的执行性能和资源利用,同时保持了较好的可移植性。基础软件模块的大部分底层操作,比如硬件抽象层(HAL)的实现,通常采用C语言编写。 - **C++语言**:C++语言在AUTOSAR中主要用于应用层软件的开发。它提供了面向对象的编程能力,可以用来实现更复杂的软件结构,如控制器应用程序。同时,C++也被用于基础软件模块的某些部分,特别是在需要较高抽象层次的模块中。 ### C/C++源码结构和功能 - **模块化设计**:源码通常被设计成模块化,每个模块负责一项特定的功能。这样的设计有助于代码的重用和维护。 - **配置机制**:基础软件模块的配置通常通过XML文件进行,允许用户指定所需的功能和参数。 - **接口定义**:C/C++源码中会定义一系列的API(应用程序编程接口),用于与基础软件模块的交互。 - **数据类型和宏定义**:源码中包含了大量的数据类型定义和宏,用于确保代码的可读性和一致性,同时适应不同硬件平台的需求。 - **实现细节**:具体的功能实现是通过一系列的函数和方法来完成的。在C语言中,这通常是一系列的函数;在C++中,这些可能是成员函数和非成员函数。 ### 开发和调试 在开发和调试基于AUTOSAR的软件时,开发者需要考虑到: - **编译器和开发环境**:需要有支持C和C++语言的编译器,以及集成开发环境(IDE),例如Eclipse或Keil。 - **模拟器和硬件抽象层**:在没有实际硬件的情况下,使用模拟器来测试软件模块的功能。 - **版本控制**:源码通常存放在版本控制系统中,如Git或Subversion,以追踪代码的变更和协同开发。 ### 结论 通过深入研究和理解AUTOSAR BswM的原理、C/C++源码的结构和功能,开发者可以更好地构建符合AUTOSAR标准的嵌入式系统。这不仅能提高软件的可靠性和稳定性,还能满足现代汽车电子系统对软件质量和可维护性的高要求。通过掌握这些知识点,开发者将能够利用标准化的工具和方法来优化汽车电子架构,进而开发出性能优越、安全可靠的汽车电子产品。
2019-09-27 上传
这里的NM主要是针对Can协议的网路管理。 AUTOSAR CanNM的核心思想主要归纳为以下两条: 1.  如果节点需要保持通信,则节点需要周期的发送NMPDUs,否则停止发送NMPDUs 2.     如果总线上的所有节点不需要使用总线,那么总线上过了一段时间没有NMPDUs时,则会进入Bus-Sleep Mode。   工作模式和状态   CanNm一共有三个工作模式 1.  Network Mode 2.  PrepareBus-Sleep Mode 3.  Bus-Sleep Mode 模式的改变应该通过回调函数通知上层。 下面单独说每种模式   (1)Network Mode Network Mode又包括三个内部状态 1. Repeat Message State 2. Normal Operation State 3. Ready Sleep State ①Repeat Message State 这个模式被用来确保从Bus-Sleep or Prepare Bus-Sleep到Network Mode的节点被总线上面其他节点发现。这个状态可以用来检测总线上的节点。 当进入Repeat Message State时,节点应该开始传送NMPDUs。 在Repeat Message State时,当NM-Timeout Timer溢出,CanNm模块应该重载Timer。 CanNm模块应该在Repeat Message State 下保持一段时间,这段时间可以通过CANNM_REPEAT_MESSAGE_TIME来进行配置。 当离开Repeat Message State的时候,如果节点需要通信,则进入Normal Operation State;如果节点不需要通信,则进入Ready Sleep State。并且清空Repeat Message Bit。   ②Normal Operation State 这个状态可以保持总线处于唤醒状态。从Ready sleep state进入这个状态的时候应该发送NMPDUs。 在Normal Operation State当NM-Timeout Timer溢出,CanNm模块应该重载Timer。 如果节点不需要使用通信,则网络应该被释放,节点应该进入Ready Sleep State。 如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。   ③ReadySleep State 这个状态是为了如果本节点已经准备释放总线,而其他节点还需要使用总线的时候,在这个状态下等待其他总线上的节点进入Perpere Bus-Sleep Mode。进入这个状态之后,CanNm模块应该停止NMPDUs的传送。 如果NM-Timeout Timer溢出,节点将会进入Prepare Bus-Sleep Mode。 如果该节点需要使用总线,则节点进入Nomal Operation State。 如果节点接收到Repeat Message Request Bit,则节点进入Repeat Message State。如果节点自身需要进入Repeat Message State,则该节点进入Repeat Message State并且设置Repeat Message Request Bit。 (2)PrepareBus-Sleep Mode   这个状态是为了等待总线上的所有节点能够在进入Bus-Sleep Mode之前,有时间停止节点的active状态如清空队列中为发送的报文。在Prepare Bus –Sleep Mode下,所有节点都静默下来。 当节点进入PrepareBus Mode时,应该通知上层应用。通过配置CANNM_WAIT_BUS_SLEEP_TIME参数,可以改变节点在PrepareBus-Sleep Mode停留的时间,在这段时间之后节点将会进入其他状态。 在Prepare Bus-Sleep Mode下面接收到NMPDU或者被上层应用请求通信时,节点将进入Network Mode中的Normal operation State。   (3)Bus-SleepMode   Bus-Sleep Mode的目的是当没有消息被传送的时候可以减少能量的消耗。在Bus-Sleep Mode下面,节点可以被唤醒(如本地唤醒源和CAN线唤醒源)。CANNM_TIMEOUT_TIME+CANNM_WAIT_BUS_SLEEP_TIME两个参数在整个总线上面的节点都应该时一样的配置,保证了总线上的节点能够统一的进行休眠。 当进入Bus-Sleep Mode时候,应该通知上层应用。 在Bus-Sleep Mode下,如果成功接收到NMPDU,CAN NM模块应该调用Nm_NetworkStartIndication。 如果CanNm_PassiveStartUp被调用,则CAN NM模块进入Network Mode 中的Repeat Message State。 ———————————————— 版权声明:本文为CSDN博主「cococenstar」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/cococenstar/article/details/84096689