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 */
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.

从上面的代码可以看出来,实际上就是对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;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

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

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

仿真结果

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

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




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

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