Apollo:源码分析之cyber/mainboard启动入口介绍-my write, test ok

软件结构图

在这里插入图片描述

cyber入口

cyber的入口在"cyber/mainboard"目录中:

├── mainboard.cc           // 主函数
├── module_argument.cc     // 模块输入参数
├── module_argument.h
├── module_controller.cc   // 模块加载,卸载
└── module_controller.h

mainboard中的文件比较少,也很好理解,我们先从"mainboard.cc"中开始分析:

int main(int argc, char** argv) {// 解析参数 ModuleArgument module_args;module_args.ParseArgument(argc, argv);// 初始化cyberapollo::cyber::Init(argv[0]);// 加载模块ModuleController controller(module_args);if (!controller.Init()) {controller.Clear();AERROR << "module start error.";return -1;}// 等待cyber关闭apollo::cyber::WaitForShutdown();// 卸载模块controller.Clear();AINFO << "exit mainboard.";return 0;
}

mainboard 是 cyberRT 的入口,init 方法都在这里触发。Module 也在这里启动。

解析参数ModuleArgument

解析参数是在"ModuleArgument"类中实现的,主要是解析加载DAG文件时候带的参数

void ModuleArgument::ParseArgument(const int argc, char* const argv[]) {// 二进制模块名称binary_name_ = std::string(basename(argv[0]));// 解析参数GetOptions(argc, argv);// 如果没有process_group_和sched_name_,则赋值为默认值if (process_group_.empty()) {process_group_ = DEFAULT_process_group_;}if (sched_name_.empty()) {sched_name_ = DEFAULT_sched_name_;}// 如果有,则设置对应的参数GlobalData::Instance()->SetProcessGroup(process_group_);GlobalData::Instance()->SetSchedName(sched_name_);// 打印dag_conf配置AINFO << "binary_name_ is " << binary_name_ << ", process_group_ is "<< process_group_ << ", has " << dag_conf_list_.size() << " dag conf";for (std::string& dag : dag_conf_list_) {AINFO << "dag_conf: " << dag;}
}

模块加载ModuleController

在"ModuleController"实现cyber模块的加载,在"ModuleController::Init()"中调用"LoadAll()"来加载所有模块

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

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

相关文章

idea如何配置tomcat

1&#xff0c;点击Run---EDit Configurations... 2.点击左侧“”号&#xff0c;找到Tomcat Server---Local&#xff08;若是没有找到Tomcat Server 可以点击最后一行 34 items more&#xff09; 3.在Tomcat Server -> Unnamed -> Server -> Application server项目下&…

JumpServer关闭admin mfa验证

背景 因为上一次启动了mfa验证&#xff0c;但是没有验证就关机重启&#xff0c;导致再开机输入密码后需要mfa绑定&#xff0c;但是怎么也无法绑定成功&#xff0c;导致无法登录。 故希望通过后台取消mfa的验证 解决方法 1. 进入docker docker exec -it jms_core /bin/bash…

关于Docker Engine AuthZ 插件授权绕过漏洞 (CVE-2024-41110)

一、漏洞概述 漏洞名称&#xff1a;Docker Engine AuthZ 插件授权绕过漏洞 &#xff08;CVE-2024-41110&#xff09; 漏洞等级&#xff1a;高危 漏洞描述&#xff1a;DockerEngine是Docker的核心组件&#xff0c;是一 个开源的容器引擎&#xff0c;负责构建、运行和管理容器…

蓝牙BlueZ验证使用记录

最近使用的一款AICSemi AIC8800D8芯片做的WiFiBT二合一模组&#xff0c;该模组WiFi使用SDIO通信&#xff0c;BT使用UART通信&#xff0c;供应商丢了一份驱动&#xff0c;包含了三个目录&#xff1a;aic8800_bsp、aic8800_fdrv和aic8800_btlpm&#xff0c;而蓝牙部分提供了lbh_s…

【Vue】权限控制

权限管理 分类&#xff1a; 页面权限功能(按钮)权限接口权限 vue3-element-admin 的实现方案 一般我们在业务中将 路由可以分为两种&#xff0c;constantRoutes 和 asyncRoutes。 constantRoutes&#xff1a; 代表那些不需要动态判断权限的路由&#xff0c;如登录页、404(或…

标题:“八股文”在实际工作中是助力、阻力还是空谈?

标题&#xff1a;“八股文”在实际工作中是助力、阻力还是空谈&#xff1f; “八股文”&#xff0c;在程序员的面试和工作中一直是一个备受争议的话题。它既是许多程序员进入职场的敲门砖&#xff0c;也被一些人认为是脱离实际的空谈。本文将从“八股文”对招聘过程的影响、在…

【echarts】 柱状图,最后带“竖线”

具体&#xff1a; https://echarts.zhangmuchen.top/#/detail?cid28ea6-0601-e9f5-9cc29-c022b758 let data [{value: 0,name: 数据格式一},{value: 55,name: 数据格式二},{value: 66,name: 数据格式三},{value: 75,name: 数据格式四},{value: 20,name: 数据格式五}];getAr…

2、Flink 在 DataStream 和 Table 之间进行转换

1.概述 Table API 和 DataStream API 都可以处理有界流和无界流。 DataStream API 提供了流处理的基础(时间、状态和数据流管理);Table API 抽象了许多内部内容,并提供了一个结构化和声明性的 API;在处理历史数据时,需要管理有边界的流;无边界流出现在实时处理场景中,…

wordpress调用栏目最新内容、调用栏目推荐内容、调用栏目随机内容

想要在首页调用wordpress某个栏目的内容&#xff0c;可以按照分类ID来调用&#xff0c;调用出来的内容一般有&#xff1a;调用栏目最新内容、调用栏目推荐内容、调用栏目随机内容这三种形式。简站wordpress小编在此为大家放出三种不同方式调用的代码如下&#xff1a; 通过指定…

盘点.软件测试模型

软件开发模型   软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段&#xff0c;有时也包括维护阶段。 软件开发模型能清晰、直观地表达软件开发全过程&#xff0c;明确规定了要完成的主要活动…

云计算day15

⼀、web基本概念和常识 Web&#xff1a;为⽤户提供的⼀种在互联⽹上浏览信息的服务&#xff0c;Web 服 务是动态的、可交 互的、跨平台的和图形化的。 Web 服务为⽤户提供各种互联⽹服务&#xff0c;这些服务包括信息浏览 服务&#xff0c;以及各种交互式服务&#xff0c;…

C++类与对象-六大成员函数

默认成员函数就是用户没有显式实现&#xff0c;编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个空类编译器会默认⽣成8个默认成员函数。本文只介绍其中6个&#xff0c;C11增加两个函数见后续博客。 目录 一、构造函数 1.1 概念 1.2 特性 1.3 使用举例 1.4 初始化列表 1…

探索LLM编程新纪元:AI赋能的编程之旅

探索LLM编程新纪元&#xff1a;AI赋能的编程之旅 引言 在人工智能&#xff08;AI&#xff09;的浪潮中&#xff0c;大型语言模型&#xff08;LLM&#xff09;作为自然语言处理&#xff08;NLP&#xff09;领域的璀璨明珠&#xff0c;正逐步渗透到编程的每一个角落。从代码自动…

【C#】文件流和文本处理

1. 文件流的基本概念 文件流是C#中处理文件读写的抽象&#xff0c;它提供了对文件内容进行顺序访问的能力。在文件流中&#xff0c;数据按照字节或块的方式传输&#xff0c;而不受文件中数据的格式影响。文件流通常与System.IO命名空间中的类一起使用&#xff0c;包括FileStrea…

如何通过前端表格控件实现自动化报表?

背景 最近伙伴客户的项目经理遇见一个问题&#xff0c;他们在给甲方做自动化报表工具&#xff0c;项目已经基本做好了&#xff0c;但拿给最终甲方&#xff0c;业务人员不太买账&#xff0c;项目经理为此也是天天抓狂&#xff0c;没有想到合适的应对方案。 现阶段主要面临的问…

geotools 读取shape文件

对于GIS开发者而言&#xff0c;矢量数据是我们经常要用到的&#xff0c;而shape数据是矢量数据中最常用的格式&#xff0c;因此解析shape数据也是作为GIS软件开发人员必备的基础技能&#xff0c;而GeoTools无疑是Java最好用来处理GIS数据的三方库&#xff0c;下面例子是简单的g…

算法训练(leetcode)第三十四天 | 56. 携带矿石资源(第八期模拟笔试)、198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III

刷题记录 *56. 携带矿石资源&#xff08;第八期模拟笔试&#xff09;198. 打家劫舍213. 打家劫舍 II*337. 打家劫舍 III解法一 &#xff08;记忆化递推&#xff09;*解法二 &#xff08;动态规划&#xff09; *56. 携带矿石资源&#xff08;第八期模拟笔试&#xff09; leetco…

防火墙USG2000USG5000配置nat server 时 no-reverse的含义

防火墙USG2000&USG5000配置nat server 时 no-reverse的含义 https://forum.huawei.com/enterprise/zh/thread/580888066099396608?page2 多次执行带参数no-reverse的nat server命令&#xff0c;可以为该内部服务器配置多个公网地址&#xff1b;未配置参数no-reverse则表…

实现代码灵活性:用Roslyn动态编译和执行存储在数据库中的C#代码

在许多现代应用程序中&#xff0c;动态编译和执行代码是提升灵活性和功能的一种强大技术。本文将介绍如何使用Roslyn编译器平台动态编译和执行存储在数据库中的C#代码&#xff0c;并结合实际公司案例来说明这些技术的应用场景。 1. 引言 在很多应用场景中&#xff0c;我们可能…