AP Autosar -Execution Management -- 基础实操

无聊逛51
发布于 2023-11-13 11:47
浏览
0收藏

Execution Management

执行管理功能集群负责控制自适应应用程序的启动和关闭,并管理它们的运行时执行。为此,执行管理部门负责:自适应应用控制——如何启动应用实例,即流程创建和配置。状态管理——何时启动/停止应用程序实例,即响应状态更改请求。资源管理等——配置CPU和内存上的资源约束,并在适当的情况下进行管理。

实操

废话不多说,直接实操,感性认识到理性认识才会快一点。

打开Execution 编辑

AP Autosar -Execution Management -- 基础实操-鸿蒙开发者社区

配置

配置项并不多,首先我们要知道EM 是干什么的。

是管理进程的,结合着运行的状态来管理进程的。

所以这里主要的由进程,状态,机器

AP Autosar -Execution Management -- 基础实操-鸿蒙开发者社区

生成代码

AP Autosar -Execution Management -- 基础实操-鸿蒙开发者社区

分析代码

namespace exm
{
namespace ldr
{

    ExMConfig exmConfig;
    ILoaderControl& getLoaderControl()
{
        return exmConfig;
    }
    
    StdReturnType ExMConfig::start(ILoaderRegistrar& reg)
{
        FuncGroupId fgid_MachineState = reg.FuncGroup_GetOrCreate("MachineState");
        if(fgid_MachineState == FuncGroupId::INVALID)
        return StdReturnType::GENERAL_ERROR;

        FuncGroupStateId fgsid_MachineState_Off = reg.FuncGroupState_GetOrCreate("Off", fgid_MachineState);
        if(fgsid_MachineState_Off == FuncGroupStateId::INVALID)
        return StdReturnType::GENERAL_ERROR;

        FuncGroupStateId fgsid_MachineState_Restart = reg.FuncGroupState_GetOrCreate("Restart", fgid_MachineState);
        if(fgsid_MachineState_Restart == FuncGroupStateId::INVALID)
        return StdReturnType::GENERAL_ERROR;

        FuncGroupStateId fgsid_MachineState_Shutdown = reg.FuncGroupState_GetOrCreate("Shutdown", fgid_MachineState);
        if(fgsid_MachineState_Shutdown == FuncGroupStateId::INVALID)
        return StdReturnType::GENERAL_ERROR;

        FuncGroupStateId fgsid_MachineState_Startup = reg.FuncGroupState_GetOrCreate("Startup", fgid_MachineState);
        if(fgsid_MachineState_Startup == FuncGroupStateId::INVALID)
        return StdReturnType::GENERAL_ERROR;

        InstanceIf* Ex2process = reg.getNewInstance();
        if ( nullptr == Ex2process ) { return StdReturnType::GENERAL_ERROR; }
        if ( Ex2process->init("Ex2process", "/opt/vrte/usr/bin/Exercise2") < 0 ) { return StdReturnType::GENERAL_ERROR; }
       #error Process 'Ex2process' does not contain uid/gid
        if ( Ex2process->AddToFunctionGroupState(fgid_MachineState, fgsid_MachineState_Startup) < 0 ) { return StdReturnType::GENERAL_ERROR; }
        if ( Ex2process->envars.add_env("LD_LIBRARY_PATH=/lib:/usr/lib:/opt/vrte/lib:/opt/vrte/usr/lib") < 0 ) { return StdReturnType::GENERAL_ERROR; }
        Ex2process->reportsProcessState(true);
        if ( reg.registerInstance(Ex2process) < 0 ) { return StdReturnType::GENERAL_ERROR; }

        return StdReturnType::OK;
    }
        
    StdReturnType ExMConfig::join()
{
        return StdReturnType::OK;
    }       

    StdReturnType ExMConfig::cancel()
{
        return StdReturnType::OK;
    }

} /* namespace ldr */
} /* namespace exm */

从上面的代码可以看出来,实际上就是对ExMConfig::start 这个类的 成员函数进行实现。

EM类。结合着上面的配置,可以清楚的看到状态的判断。

main 函数

using namespace ara::exec;

ExecutionClient ac;

int main(int argc, char** argv)
{
   std::cout << "Hello World\n";
   ac.ReportExecutionState( ExecutionState::kRunning );
   ac.ReportExecutionState( ExecutionState::kTerminating );
   return 0;
}

这里比较简单只是输出hello world. 和这个进程的状态变换。

可以通过结果来感性的认识 EM 对进程的管控。

仿真结果

AP Autosar -Execution Management -- 基础实操-鸿蒙开发者社区

代码如有侵权,请联系我删除谢谢




文章转载自公众号:汽车与基础软件

分类
标签
已于2023-11-13 11:47:17修改
收藏
回复
举报
回复
    相关推荐