回复
AP Autosar -Execution Management -- 基础实操
无聊逛51
发布于 2023-11-13 11:47
浏览
0收藏
Execution Management
执行管理功能集群负责控制自适应应用程序的启动和关闭,并管理它们的运行时执行。为此,执行管理部门负责:自适应应用控制——如何启动应用实例,即流程创建和配置。状态管理——何时启动/停止应用程序实例,即响应状态更改请求。资源管理等——配置CPU和内存上的资源约束,并在适当的情况下进行管理。
实操
废话不多说,直接实操,感性认识到理性认识才会快一点。
打开Execution 编辑
配置
配置项并不多,首先我们要知道EM 是干什么的。
是管理进程的,结合着运行的状态来管理进程的。
所以这里主要的由进程,状态,机器
生成代码
分析代码
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 对进程的管控。
仿真结果
代码如有侵权,请联系我删除谢谢
文章转载自公众号:汽车与基础软件
分类
标签
已于2023-11-13 11:47:17修改
赞
收藏
回复
相关推荐