首页 > 其他分享 >Autosar AP SM中同EM相关的核心概念解析

Autosar AP SM中同EM相关的核心概念解析

时间:2024-10-30 20:18:42浏览次数:7  
标签:EM Function Autosar Management Run 状态 中同 Executable Group

在这里插入图片描述

在AUTOSAR Adaptive Platform (AP) 的 State Management 规范中,这些概念用于描述应用的运行状态、组件管理及其在不同状态下的行为和相互关系。下面是这些关键概念的具体说明以及它们如何协作的一个示例。

1. 关键概念

  • Function Group (功能组):一个 Function Group 是一组功能上相关的应用或服务组件,可以按需进行启用或禁用。功能组用于划分应用功能的不同区域,例如安全功能组或驾驶功能组。

  • Function Group State (功能组状态):定义了 Function Group 的不同状态。例如,一个驾驶辅助系统的功能组状态可能包含 Init(初始化)、Run(运行)和 Stop(停止)。

  • Executable (可执行文件):Executable 是一个应用程序或服务的二进制实体。它通常代表一个具体的可运行单元,例如独立的 Adaptive AUTOSAR 应用程序。

  • Modelled Process (建模进程):Modelled Process 是 Adaptive AUTOSAR 系统中描述执行上下文的抽象进程。它与实际的系统进程或线程对应,控制进程的生命周期。

  • Machine (机器):在 State Management 中,Machine 表示实际的硬件计算单元或虚拟机,包含不同的 Function Groups 和其管理的 Executables。

  • State Management (状态管理):用于管理系统状态和功能组的状态,确保不同应用和组件在适当的状态下运行,并协同执行任务。

  • Execution Management (执行管理):Execution Management 负责对 Executable 和 Modelled Process 的启动、暂停、恢复等操作,确保在不同 Function Group 状态下,相关应用可以正确地执行或停止。

2. 实际案例:汽车驾驶辅助系统

假设我们在一个 Adaptive AUTOSAR 系统中实现了一个驾驶辅助功能。该功能包含以下几个关键模块:

  • Driving Assistance Function Group (驾驶辅助功能组):包含驾驶辅助的所有组件,例如 LaneKeepingAssistAdaptiveCruiseControl
  • Function Group State:驾驶辅助功能组有三个状态:Init(初始化)、Run(运行)和 Stop(停止)。
  • Executables:每个模块(例如 LaneKeepingAssistAdaptiveCruiseControl)都作为一个独立的可执行文件,分别控制不同的驾驶辅助功能。
  • Modelled ProcessesLaneKeepingAssistAdaptiveCruiseControl 的执行各自作为 Modelled Process 进行管理。
  • Machine:表示实际的 ECU(Electronic Control Unit),负责处理所有驾驶辅助功能。
  • State Management:用于管理驾驶辅助功能组的状态转换,比如从 Init 切换到 Run,然后当汽车停车时进入 Stop
  • Execution Management:负责在特定的状态(例如 Run 状态)下启动 Lane Keeping Assist 和 Adaptive Cruise Control 的 Executables,并在状态改变时暂停或停止它们。

3. 代码示例

通过 C++ 代码示例展示上述概念如何应用到驾驶辅助系统中。假设我们在一个 Driving Assistance Function Group 中管理两个功能模块:LaneKeepingAssistAdaptiveCruiseControl

#include <iostream>
#include <string>

enum class FunctionGroupState {
    Init,
    Run,
    Stop
};

class Executable {
public:
    Executable(const std::string& name) : name(name) {}
    virtual void start() = 0;
    virtual void stop() = 0;
protected:
    std::string name;
};

class LaneKeepingAssist : public Executable {
public:
    LaneKeepingAssist() : Executable("LaneKeepingAssist") {}
    void start() override {
        std::cout << "Starting Lane Keeping Assist." << std::endl;
    }
    void stop() override {
        std::cout << "Stopping Lane Keeping Assist." << std::endl;
    }
};

class AdaptiveCruiseControl : public Executable {
public:
    AdaptiveCruiseControl() : Executable("AdaptiveCruiseControl") {}
    void start() override {
        std::cout << "Starting Adaptive Cruise Control." << std::endl;
    }
    void stop() override {
        std::cout << "Stopping Adaptive Cruise Control." << std::endl;
    }
};

class StateManagement {
public:
    void transitionState(FunctionGroupState newState) {
        if (newState == FunctionGroupState::Run) {
            std::cout << "Transitioning to Run state." << std::endl;
            laneKeepingAssist.start();
            adaptiveCruiseControl.start();
        } else if (newState == FunctionGroupState::Stop) {
            std::cout << "Transitioning to Stop state." << std::endl;
            laneKeepingAssist.stop();
            adaptiveCruiseControl.stop();
        }
    }
private:
    LaneKeepingAssist laneKeepingAssist;
    AdaptiveCruiseControl adaptiveCruiseControl;
};

int main() {
    StateManagement stateManager;
    
    // 初始化状态
    stateManager.transitionState(FunctionGroupState::Init);
    
    // 启动驾驶辅助系统
    stateManager.transitionState(FunctionGroupState::Run);
    
    // 停止驾驶辅助系统
    stateManager.transitionState(FunctionGroupState::Stop);

    return 0;
}

4. 代码说明

  • FunctionGroupState:定义了 Function Group 的状态,包括 InitRunStop
  • Executable:表示一个抽象的可执行文件,包含 start()stop() 方法。
  • LaneKeepingAssistAdaptiveCruiseControl:继承自 Executable,分别实现了 Lane Keeping Assist 和 Adaptive Cruise Control 模块的启动和停止功能。
  • StateManagement:State Management 类管理 Function Group 的状态转换。当状态切换到 Run 时,LaneKeepingAssistAdaptiveCruiseControl 都会启动;而当状态切换到 Stop 时,两个模块会停止。
  • main:在主函数中模拟了驾驶辅助系统的状态切换过程,从初始化状态 (Init) 到运行状态 (Run),最后切换到停止状态 (Stop)。

5. 总结

此示例展示了 AUTOSAR AP 中 State Management 规范的功能组和状态如何帮助协调多个可执行模块的启动和停止。借助 Execution Management 和 State Management,系统能够根据不同的状态(例如行驶或停止)来合理地管理各个功能模块的生命周期,从而确保系统资源的有效利用和应用的一致性。

标签:EM,Function,Autosar,Management,Run,状态,中同,Executable,Group
From: https://blog.csdn.net/gzjimzhou/article/details/143373843

相关文章

  • emoji编码和长度校验
    背景:最近有个需求,在校验输入内容中要校验字符长度,但是里面包含了支持emoji类型在length计数时惊了我,知识盲区--》补课问题描述:1.校验规则:最大12个中文字符,24个英文字符,支持emoji、数字、标点符号2.console.log('......
  • 开源Embedding模型,有效提升中文语义理解与召回
    此前,我们已经简单介绍了TextIn团队开发的开源acge_text_embedding模型及其下载和使用方法。本篇将展开讨论Embedding模型中使用的技术框架。Huggingface地址:https://huggingface.co/aspire/acge_text_embedding模型API调用:https://www.textin.com/market/detail/acge_text_em......
  • (Pr2024)Premiere Pro 软件下载
    目录一、AdobePremierePro发展历史1.1初期阶段1.2专业化阶段1.3创新与升级1.4下载链接二、AdobePremierePro功能介绍2.1视频剪辑与组合2.2调色与音频处理2.3字幕与输出三、AdobePremierePro系统要求3.1最低系统要求一、AdobePremierePro发展......
  • WPF重写了ListView的ItemsPanel,改用WrapPanel做容器。不能自动换行问题
    直接上正确代码:1<ListViewx:Name="lv_product"HorizontalContentAlignment="Stretch"ItemsSource="{BindingProducts}"2ScrollViewer.HorizontalScrollBarVisibility="Disabled"ScrollViewer.VerticalScrollB......
  • 【semantic Kernel】对接 Ollama
    在chatGPT的推动下。LLM简直火出天际,各行各业都在蹭。听说最近meta开源的llama3模型可以轻松在普通PC上运行,这让我也忍不住来蹭一层。以下是使用ollama试玩llama3的一些记录。什么是llamaLLaMA(LargeLanguageModelMetaAI)是Meta开发的大规模预训练语言模型,基于T......
  • 2024年力学、电磁学与近代物理国际学术会议(ICMEMP 2024)
    2024年力学、电磁学与近代物理国际学术会议(ICMEMP2024)2024InternationalConferenceonMechanics,ElectromagneticsandModernPhysics(ICMEMP2024)会议信息大会官网:2024年力学、电磁学与近代物理国际学术会议(ICMEMP2024)投稿邮箱:[email protected]【投稿请备注:ICM......
  • 『QEmu』使用 QIOChannel 进行 unix socket 通信
    在QEmu中使用常规的read(...)、recv(...)或者write(...)、send(...)进行堵塞式IO读写有时候会无法得到预期的结果,这是因为QEmu使用基于glib事件循环的事件循环,所有的读写操作都应该统一在QEmu的框架中进行。QEmu的内部API较为复杂,存在多种不同封装级别的IO读写......
  • Paper Reading: Mixed Bagging: A Novel Ensemble Learning Framework for Supervised
    目录研究动机文章贡献本文方法分组混合Bagging增量混合Bagging实验结果本文方法的设置数据集和实验设置对比实验优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到位的地方。具体的细节还需要以原文的内容为准,博客中的图......
  • 反射应用一InvokeMember
    反射是.net中的高级功能之一,利用反射可以动态的实例化类的对象,并且可以调用其方法及成员属性。所以学习好反射是很重要的。今天我就写一写简单的反射实现InvokeMember至于关于这个函数,可以去MSDN上去查看。我只说一些和实际开发中的一些小例子。本例子要点:如何利用InvokeMember......
  • RestTemplate远程调用与服务治理问题
                 RestTemplate是Spring提供的一个同步HTTP客户端,用于在Java应用程序中进行RESTfulAPI调用。它支持多种HTTP方法(如GET、POST、PUT、DELETE等),并且能够处理JSON、XML和其他格式的响应。使用场景当应用需要从外部服务获取......