Adaptive AUTOSAR——State Management(VRTE 3.0 R21-11)

news2024/11/27 22:23:29

状态管理是自适应平台服务中的一个功能集群。

在自适应平台中,状态决定了一组活动的自适应应用程序。

特定于项目的应用程序,即状态管理器,决定何时请求状态更改,从而更改当前活动的应用程序集。状态管理器是特定于项目的,因为AUTOSAR没有对何时更改状态的语义进行标准化。Adaptive Platform通过C++API提供状态更改机制来请求状态更改,序列化功能组的状态更改请求,并在执行管理中管理实际状态转换,从而支持State Manager应用程序。

状态管理功能集群是自适应平台服务的一部分,但从AUTOSAR体系结构的角度来看,它与执行管理密切相关,例如,ara::exec StateClient类支持状态更改请求,并提供已完成状态更改的通知。该类由执行管理而非状态管理提供。

作为一项服务,状态管理使用ara::com面向服务的通信提供对自适应应用程序的访问。状态管理器使用其中一个标准化服务接口提供服务;

TriggerIn_<StateGroup>, TriggerOut_<StateGroup>, or TriggerInOut_<StateGroup>.

服务接口具有用于获取当前状态(Notifier)和请求新状态(Trigger)的字段。

AUTOSAR自适应应用程序可以使用字段对系统状态变化做出反应或影响系统状态。

8.2 Responsibilities

在自适应平台中,状态管理功能集群在两个级别上支持状态更改,从而支持机器内一组活动自适应应用程序的更改:

MachineFG:机器的一般状态,例如STARTUP、RUNNING等。

AUTOSAR定义了许多预定义的MachineFG状态,并且可以根据需要定义其他状态。

功能组状态–机器中项目定义的状态,用于控制(通常是功能性的)相关应用程序实例的执行。

自适应平台内还有第三级状态;实例的执行状态。此状态由应用程序内部管理实例本身,例如使用ReportExecutionState API,因此不受状态管理功能集群的控制。允许的执行状态由AUTOSAR定义,不能扩展。

在功能组状态的每次更改时,自适应平台可以被配置为启动和/或停止一个或多个应用程序实例。当应用程序实例被分配到一个或多个功能组状态时,实例和状态之间的关联发生在执行管理配置期间。

MachineFG是函数组的一种特殊情况。在RTA-VRTE入门套件中,两个状态系统由通用API管理。对于本文档,术语“功能组状态”应理解为包括MachineFG。

当状态管理器对功能组状态更改的请求被功能组状态控制器接受并采取行动时(见图8.2),将考虑每个状态下分配的应用程序实例:

  • 分配给“旧”和“新”状态的实例仍在运行。
  • 未分配到“新”状态的实例将停止。
  • 未分配到“旧”状态的实例将启动。

请注意,不可能将实例同时分配给“旧”和“新”状态。

8.2.1 Management or Manager?

状态管理在自适应平台体系结构中被描述为一个独特的功能集群。然而,国家变化的责任实际上是分开的:

State Manager–负责决定何时更改功能组状态。

State Management-负责处理功能组状态更改,例如当状态管理器请求时以及用于提供请求这样的改变的接口。

根据职责划分,状态管理功能集群在RTA-VRTE入门套件中进行了划分。状态管理职责集成在执行管理中,例如功能组状态控制器(见图8.2),状态管理职责包含在RTA-VRTE入门套件API支持的用户应用程序中,以请求状态更改。

状态管理器应用程序决定何时更改功能组状态。存在哪些功能组和状态以及何时发生状态更改是特定于项目的,因此AUTOSAR没有对其进行标准化。

RTA-VRTE入门套件SK包括一个示例应用程序,其中包括一个简单的示例状态机。

执行管理中的状态管理功能集群的元素支持与用户的状态管理器应用程序的双向通信;

首先,用户应用程序可以请求状态改变并读取功能组的当前状态,其次,状态管理功能集群可以在所请求的功能组状态转换完成时通知状态管理器应用程序。

在执行管理配置期间,当功能集群附属设置为状态管理器时,状态管理器应用程序实例被标记为这样。如果定义了多个状态管理器应用程序实例,则是一个错误。

状态管理器应用程序实例应分配给所有MachineFG状态,以确保它在所有状态下都保持运行——否则,当输入未分配应用程序实例的MachineFG时,它将被执行管理终止。

8.2.2 State Machine

在经典平台中,ECU配置以ECU状态管理器和BSW模式管理器的形式包含ECU内状态管理方式的完整描述。ECU配置描述是高度通用的,能够表达许多不同的状态和启动状态之间转换的条件。然而,通用性是有代价的;配置既复杂又脆弱。

自适应平台采用了不同的方法;平台决定何时在应用程序域中启动状态更改,而不是一般但复杂的描述。因此,用户实现了状态管理器应用程序,该应用程序封装了一个状态机,该状态机决定必要条件何时到位,从而启动状态转换。然而,状态更改是如何发生的,由自适应平台本身通过状态管理提供的API进行管理。

8.2.3 Function Group Control

在RTA-VRTE入门套件中,功能组的创建和控制是执行管理的一个组成部分。

执行管理中的状态管理功能响应来自用户的状态管理器应用程序的状态更改请求。用户的State Manager应用程序包含StateClient类的一个实例,该实例定义了客户端应用程序请求状态更改和读取功能组的当前状态的接口。

用户的State Manager应用程序实例必须这样标记(第4.5.4.5节)。这在State Manager和Execution Management之间建立了链接。如果不这样做,那么状态更改请求将导致错误。

响应来自状态管理器的功能组状态更改请求,状态管理功能集群通过与执行管理中的流程控制交互启动或停止应用程序实例。一旦状态更改完成,它们将通过SetState API返回的Future通知给用户的state Manager应用程序。

 

 8.3 Application Access

AUTOSAR状态管理API由StateClient的一个实例提供。在RTA-VRTE Starter Kit中,此类是执行管理的一个组成部分,因此位于ara::exec命名空间中。

使用ISOLAR VRTE创建新的功能组和状态,请参见第4.4.3节。

然后在执行管理配置期间访问功能组/状态,例如,将进程分配给状态。然后,组和状态是执行管理基于FlatCFG数据的配置的一部分,请参见第4.10.1节。

一旦创建了函数组或函数组状态,并且该状态是基于FlatCFG数据的配置的一部分,应用程序就可以使用FunctionGroup和FunctionGroupState类的实例对其进行访问。

8.3.1 Function Group

功能组,包括预定义的MachineFG功能组,在执行管理配置期间使用ISOLAR VRTE进行配置。

实例化FunctionGroup首先需要通过调用Create函数来获得构造函数。Create函数采用单个参数,即function Group的›name›:

ara::core::Result<FunctionGroup> stm1 =FunctionGroup::Create( "name" );

Create的返回类型是Result,并且将包含函数组(可以使用Value访问)或错误。

然后使用构造函数来创建实际的FunctionGroup对象:

FunctionGroup fg1( stm1.Value().short_name );

最初使用Create创建构造函数,然后使用构造函数字符串创建FunctionGroup的两步方法确保实际的FunctionGroup对象创建不会失败。

8.3.2 Function Group State

一旦获得FunctionGroup对象,就可以使用它来创建表示函数组内状态的Function GroupState对象。与父FunctionGroup对象一样,首先使用构造函数,然后使用实际对象创建的两步方法是必要的。

// Create constructor token
auto t_on = FunctionGroupState::Create( fg1, "name" );
if ( t_on.HasValue() )
{
    // Valid constructor token
    FunctionGroupState sOn( t_on.Value().short_name_fg,
    t_on.Value().short_name_state );
    ...

8.3.3 Process Assignment进程分配

在配置过程中,必须将每个流程(应用程序实例)分配给一个或多个功能组,以确保其由执行管理启动。

AUTOSAR状态管理需要定义功能组MachineFg。

可以在执行管理配置期间访问该组,然后将每个进程分配给AUTOSAR定义的机器状态之一,例如STARTUP。

ISOLAR VRTE的执行编辑器支持对配置的功能组状态进行进程分配。

8.3 Application Access

AUTOSAR状态管理API由StateClient的一个实例提供。在RTA-VRTE Starter Kit中,此类是执行管理的一个组成部分,因此位于ara::exec命名空间中。

使用ISOLAR VRTE创建新的功能组和状态,请参见第4.4.3节。

然后在执行管理配置期间访问功能组/状态,例如,将进程分配给状态。然后,组和状态是执行管理基于FlatCFG数据的配置的一部分,请参见第4.10.1节。

一旦创建了函数组或函数组状态,并且该状态是基于FlatCFG数据的配置的一部分,应用程序就可以使用FunctionGroup和FunctionGroupState类的实例对其进行访问。

8.3.1 Function Group

功能组,包括预定义的MachineFG功能组,在执行管理配置期间使用ISOLAR VRTE进行配置。

实例化FunctionGroup首先需要通过调用Create函数来获得构造函数。Create函数采用单个参数,即function Group的›name›:

ara::core::Result<FunctionGroup> stm1 =FunctionGroup::Create( "name" );

Create的返回类型是Result,并且将包含函数组(可以使用Value访问)或错误。

然后使用构造函数来创建实际的FunctionGroup对象:

FunctionGroup fg1( stm1.Value().short_name );

最初使用Create创建构造函数,然后使用构造函数字符串创建FunctionGroup的两步方法确保实际的FunctionGroup对象创建不会失败。

8.3.2 Function Group State

一旦获得FunctionGroup对象,就可以使用它来创建表示函数组内状态的Function GroupState对象。与父FunctionGroup对象一样,首先使用构造函数,然后使用实际对象创建的两步方法是必要的。

// Create constructor token
auto t_on = FunctionGroupState::Create( fg1, "name" );
if ( t_on.HasValue() )
{
    // Valid constructor token
    FunctionGroupState sOn( t_on.Value().short_name_fg,
    t_on.Value().short_name_state );
     ...

8.3.3 Process Assignment进程分配

在配置过程中,必须将每个流程(应用程序实例)分配给一个或多个功能组,以确保其由执行管理启动。

AUTOSAR状态管理需要定义功能组MachineFg。

可以在执行管理配置期间访问该组,然后将每个进程分配给AUTOSAR定义的机器状态之一,例如STARTUP。

ISOLAR VRTE的执行编辑器支持对配置的功能组状态进行进程分配。

未能将流程分配给至少一个功能组(包括MachineFG)将导致执行管理部门永远无法启动应用程序。

8.4 AUTOSAR服务

AUTOSAR服务由State Manager应用程序提供,并支持自适应应用程序的标准化机制,以影响项目特定的状态机。

 

 

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

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

相关文章

【Golang】三分钟让你快速了解Go语言为什么我们需要Go语言?

博主简介&#xff1a;努力学习的大一在校计算机专业学生&#xff0c;热爱学习和创作。目前在学习和分享&#xff1a;数据结构、Go&#xff0c;Java等相关知识。博主主页&#xff1a; 是瑶瑶子啦所属专栏: Go语言核心编程近期目标&#xff1a;写好专栏的每一篇文章 目录一、Go语…

Pytorch基础 - 3. torch.utils.tensorboard

目录 1. 简介 2. 基本步骤 3. 示例1 - 可视化单条曲线 4. 示例2 - 可视化多条曲线 5. 示例3 - 可视化网络结构 1. 简介 Tensorboard是Tensorflow的可视化工具&#xff0c;常用来可视化网络的损失函数&#xff0c;网络结构&#xff0c;图像等。后来将Tensorboard集成到了P…

wps如何修改已经存在的目录标题内容?

如需了解更多办公应用的相关知识&#xff0c;可进入到赛效官网查看应用资讯或者应用问答栏目。 在WPS文档中&#xff0c;为方便大家查看文档中的内容&#xff0c;可以给文档内容添加目录&#xff0c;很多人由于对文档功能不太熟悉&#xff0c;所以当目录生成以后&#xff0c;想…

高效又稳定的ChatGPT大模型训练技巧总结,让训练事半功倍!

文&#xff5c;python前言近期&#xff0c;ChatGPT成为了全网热议的话题。ChatGPT是一种基于大规模语言模型技术&#xff08;LLM&#xff0c; large language model&#xff09;实现的人机对话工具。现在主流的大规模语言模型都采用Transformer网络&#xff0c;通过极大规模的数…

Day941.仓库版本管理 -系统重构实战

仓库&版本管理 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于仓库&版本管理的内容。 当代码以及团队达到一定的规模以后&#xff0c;这会给项目仓库和版本的管理带来诸多问题。 一张常见问题的表格&#xff0c;不妨“对号入座”&#xff0c;看看项目有没…

【常见CSS扫盲雪碧图】从源码细看CSS雪碧图原理及实现,千字详解【附源码demo下载】

【写在前面】其实估计很多人都听过雪碧图&#xff0c;或者是CSS-Sprite&#xff0c;在很多门户网站就会经常有用到的&#xff0c;之所有引出雪碧图这个概念还得从前端加载多个图片时候页面闪了一下说起&#xff0c;这样给人的视觉效果体验很差&#xff0c;也就借此机会和大家说…

Linux查看串行端口

查看串口驱动 cat /proc/tty/driver/serial查看串口设备 dmesg | grep ttyS*[rootlocalhost driver]# cat /proc/tty/driver/serial serinfo:1.0 driver revision: 0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 1: uart:16550A port:000002F8 irq:3 tx:0 rx:0 CTS|DSR|CD 2:…

攻防世界-inget(简单的SQL注入、万能密码)

目录 1、手工注入&#xff08;万能密码原理&#xff09; 2、sqlmap实现 3、常用参数 1、手工注入&#xff08;万能密码原理&#xff09; 打开链接&#xff0c;提示输入id并尝试绕过 尝试一下万能密码&#xff0c;使用逻辑语句使结果返回 构造payload /?id or 我们这里是…

Java虚拟机内存区域

Java虚拟机所管理的内存将会包括以下几个运行时数据区域 程序计数器 是一块较小的内存空间&#xff0c;可以看作当前线程所执行的字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要通过更改这个计数器的值来改变下一条需要执行的字节码。 由于各个线…

DAY 35 sed文本编辑器

文本三剑客&#xff1a;都是按行读取后处理。 grep 过滤行内容 awk 过滤字段 sed 过滤行内容&#xff1b;修改行内容 sed编辑器 sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流 sed编辑器可以根据命令来处理数据流中的…

Shell编程(二)

上一章&#xff1a; Shell编程_做测试的喵酱的博客-CSDN博客 七、ping shell脚本&#xff0c;是一个面向过程的编程语言&#xff0c;没有类和对象的概念。用的最多的就是函数。 查看当前服务&#xff0c;是否能ping通baidu ping www.baidu.com [rootecs-39233 dev]# ping ww…

眺望2023:房企“三大护法”如何助力穿越周期?

2022 年的地产行业尤为艰难&#xff0c;土地和商品房成交量明显下滑&#xff0c;许多房企的业绩都呈现收缩态势。 不过&#xff0c;今年以来房地产市场似乎出现企稳信号。国家统计局数据显示&#xff0c;今年1~2月全国商品房销售面积和销售额的下跌幅度明显收窄&#xff0c;住…

18-java单列集合

java单列集合1.集合体系结构1.1 单列集合1.2 双列集合2. 单列集合体系结构3.Collection集合顶层接口3.1 Collection的遍历方法3.1.1 迭代器遍历3.1.2 增强for遍历3.1.3 Lambda表达式4. List单列集合4.1 List4.1.1 List集合特点4.1.2 List集合的特有方法4.1.3 List集合遍历方法4…

计算机组成原理实验三-----系统总线和具有基本输入输出功能的总线接口实验

总线是计算机中连接各个功能部件的纽带&#xff0c;是计算机各部件之间进行信息传输的公共通路。 总线不只是一组简单的信号传输线&#xff0c;它还是一组协议。他有两大特征 分时: 同一总线在同一时刻&#xff0c;只能有一个部件占领总线发送信息&#xff0c;其他部件要发送信…

游戏基础—Android平台进程模块信息获取

记得学习编程时的第一个helloworld程序&#xff1a; #include<stdio.h> Int main(int argc, char **argv) { printf(“Hello World”); return 0; } 打印” Hello World”&#xff0c;使用的是printf函数。但是&#xff0c;我们并没有去实现printf函数的功能&#xff0…

javascrip语法

JavaScript 语法涉及到很多方面&#xff0c;以下是常见的详细语法&#xff1a; 1. 变量 变量用于存放值&#xff0c;关键字 var 可以定义变量。 // javascript var x 5; // 定义变量 x&#xff0c;并赋值为 52. 数据类型 JavaScript 中有多种数据类型&#xff0c;包括&…

iOS 紧急通知

一般通知 关于通知的各种配置和开发&#xff0c;可以参考推送通知教程&#xff1a;入门 – Kodeco&#xff0c;具有详细步骤。 紧急通知表现 紧急通知不受免打扰模式和静音模式约束。当紧急通知到达时&#xff0c;会有短暂提示音量和抖动&#xff08;约2s&#xff09;。未锁…

一文速学数模-K-means聚类算法实战:信用卡用户画像聚类分析

目录 前言 一、用户画像概述 1.用户画像 2.为何用聚类算法作用户画像 二、数据质量校验 1.数据背景 2.数据说明 三、数据预处理 1.数据空缺值检验 2.数据归一化 四、K-means聚类 step1:选取K值 手肘法 step2:计算初始化K点 step3:迭代计算重新划分 五.画像分析 …

【LeetCode:221. 最大正方形 | 暴力递归=>记忆化搜索=>动态规划 | 二维dp】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Flutter - 实现防抖和节流

demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新&#xff0c;请前往github查看最新代码 什么是防抖和节流&#xff1f; 函数节流&#xff08;throttle&#xff09;与 函数防抖&#xff08;debounce&#xff09;都是为了限制函数的执行频次&#xff0c;以…