Osek网络管理及ETAS实现

news2024/12/24 3:28:22

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.coloradmin.cn/o/500051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于 《python 从入门到实践》的 matplotlib 随机漫步小项目

使用 python 生成随机漫步数据,再使用 matplotlib 将数据呈现。 所谓随机漫步: 每次行走的路径都是完全随机的,就像蚂蚁在晕头转向的情况下,每次都沿随机方向前行路径。 在自然界,物理学,生物学&#xff0…

【Linux】Job for network.service failed(网卡启动报错)

上图是Linux网卡启动报错的情况 这是由于cat/etc/sysconfig/network-scripts/ifcfg-xxx 中HWADDR的MAC地址和ifconfig中的MAC地址不一样,或者缺少cat/etc/sysconfig/network-scripts/ifcfg-xxx 中HWADDR的MAC地址 1.查看ifconfig中的MAC地址 图中00:0c…

【新星计划-2023】IP地址是什么?IP地址的主要功能是什么?

IP地址在生活中是很常见的,我们所使用的手机、电脑等等,都有一个IP地址,那么IP地址是什么?通过IP地址又能干什么?下文就来给大家详细的讲解一下。 一、什么是IP地址 通常我们说的IP地址多数是指互联网中联网的IP地址…

Java 基础进阶篇(十一)—— Arrays 与 Collections 工具类

文章目录 一、Arrays工具类1.1 Arrays 类常用方法1.2 对于 Comparator 比较器的支持1.3 Arrays 的综合应用1.3.1 应用一:数组的降序排序1.3.2 应用二:根据学生年龄进行排序 二、Collections工具类2.1 Collections 类常用方法2.2 Collections 排序相关 AP…

神经网络实验---梯度下降法

本次实验主要目的是掌握梯度下降法的基本原理,能够使用梯度下降法求解一元和多元线性回归问题。 文章目录 目录 文章目录 1. 实验目的 2. 实验内容 3. 实验过程 题目一: 题目二: 题目三: 实验小结&讨论题 1. 实验目的 ① 掌握…

〖Python网络爬虫实战㉓〗- Ajax数据爬取之什么是Ajax

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付…

23.5.7总结(学习通项目思路)

项目思路: 注册:输入邮箱(判重),两次输入密码,获得的正确的验证码,获得不重复的用户名。 登录:输入用户名和密码登录。 忘记密码:输入邮箱(和用户名&#…

RK3588平台开发系列讲解(进程篇)可执行文件内部结构

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、 ELF 文件的两大组成部分二、文件头三、程序头和节区头四、ELF 文件的细节结构沉淀、分享、成长,让自己和他人都能有所收获!😄 📢在 Linux 中,二进制可执行文件的标准格式叫做 ELF(Executable and Linkabl…

ARP协议结构

文章目录 概念ARP协议格式ARP协议的作用ARP协议的工作流程 首先提出一个问题,来理解ARP解决什么问题 已知报文在数据链路层传输的过程中(假设是主机A到主机B),是通过路由器之间的跳转,根据路由表,结合目的…

【论文】SimCLS:一个简单的框架 摘要总结的对比学习(1)

SimCLS:摘要总结的对比学习(1) 写在最前面模型框架 摘要1 简介 写在最前面 SimCLS: A Simple Framework for Contrastive Learning of Abstractive Summarization(2021ACL会议) https://arxiv.org/abs/2106.01890 论文:https://…

【c语言小demo】登录demo | 账号密码验证功能

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

postgresql insert ddl执行流程分析

专栏内容&#xff1a;postgresql内核源码分析个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e; 目录 前言 总体流程 调用堆栈 执行接口说明 详细流程分解 ExecInsert对于普通表…

Java9

Java9 &#xff08;一&#xff09;、stream流1.1 Stream流的中间方法和终结方法 &#xff08;二&#xff09;、方法引用2.1 方法引用的分类 &#xff08;三&#xff09;、异常3.1 编译时异常和运行时异常3.2 异常的作用3.3 异常的处理方式3.4 异常中的常见方法3.5 自定义异常 &…

麒麟设置分辨率

为什么要设置------额。。。。虚拟机启动的&#xff0c;直接满屏了。。。。也不能移动 命令设置法 1、可以通过xrandr命令来设置屏幕分辨率。先查询当前分辨率&#xff0c;及当前支持的分辨率。 xrandr 2、可以通过-s参数来设置为1920x1440 xrandr -s 1920x1440 这就好…

Midjouney prompt优化

Midjouney prompt优化 总述1. Midjouney1.1 常见出图方式1.2 图片参数 2. prompt2.1 prompt关键词框架逻辑2.2 关键词技巧2.3 分类关键词2.3.1 媒体类型、介质和渲染引擎2.3.2 艺术风格2.3.2.1常见风格关键词2.3.2.2 艺术风格介绍2.3.2.3 绘画风格关键词和作品 2.3.3 相机镜头和…

面试官从这些方面考察你的Android开发水平!

View基础(25题) 什么是ViewView的位置参数MotionEventViewRootDecorViewMeasureSpec View三大流程(28题) measure过程ViewViewGrouplayout过程draw过程获取View的宽高Activity启动到加载ViewRoot的流程 自定义View(26题) 四种实现方法直接继承View自定义属性直接继承ViewG…

C++三大特性—继承“复杂的菱形继承及菱形虚拟继承”

C的一个大坑&#xff1a;菱形继承 希望这篇文章能让你理解什么是菱形继承&#xff0c;以及菱形继承的注意事项 单继承与多继承 单继承&#xff1a;一个子类只有一个直接父类时称这个继承关系为单继承 多继承&#xff1a;一个子类有两个或以上直接父类时称这个继承关系为多继承…

【半监督学习】Match系列.2

本文简单介绍半监督算法中的Match系列方法&#xff1a;CoMatch&#xff08;ICCV2021&#xff09;&#xff0c;CRMatch&#xff08;GCPR2021&#xff09;&#xff0c;Dash&#xff08;ICML2021&#xff09;&#xff0c;UPS&#xff08;ICLR2021&#xff09;&#xff0c;SimMatch…

ajax、fetch、axios三者的异同

同&#xff1a;都是发送网络请求 异&#xff1a; 1.ajax ajax是异步的javascript和xml&#xff0c;用于创建快速的动态网页的技术。&#xff08;用js发送异步的网络请求&#xff09; 特点&#xff1a;局部刷新页面&#xff0c;无需重载整个页面。 很多小伙伴会误以为ajax是…

2023年的深度学习入门指南(12) - PEFT与LoRA

2023年的深度学习入门指南(12) - PEFT与LoRA 大家都知道&#xff0c;大模型的训练需要海量的算力。其实&#xff0c;即使是只对大模型做微调训练&#xff0c;也是需要大量的计算资源的。 有没有用更少的计算资源来进行微调的方法呢&#xff1f;研究者研发出了几种被Hugging F…