学习笔记:Adaptive Platform(AP)适配到RTOS

一、背景

1、AP版本

  • Adaptive Platform AUTOSAR R20-11版本标准
  • 支持C++14。
  • CM模块支持DDS、SOME/IP协议

2、RTOS

RTOS-A核,当前完全支持POSIX PSE51、POSIX PSE52接口,POSIX PSE53部分支持,POSIX PSE54基本不支持。详细接口参考:

  • 学习笔记:IEEE 1003.13-2003【POSIX PSE51接口列表】-CSDN博客
  • 学习笔记:IEEE 1003.13-2003【POSIX PSE52接口列表】-CSDN博客
  • 学习笔记:IEEE 1003.13-2003【POSIX PSE53接口列表】-CSDN博客
  • 学习笔记:IEEE 1003.13-2003【POSIX PSE54接口列表】-CSDN博客

二、框架

1、OS-AP结构图

从上到下,主要分为3层:

1)AP层

2)适配层

3)OS系统层

2、关键技术点:

AP是基于类Unix操作系统环境,它的架构为面向对象,编程语言采用C++,移植到RTOS上,存在以下几个技术点:

1)基于RTOS自己的编译构建系统,编译AP各个模块和依赖的C++开源库

2)当前AP基于C++14,RTOS标准库对只支持到C++11,RTOS需要升级支持部分C++14特性

3)AP、C++开源库部分功能需要裁剪,比如:

  • RTOS不支持用户组等多用户场景,需要裁剪成单用户
  • AP中EM模块具体功能和系统(linux的cgroup 子系统)强相关,RTOS没有cgroup 子系统,需要裁剪成和RTOS对应
  • 等等

4)POSIX PSE53、POSIX PSE54接口不支持:

  • POSIX PSE53:fork等,不支持“多进程”,OS系统实现难度比较大
  • POSIX PSE54:dlopen、dlsym、dlclose、dlerror,不支持“动态加载”,OS系统实现难度比较大
  • 等等

三、AP层

1、基于RTOS的编译构建系统编译出AP各模块

2、C++标准库差异适配

AP使用是Linux上标准C++库:libstdc++(GNU C++ 标准库),RTOS使用的是自己的标准C/C++库。

比如:基础类型类型coretype需要对下面两类进行修改

1)GNU C++使用到的_GLIBCXX_相关宏不支持

2)std::__开头基本是对C++标准的扩展,需要替换RTOS对应标准实现

3、功能裁剪

对于RTOS不支持的POSIX接口进行功能裁剪,比如多用户等

四、适配层

1、扩展OSAL

AP调用系统调用统一通过OSAL实施,OSAL就是基于POSIX标准进行封装

2、移植C++开源库

AP使用C++开源库,需要将这些C++开源库移植到RTOS上

3、功能裁剪

根据RTOS特性,需要对功能进行适配,比如线程、文件系统,网络等等

五、OS系统层

1、标准库升级

标准库中完善对C++14新特性的支持

2、POSIX接口升级

开发AP和适配层整理出缺少的POSIX接口,完善OS对POSIX PSE53、PSE54接口的支持

六、参考

1、Adaptive Platform AUTOSAR

参考:学习记录:AP & CP AUTOSAR-CSDN博客

2、C++ 14新特性

参考:学习笔记:C/C++、VSCode、在线网址-CSDN博客

3、POSIX接口

参考:学习笔记:IEEE 1003.13-2003(POSIX实时与嵌入式规范)-CSDN博客

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

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

相关文章

第十四天:PHP 开发,输入输出类留言板访问 IPUA 头来源

1.PHP-全局变量$_SERVER 2.MYSQL-插入语法INSERT 3.输入输出-XSS&反射&存储 4.安全问题-XSS跨站&CSRF等 1.输入输出类安全问题 反射性xss 这个先准备一个数据,随便弄一个表名字,在随便弄一点数据存入即可 作为连接的数据库&#xff0c…

排序-归并排序(merge sort)

归并排序(Merge Sort)是一种分而治之的算法,它将原始数组分成越来越小的子数组,直到每个子数组只有一个元素,然后将这些子数组两两合并,过程中保持排序状态,最终合并成一个完全有序的数组。归并…

《一》Word文字编辑软件---架构设计分析

1,简单介绍 今天,我们来模拟offic软件中的word文档,运行如图: 运行程序后会出现主界面,顶端的菜单栏包括“文件”“编辑”“格式”“窗口”和“帮助五个主菜单。 菜单栏下面是工具栏,包含了系统常用的功能按…

如何判断海外住宅ip的好坏?

在海外IP代理中,住宅IP属于相对较好的资源,无论是用于工作、学习、还是娱乐,都能得到较好的使用效果。作为用户,该如何判断海外住宅IP的好坏呢? 稳定性与可靠性:海外住宅IP相比动态IP地址,通常具…

Java全局异常处理,@ControllerAdvice异常拦截原理解析【简单易懂】

https://www.bilibili.com/video/BV1sS411c7Mo 文章目录 一、全局异常处理器的类型1-1、实现方式一1-2、实现方式二 二、全局异常拦截点2-1、入口2-2、全局异常拦截器是如何注入到 DispatcherServlet 的 三、ControllerAdvice 如何解析、执行3-1、解析3-2、执行 四、其它4-1、设…

电脑提示找不到ffmpeg.dll无法继续执行代码怎么办?

电脑提示找不到找不到ffmpeg.dll无法继续执行代码怎么办,有什么好的解决办法,出现这样的弹出就会导致软件无法打开或者是异常关闭,找不到dll文件,是一个非常重要的电脑使用问题,会给使用者带来许多的麻烦。那么找不到d…

LeetCode746:使用最小花费爬楼梯

题目描述 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 代码 …

MongoDB和AI 赋能行业应用:制造业和汽车行业

欢迎阅读“MongoDB和AI 赋能行业应用”系列的第一篇。 本系列重点介绍AI应用于不同行业的关键用例,涵盖制造业和汽车行业、金融服务、零售、电信和媒体、保险以及医疗保健行业。 随着人工智能(AI)在制造业和汽车行业的集成,传统…

CDN的工作原理及流程

CDN(Content Delivery Network,内容分发网络)是一种构建在数据网络上的分布式内容分发网络。 CDN利用全局负载均衡技术,将用户的访问请求指向离用户最近且工作正常的流媒体服务器上,由流媒体服务器直接响应用户的请求…

Tableau学习2.0版——复习

官网下载链接:https://www.tableau.com/zh-cn/support/releases 学生账户申请链接:https://www.tableau.com/zh-cn/academic/students。直接去学信网下载学籍在线验证作为申请证明。 目录 1、可视化原理 2、基础图表制作 2.1 对比分析(比…

@游戏行业er!MongoDB广州线下沙龙邀您报名!

随着游戏和应用程序的发展,数据变得越来越重要。在为您的下一个游戏选择数据库时,数据库管理者常常会面对灵活性、可扩展性、可靠性、运营效率等问题或挑战。 MongoDB在游戏开发领域有着广泛的应用,灵活数据模型可以存储和处理各种类型的数据…

JPA ENTITY EXTEND

1. Overview Relational databases don’t have a straightforward way to map class hierarchies onto database tables. To address this, the JPA specification provides several strategies: MappedSuperclass – the parent classes, can’t be entitiesSingle Table …

webpack处理js和css模块化导入导出示例:

webpack默认并不能处理js模块化的导入和导出,依赖于ts-loader和babel-loader webpack.config,js module.exports {entry: ./src/index.ts,output: {filename: main.js,},mode: development, // 或者 productionmodule: {rules: [{test: /\.ts/,exclude: /(node_modules)/,use:…

二维平移矩阵 (2D translate matrix)

2D translate matrix 推荐阅读正文推荐阅读 矢量旋转矩阵 正文 之前我们介绍了矢量旋转矩阵的形式,这里我们来介绍一下平移矩阵的形式。比如,我们我们有一个点,其坐标为 (0,1)。那么我们如何操作才能够将这个点沿着 x 轴正方向平移 1 个单位长度呢? 这里我们以向右移动…

vj题单 P4552 [Poetize6] IncDec Sequence

思路: 一次操作:选一个区间[l, r],把这个区间的数都加1或者都减1,可以将求该数列的差分数组b然后来进行该操作 一次操作的两种种情况:(l可以等于r) 1.b[l]1 b[r1]-1 2.b[l]-1 b[r1]1 Q1:…

PHP 提取数组中的特定的值

需求: 前端展示: (1)之前的页面: (2)修改后的页面: 之前接口返回的数据 : 解决办法:提取tags 中的 ’约 的数组 添加到一个新的数组中去 1:一开…

【CPP】多线程并发—— Mutex 和 Lock

#include <iostream> #include <thread> #include <mutex> #include "my_utils.h"std::mutex mtx; // 全局互斥锁 int shared_data 0; // 共享数据 void increment() { for (int i 0; i < 10; i) { std::cout <<"incre…

2024年去除视频水印的5种方法

如果你从事电影剪辑或者视频编辑工作&#xff0c;你经常需要从优酷、抖音、TikTok下载各种视频片段……。 通常这些视频带有水印和字幕。一些免费软件如CapCut、canva、Filmora也会给你制作的视频打上水印&#xff0c;这些水印嵌入在视频内部。 2024年去除视频水印的5种方法 …

Mysql-用户变量的声明与使用

#声明变量 #1.标识符不能以数字开头 #2.只能使用_或$符号&#xff0c;不能使用其他符号 #3.不能使用系统关键字 setuserName刘德华; select userName:刘青云;#将赋值与查询结合 #查询变量、使用变量&#xff0c;匿名的时候建议加上as select userName as 读取到的userName变量…

Golang面向对象编程(二)

文章目录 封装基本介绍封装的实现工厂函数 继承基本介绍继承的实现字段和方法访问细节多继承 封装 基本介绍 基本介绍 封装&#xff08;Encapsulation&#xff09;是面向对象编程&#xff08;OOP&#xff09;中的一种重要概念&#xff0c;封装通过将数据和相关的方法组合在一起…