Osek网络管理及ETAS实现

OSEK/VDX(Offene Systeme und deren Schnittstellen für die Elektronik in Kraftfahrzeugen / Vehicle Distributed eXecutive)是一种用于嵌入式系统(尤其是汽车电子控制单元)的开放标准。它旨在提供一种统一、可互操作的软件架构,以简化嵌入式系统开发和集成。


1. OSEK/VDX简介
   1.1. 背景与目标
   1.2. 标准的组成部分
   1.3. OSEK/VDX与AUTOSAR的关系

2. OSEK操作系统 (OS)
   2.1. 任务管理
       2.1.1. 任务状态与切换
       2.1.2. 任务调度策略
   2.2. 事件管理
   2.3. 资源管理
   2.4. 闹钟与计时器
   2.5. 中断管理
   2.6. 错误处理与诊断

3. OSEK通信 (COM)
   3.1. 消息传递
       3.1.1. 点对点通信
       3.1.2. 广播通信
   3.2. 消息队列与缓冲区
   3.3. 通信对象与通信属性
   3.4. 错误处理与诊断

4. OSEK网络管理 (NM)
   4.1. 网络管理概述
   4.2. 节点状态与转换
   4.3. 总线通信与仲裁
   4.4. 诊断与错误处理

5. OSEK实时操作系统扩展 (ORTI)
   5.1. ORTI简介
   5.2. 实时数据监视与调试
   5.3. 系统跟踪与性能分析

6. OSEK开发工具与实践
   6.1. OSEK/VDX兼容操作系统
   6.2. 集成开发环境 (IDE)
   6.3. 模型驱动开发与代码生成
   6.4. 测试与验证工具
   6.5. 案例分析与经验分享


1. OSEK/VDX简介

1.1 背景与目标


   OSEK/VDX是一个针对汽车电子控制单元(ECU)的开放系统及其接口标准。它起源于欧洲,由德国、法国和意大利的汽车制造商和供应商共同发起,最初于1993年成立。其主要目标是为汽车电子系统提供一个通用、可扩展和可重用的软件架构,以降低开发成本、提高互操作性,从而更好地满足汽车行业的需求。

1.2 标准的组成部分


   OSEK/VDX标准主要包含以下四个组成部分:
   - OSEK操作系统 (OS):针对嵌入式系统的实时操作系统,提供任务管理、事件管理、资源管理、闹钟与计时器、中断管理等功能。
   - OSEK通信 (COM):负责ECU之间的通信,提供消息传递、消息队列和缓冲区管理等功能。
   - OSEK网络管理 (NM):负责管理嵌入式网络中的节点和通信,包括节点状态管理、总线通信和诊断等功能。
   - OSEK实时操作系统扩展 (ORTI):提供实时数据监视、调试、系统跟踪和性能分析等功能,以支持开发人员更高效地开发和维护OSEK系统。

1.3 OSEK/VDX与AUTOSAR的关系


   AUTOSAR(AUTomotive Open System ARchitecture)是一种更先进、更全面的汽车软件架构,起源于2003年。它继承了OSEK/VDX的理念,同时引入了更多先进的技术和方法,例如模型驱动开发、组件化架构和运行时环境等。尽管AUTOSAR已经成为汽车软件开发的主流标准,但OSEK/VDX仍然在某些场景下被使用,特别是在资源受限的嵌入式系统中。在学习OSEK/VDX时,了解两者之间的关系和差异有助于更好地理解这些技术的发展脉络和应用范围。

2. OSEK操作系统(OS)

2.1 任务管理

任务(Task)是OSEK操作系统中的基本执行单元。任务可以理解为一个具有特定功能的程序片段。任务管理主要包括任务的创建、删除、状态切换和调度策略等。

2.1.1 任务状态与切换

OSEK操作系统中的任务可以处于以下状态:就绪(READY)、运行(RUNNING)、挂起(SUSPENDED)和等待(WAITING)。任务在执行过程中可能会根据触发条件和调度策略在不同状态之间切换。

2.1.2 任务调度策略

OSEK操作系统支持两种任务调度策略:非抢占式调度和抢占式调度。非抢占式调度下,当前运行的任务不会被其他任务打断,只有在当前任务主动释放处理器或完成执行后,其他任务才能被调度。而抢占式调度允许高优先级的任务打断正在运行的低优先级任务,从而提高实时性。

2.2 事件管理

事件(Event)是OSEK操作系统中用于实现任务间同步和通信的机制。一个任务可以等待一个或多个事件的发生,而其他任务或中断服务例程可以触发这些事件。

2.3 资源管理

资源(Resource)是OSEK操作系统中用于实现任务间互斥访问共享数据或设备的机制。通过获取和释放资源,任务可以确保在访问共享数据或设备时不会被其他任务干扰,从而避免数据不一致和竞态条件等问题。

2.4 闹钟与计时器

闹钟(Alarm)和计时器(Counter)是OSEK操作系统中用于实现任务和中断服务例程的定时触发的功能。计时器用于计数和度量时间,而闹钟用于在特定时间点触发任务或中断服务例程。

2.5 中断管理

OSEK操作系统支持两种中断处理方式:分类中断(Category 1)和任务级中断(Category 2)。分类中断类似于传统的硬件中断,其处理过程中不涉及操作系统服务。任务级中断则是通过中断服务例程(ISR)实现,可以调用部分操作系统服务,实现更复杂的中断处理逻辑。

2.6 错误处理与诊断

OSEK操作系统提供了一套错误处理与诊断机制,以便在操作系统运行过程中检测和处理各种错误情况。这些错误可能包括无效的任务或事件ID、资源竞争、堆栈溢出等。当操作系统检测到错误时,会调用一个特殊的错误处理函数(ErrorHook)来处理这些错误。开发人员可以根据需要实现和定制该错误处理函数,以便对错误进行记录、报警或采取其他恢复措施。

3. OSEK通信 (COM)

OSEK通信(COM)是OSEK/VDX标准中负责处理电子控制单元(ECU)之间通信的部分。它提供了一种基于消息传递的通信模型,以支持点对点通信、广播通信、消息队列和缓冲区管理等功能。以下是OSEK通信的主要组成部分:

3.1 消息传递


OSEK通信使用消息(Message)作为通信的基本单元。消息可以在任务、中断服务例程(ISR)和ECU之间传递。OSEK通信支持两种类型的消息传递:

   3.1.1 点对点通信


   点对点通信是一种单播模式,即消息从一个发送方直接传递给一个接收方。这种通信方式适用于需要定向发送消息的场景。

   3.1.2 广播通信


   广播通信是一种多播模式,即消息从一个发送方传递给多个接收方。这种通信方式适用于需要同时通知多个任务或ECU的场景。

3.2 消息队列与缓冲区


为了实现消息的高效传递和存储,OSEK通信支持消息队列和缓冲区管理。根据配置,消息可以在发送方和接收方之间通过零拷贝或拷贝的方式进行传递。此外,消息还可以在发送方和接收方的缓冲区中进行排队,以便在通信链路繁忙或接收方暂时无法处理消息时实现消息的缓存。

3.3 通信对象与通信属性


OSEK通信定义了一系列通信对象(如发送消息、接收消息等)和通信属性(如消息类型、传输模式等),用以描述通信过程中的实体和行为。通过配置这些通信对象和属性,开发人员可以灵活地定义和调整通信模型,以满足不同场景的需求。

3.4 错误处理与诊断


OSEK通信提供了一套错误处理和诊断机制,用于检测和处理通信过程中的各种异常情况,如消息丢失、缓冲区溢出等。当检测到错误时,OSEK通信会调用一个特定的错误处理回调函数(如ErrorHook),以便开发人员采取适当的措施进行恢复。

4. OSEK网络管理 (NM)

OSEK网络管理(NM)是OSEK/VDX标准中负责管理嵌入式网络中节点和通信的部分。它主要用于多节点分布式嵌入式系统中,提供对网络拓扑、节点状态、总线通信及诊断等方面的管理功能。以下是OSEK网络管理的主要组成部分:

4.1 网络管理概述


OSEK网络管理旨在确保分布式嵌入式系统中的各个节点能够协同工作,实现高效、可靠的网络通信。它提供了一套用于节点状态管理、总线通信管理和网络诊断的方法和机制,以支持系统在不同场景下的通信需求。

OSEK NM可以被视为应用层和数据链路层(例如CANIF)之间的适配层。它不仅负责控制应用层消息的通信(根据特定需求),还提供了一个与基本软件模式管理器(BswM)的接口。

在这个架构中,OSEK NM起到了一个协调和管理的作用。它确保了应用层消息在不同节点之间的可靠传输,并在通信过程中实现故障检测和恢复等功能。同时,通过与基本软件模式管理器(BswM)的接口,它还能够实现与其他汽车电子系统的集成和协同工作。

 

  • OSEK NM利用CAN接口(CanIf)提供的服务来发送和接收网络管理(NM)消息。
  • OSEK NM从应用层接收请求,以便管理网络通信。
  • OSEK NM与基本软件模式管理器(BswM)有一个接口,用于控制应用层消息的通信。

在这个架构中,OSEK NM充分利用了CanIf提供的服务来实现NM消息的传输。通过处理来自应用层的请求,OSEK NM可以协调和管理整个网络。此外,它还与BswM进行通信,以确保应用层消息的传输得到有效控制,从而满足汽车电子领域的各种需求。

4.2 节点状态与转换


在OSEK网络管理中,每个节点都有一系列状态,如正常状态、睡眠状态和总线故障状态等。节点可以根据系统的运行条件和通信需求在这些状态之间进行转换。例如,当一个节点在一段时间内没有收到任何通信请求时,它可能会进入睡眠状态以节省能源。另一方面,当一个节点检测到总线故障时,它可能会切换到总线故障状态以避免干扰其他节点的通信。

4.3 总线通信与仲裁


在多节点分布式系统中,总线通信是实现节点间通信的关键部分。OSEK网络管理提供了一套机制来确保总线上的通信能够有效、公平地进行。这包括总线访问仲裁、通信优先级管理和错误检测等功能。通过这些机制,OSEK网络管理可以确保不同节点之间的通信不会相互干扰,同时保持整个网络的高效运行。

4.4 诊断与错误处理


OSEK网络管理提供了一套诊断和错误处理功能,用于检测和处理网络中的各种异常情况,如节点故障、总线故障等。当检测到错误时,OSEK网络管理会采取一定的措施,如切换节点状态、通知其他节点或启动恢复过程等,以尽量减小错误对整个系统的影响。

4.5 OSEK NM的实现

基于ETAS的ISOLAR AB 工具,实现OSEK NM

4.5.1 为OSEK NM创建CDD模块,并将NM消息的PDU路由至CDD

创建NM消息的PDU

❖ 描述

传统上,当执行RTA-BSW配置生成时,所有消息的PDU都会自动创建。然而,如果消息配置为CDD,我们需要手动创建它们。同样,根据默认配置,NM消息通常路由到CanNm(然而,在ISOLAR A/B 7.0.1中,NM Pdus不会自动创建,因此我们需要在两种情况下手动创建它们(使用CanNm或将Osek作为Cdd)。

在这个工作流程中,我们首先需要为OSEK NM创建一个定制开发驱动(CDD)模块。接下来,我们需要手动创建OSEK NM消息的协议数据单元(PDU),因为这些PDUs不会在配置生成时自动创建。我们还需要确保NM消息的PDUs正确路由至CDD模块。

通过这个过程,我们可以确保OSEK NM能够与其他模块(如CanNm或CDD)协同工作,实现网络管理功能。

 

❖ 指南
- 在这里,如图所示,我们删除已存在的NM消息PDU(如果有),并创建连接至CDD的新PDU。
或者,我们可以简单地修改已存在PDU的名称。
❖ 在ISOLAR A/B 7.0.1中的示例
- 在Bsw Modules → Other Modules → EcuC → EcucConfigSet → EcucPduCollection → Pdus中,
为NM消息创建PDU。

根据这个指南,我们可以在配置过程中手动管理NM消息的PDU。首先,删除任何已存在的NM消息PDU。然后,创建与CDD模块连接的新PDU,或者仅修改已存在PDU的名称。通过这个方法,我们可以确保NM消息的PDU正确连接至CDD模块,从而实现OSEK NM与其他模块(如CanNm或CDD)的协同工作。

在ISOLAR A/B 7.0.1中,可以通过导航至Bsw Modules → Other Modules → EcuC → EcucConfigSet → EcucPduCollection → Pdus来手动创建NM消息的PDU。这样,您就可以在汽车电子系统中实现有效的网络管理。

 

从CanIf路由NM Pdus
❖ 描述
所有接收到的消息都通过邮件箱由CanIf处理。然后,这些消息将被分配给相应的Pdus,然后通过这些Pdus路由到上层。在前面的步骤中,已经创建了NM消息的Pdus,但尚未分配。
CanIf还提供了在成功发送消息或接收到消息时调用的服务。Osek利用这些服务来运行网络管理算法。

❖ 指南
- 将NM消息分配给相应的Pdus、服务和与Pdus路由相关的模块。
- 添加Osek NM的头文件。

❖ 在ISOLAR A/B 7.0.1中的示例
- 在Bsw Modules → Com Stack → CanIf → CanIfInitCfg → CanIfRxPduCfgs中:
  o 将NM消息的CanIfRxPduUserRxIndicationUL更改为CDD
  o 将CanIfRxPduUserRxIndicationName设置为CDD可以定义的API名称,以获取接收到的NM消息(本项目中为“Cdd_CanIfRxIndication”)


  o 将创建的Pdus分配给CanIfRxPduRef中的相应NM消息Pdu。


- 在Bsw Modules → Com Stack → CanIf → CanIfInitCfg → CanIfTxPduCfgs中:
  o 将NM消息的CanIfRxPduUserTxConfirmationUL更改为CDD
  o 将CanIfTxPduUserTxConfirmationName设置为CDD可以定义的API名称,以在成功发送消息时获取通知(本项目中为“Cdd_OsekNM_TxConfirmation”)


  o 将创建的Pdus分配给CanIfTxPduRef中的相应NM消息Pdus。


- 在Bsw Modules → Com Stack → CanIf → CanIfPublicCfg → CanIfPublicCddHeaderFile中,添加将在CanIf中包含的OsekNM头文件名称。

 

根据这个指南,我们可以在配置过程中手动分配NM消息的PDU,将其与相应的服务和模块关联。同时,还需要添加Osek NM的头文件。通过这个方法,我们可以确保NM消息的PDU正确路由至CDD模块,从而实现OSEK NM与其他模块(如CanNm或CDD)的协同工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/18836.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Origin如何绘制三维图形?

文章目录 0.引言1.使用矩阵簿窗口2.三维数据转换3.三维绘图4.三维曲面图5.三维XYY图6.三维符号、条状、矢量图7.等高线图 0.引言 因科研等多场景需要,绘制专业的图表,笔者对Origin进行了学习,本文通过《Origin 2022科学绘图与数据》及其配套素…

三分钟教你如何定义自己的ChatGPT

三分钟教你如何定义自己的ChatGPT 成品预览材料准备MyChatGPT自定义AI 成品预览 材料准备 总共有两种方式: 一种是使用自己的OpenAI账号,这种方式是可控性比较强,同时也会有很多问题,比如你需要准备国外的手机号和Visa卡&#x…

Java 动态原理详解

Java 动态代理是一种非常重要的编程技术,它在很多场景下都有着广泛的应用。本文将介绍 Java 动态代理的实现原理,并附上相应的源码,以帮助读者更好地理解和应用这一技术。 一、什么是 Java 动态代理? Java 动态代理是一种在运行时…

在docker上安装运行Python文件

目录 一、在docker中安装python 1.1 输入镜像拉取命令 1.2 查看镜像 1.3 运行 1.4 查看是否成功 1.5 查看python版本 二、运行py文件 2.1准备运行所需文件 2.2 准备文件夹 2.3 大概是这幅模样 2.4 打包上传到服务器上 2.5 构建镜像示例 2.6 查看镜像 2.7 优化镜像的…

Spring MVC自定义拦截器--Spring MVC异常处理

目录 自定义拦截器 什么是拦截器 ● 说明 自定义拦截器执行流程分析图 ● 自定义拦截器执行流程说明 自定义拦截器应用实例 ● 应用实例需求 创建MyInterceptor01 创建FurnHandler类 在 springDispatcherServlet-servlet.xml 配置拦截器 第一种配置方式 第二种配置方…

【Linux】网络---->套接字编程(TCP)

套接字编程TCP TCP的编程流程TCP的接口TCP的代码(单线程、多进程、多线程代码)单线程多进程多线程 TCP的编程流程 TCP的编程流程:大致可以分为五个过程,分别是准备过程、连接建立过程、获取新连接过程、消息收发过程和断开过程。 …

《花雕学AI》ChatGPT 的 Prompt 用法,不是随便写就行的,这 13 种才是最有效的

ChatGPT 是一款基于 GPT-3 模型的人工智能写作工具,它可以根据用户的输入和要求,生成各种类型和风格的文本内容,比如文章、故事、诗歌、对话、摘要等。ChatGPT 的强大之处在于它可以灵活地适应不同的写作场景和目的,只要用户给出合…

MySQL多表查询之连接查询

0. 数据源 /*Navicat Premium Data TransferSource Server : localhost_3306Source Server Type : MySQLSource Server Version : 80016Source Host : localhost:3306Source Schema : tempdbTarget Server Type : MySQLTarget Server Version…

两小时让你全方位的认识文件(一)

想必友友们在生活中经常会使用到各种各样的文件,那么我们是否了解它其中的奥秘呢,今天阿博就带领友友们深入地走入文件🛩️🛩️🛩️ 文章目录 一.为什么使用文件二.什么是文件三.文件的打开和关闭四.文件的顺序读写 一…

时间复杂度

学习《代码随想录》 时间复杂度为什么要引入时间复杂度和空间复杂度?什么是时间复杂度?这个O是什么意思?时间复杂度越低越好? 内存管理什么是内存空间?(C为例)为什么总说C/C更偏向底层&#xff…

T-SQL游标的使用

一.建表 INSERT INTO cloud VALUES( 你 ) INSERT INTO cloud VALUES( 一会看我 ) INSERT INTO cloud VALUES( 一会看云 ) INSERT INTO cloud VALUES( 我觉得 ) INSERT INTO cloud VALUES( 你看我时很远 ) INSERT INTO cloud VALUES( 你看云时很近 ) 二.建立游标 1.游标的一般格…

判断大小端的错误做法

这里不详细讲解大小端的区别,只讲解判断大小端的方法。 1.大端,小端的区别 0x123456 在内存中的存储方式 大端是高字节存放到内存的低地址 小端是高字节存放到内存的高地址 2.大小端的判断 1.错误的做法 int main() {int a0x1234;char c(char)a;if(…

2022年宜昌市网络搭建与应用竞赛样题(三)

网络搭建与应用竞赛样题(三) 技能要求 (总分1000分) 竞赛说明 一、竞赛内容分布 “网络搭建与应用”竞赛共分三个部分,其中: 第一部分:网络搭建及安全部署项目(500分&#xff0…

基于SpringBoot3从零配置SpringDoc

为了方便调试,更好的服务于前后端分离式的工作模式,我们给项目引入Swagger。 系列文章指路👉 系列文章-基于SpringBoot3创建项目并配置常用的工具和一些常用的类 文章目录 1. SpringFox2. SpringDoc2.1 引入依赖2.2 配置文件2.3 语法2.4 使…

PCL学习八:Keypoints-关键点

参考引用 Point Cloud Library黑马机器人 | PCL-3D点云 PCL点云库学习笔记(文章链接汇总) 1. 引言 关键点也称为兴趣点,它是 2D 图像或 3D 点云或曲面模型上,可以通过检测标准来获取的具有稳定性、区别性的点集。从技术上来说,关键…

Microsoft Edge新功能测评体验

Microsoft Edge使用体验 Microsoft Edge是一款现代化的浏览器,它拥有众多功能和强大的性能,为用户带来更加流畅的浏览体验。 Edge最近推出了分屏功能,支持一个窗口同时显示两个选项卡,这可以大大提高生产力和多任务处理能力。 一…

API接口对程序员的帮助有哪些,参考值简要说明

API接口对程序员的帮助有哪些 提高开发效率:通过API接口,程序员能够在不用重复编写代码的情况下,直接获取其他应用程序提供的服务或数据,极大地提高了开发效率。 减少错误率:使用API接口可以避免手动输入数据容易出现…

洛谷P5047 [Ynoi2019 模拟赛] Yuno loves sqrt technology II(离线区间逆序对+莫队二次离线)

题目 给你一个长为n(1<n<1e5)的序列a(0<ai<1e9)&#xff0c; m(1<m<1e5)次询问&#xff0c;每次查询一个区间[l,r]的逆序对数&#xff0c;可离线。 思路来源 登录 - 洛谷 三道经典分块题的更优复杂度解法&[Ynoi2019模拟赛]题解 - 博客 - OldDriverT…

Flutter性能分析工具使用

使用前提 flutter常用的性能分析工具&#xff0c;这些工具都集成在android studio中&#xff0c;基本能满足我们的需求了。在下面介绍的几个工具中&#xff0c;Flutter Performance和Flutter Inspector都能够直接在debug模式下使用&#xff0c;但是DevTools只能在profile模式下…

typescript:熟练掌握typescript

一、简介 TypeScript 教程 | 菜鸟教程 TypeScript (简称:TS)是JavaScript的超集 (JS有的TS 都有)。 TypeScriptType JavaScript (在JS 基础之上&#xff0c;为JS添加了类型支持)。 哔哩哔哩_教程_TypeScript 二、TypeScript为什么要为js增加类型支持&#xff1f; 背景&am…
最新文章