[Adaptive Autosar]深入理解--Persistency

2023-05-16

目录

1.Per架构

2.Per初始化

3.Per错误处理

4.多进程访问

5.冗余存储

6.安装和更新per数据

7. Key-Value 方式

8. file storage 方式

9.典型使用代码


Persistency模块对比 CP 中的nvm模块,以下简称per。

1.Per架构

两种方式访问存储内存,包括键值对方式,以及文件存储方式;

在manifest中定义好,PersistencyKeyValueStorageInterface 和 PersistencyFileStorageInterface 以及部署信息 PersistencyKeyValueStorage 和 PersistencyFileStorage。

每个key-value, 通过应用设计 的 port口,定义在 PersistencyKeyValueStorageInterface,同样对于file storage 一样,对应的是PersistencyFileStorageInterface 。

2.Per初始化

初始化,调用 ara::core::Initialize ,当初始化调用了,文件同步到内存,键值准备好,所有的访问结构都准备好。

3.Per错误处理

出错时,定义的ara::per::PerErrc故障码通过 ara::core::Result 获取;

故障码创建:ara::per::MakeErrorCode.

故障码获取: ara::per::GetPerDomain

4.多进程访问

每个Per data 仅仅属于一个进程,但提供 同一个进程下 多线程的访问。

因为针对键值方式  ara::per::KeyValueStorage::GetValue 和ara::per::KeyValueStorage::SetValue 等接口是原子型操作。

但是对于file storage方式,则无法支持多线程访问,因为同步读和写无法做到。

5.冗余存储

主要考虑安全以及防止数据丢失,具体措施是在 PersistencyDeployment.redundancyHandling 配置。每当访问时,会进行检查,如果损坏则应尝试从可用的存储块中进行恢复。

6.安装和更新per数据

主要考虑以下场景,

  • 安装新的软件
  • 更新已存在的软件
  • 完成软件更新
  • 更新失败,回滚软件
  • 移除安装的软件

应用模块应在验证阶段,显示调用ara::per::UpdatePersistency 。此时Per会比较manifest版本,以做出必要的措施。

具体包括:

  • 已存在的数据,保持不变,根据部署和设计需要
  • 已存在的数据进行替换,根据部署和设计需要
  • 已存储的数据进行移除,根据部署和设计需要
  • 新增已增加的数据,根据部署和设计需要

具体定义到 PersistencyDeploymentElement.updateStrategy 和 PersistencyInterfaceElement.updateStrategy

per会 创建一个新的 key-value 或 file storage 根据新的安装软件的manifest要求。

per会 比较 manifest的版本,当版本更高时,则会更新对应的per data。

当更新失败,需要回滚时,per会根据backup数据,找到对应的manifest版本进行恢复;

per不会自己移除自己的数据,UCM模块应根据manifest,获取per data 并删除它。

7. Key-Value 方式

访问时,打开 ara::per::OpenKeyValueStorage;

更新数据到内存,ara::per::KeyValueStorage::SyncToStorage

reset 上一次存储,ara::per::KeyValueStorage::DiscardPendingChanges

获取value,ara::per::KeyValueStorage::GetValue

写入value,ara::per::KeyValueStorage::SetValue

移除key-value, ara::per::KeyValueStorage::RemoveKey

清空key-value,ara::per::KeyValueStorage::RemoveAllKey

8. file storage 方式

访问时,打开 ara::per::OpenFileStorage

文件是否存储,ara::per::FileStorage::FileExists 或 ara::per::FileStorage::GetAllFileNames;

创建新文件,ara::per::FileStorage::OpenFileReadWrite 或ara::per::FileStorage::OpenFileWriteOnly;

删除文件,ara::per::FileStorage::DeleteFile;

同步到存储文件,ara::per::ReadWriteAccessor::SyncToFile

获取当前文件访问位置,ara::per::ReadAccessor::GetPosition 类似 linux seek

获取文件大小,ara::per::ReadAccessor::GetSize

获取当前文件位置内容,ara::per::ReadAccessor::ReadText

获取行内容,ara::per::ReadAccessor::ReadLine

写入内容,ara::per::ReadWriteAccessor::WriteText

写入二进制,ara::per:-:ReadWriteAccessor::WriteBinary

获取文件信息,ara::per::FileStorage::GetFileInfo,类似 linux ls

9.典型使用代码

#include <chrono>
#include <thread>
#include <ara/log/logging.h>
#include <ara/per/file_storage.h>
#include <ara/per/key_value_storage.h>
#include <execution_client.h>

using namespace ara::core;
using namespace ara::per;

/*注意,需在对应 interface 和manifest中定义好*/
const ara::core::String NameData("DATA_R_PORT");
const ara::core::String NameFile("FILE_R_PORT");  
const ara::core::String file_name("per.log");

void Write2Data(const ara::core::String data_name,
                const ara::core::String key,
                const ara::core::String value)
{
    InstanceSpecifier instSpec(data_name);

    auto kvsh = OpenKeyValueStorage(instSpec);

    auto kvs = std::move(kvsh.Value());

    kvs->RemoveAllKeys();

    auto result = kvs->SetValue(key,value);

    kvs->SyncToStorage();
}

int main(int argc,char *argv[])
{
    ara::exec::ExecutionClient exeClient;

    exeClient.ReportExecutionState(ara::exec::ExecutionState::kRunning);
    
    std::this_thread::sleep_for(std::chrono::milliseconds(1000));

    Write2Data(NameData,"test_key","test_value");

    exeClient.ReportExecutionState(ara::exec::ExecutionState::kTerminating);

    return EXIT_SUCCESS;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Adaptive Autosar]深入理解--Persistency 的相关文章

  • 【笔记】自适应卡尔曼滤波 Adaptive Extended Kalman Filter

    0 阅读文章 Adaptive Adjustment of Noise Covariance in Kalman Filter for Dynamic State Estimation 1 主要内容 一般情况下 xff0c kalman中的
  • 深入理解C语言小括号用法

    学了这么多年C语言 xff0c 你真的会用小括号吗 xff1f 我们今天来总结一下小括号 xff08 xff09 有哪些用法 xff0c 用法如下表 xff1a 示例 1 聚组 聚组是用来改变运算优先级 xff0c 实例如下 xff1a 例
  • 深入理解AlexNet网络

    AlexNet 论文 xff1a ImageNet Classification with Deep Convolutional Neural Networks 第一个典型的CNN是LeNet5网络结构 xff0c 但是第一个引起大家注意的
  • CP AUTOSAR 通信

    现在汽车中 xff0c 车内网络普遍采用CAN LIN FlexRay总线 xff0c CAN FD和车载以太网也将在未来得到更多应用 作为汽车电子软件的主要标准 xff0c AUTOSAR在总线网络通信方面提供了完整的架构 AUTOSAR
  • 浅谈AP autosar 之 runtime 基础

    AP Autosar Architecture overview AP autosar在SOC 中的位置 xff0c 起到的作用 下面图可以看出 xff0c AP autosar封装了操作系统的接口 xff0c 封装了功能安全 xff0c
  • 什么是AUTOSAR?为什么汽车公司开始采用AUTOSAR来开发新产品?

    越来越多的车企开始应用ATUOSAR xff0c 也有很多公司在招聘时会在JD里注明 xff0c 应聘者需要熟练掌握AUTOSAR xff0c 那么什么是AUTOSAR xff1f 为什么从奔驰 宝马等传统豪华汽车巨头 xff0c 到新势力
  • ETAS-AUTOSAR学习-0.1Task配置思考

    span class token function TASK span span class token punctuation span OsTask BSW span class token punctuation span span
  • Autosar Configuration(五) Security之Csm配置

    本系列教程是根据实际项目开发中总结的经验所得 如发现有不对的地方 还请指正 目录 Autosar Configuration 一 Davinci Developer 工具介绍 Autosar Configuration 二 Davinci
  • 一文读懂Autosar SecOC通讯

    一 为什么用SecOC xff1f 在车载网络中 xff0c CAN总线作为常用的通讯总线之一 xff0c 其大部分数据是以明文方式广播发送且无认证接收 这种方案具有低成本 高性能的优势 xff0c 但是随着汽车网联化 xff0c 智能化的
  • Adaptive Autosar通讯层:ARA::COM中的Instance Identifiers

    一般概念 实例标识符 在收发两端都是要用的 是很核心的概念 proxy端用来搜索服务 xff0c skeleton端用来创建服务实例 站在API的角度来看 xff0c 这样的识别符是和特定的技术绑定的 所以 xff0c 标识符的结构和内容都
  • 深入理解Java虚拟机JVM

    JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java exe来完成 通过下面4步来完成JVM环境 1 创建JVM装载环境和配置 2 装载JVM dll 3 初始化JVM dll并挂界到JNIENV JNI调用接口 实例 4
  • 【AUTOSAR】【通信安全】CRC

    目录 一 概述 二 功能说明 2 1 通用行为 2 2 8位CRC计算 2 2 1 8位SAE J1850 CRC计算 2 2 2 8位0x2F多项式CRC计算 2 3 16位CRC计算 2 3 1 16位CCITT FALSE CRC16
  • 7、AUTOSAR MCAL入门-实战:I/O驱动组

    7 AUTOSAR MCAL入门 实战 xff1a I O驱动组 在第三节中有介绍AUTOSAR 把MCAL 抽象分为4个驱动组 xff0c 分别为 xff1a 微控制器驱动组 xff0c 存储器驱动组 xff0c 通信驱动组 输入 输出驱
  • 深入理解Kotlin无参构造函数

    Unsafe 创建实例 在java中 创建一个对象 其实主要就是3种方法 通过new 关键字来创建 这种是最常见的 通过反射构造方法来创建对象 这种也不少见 很多框架中都有使用 Unsafe类来创建实例 xff0c 这种情况非常少见 这里先
  • 【读懂Autosar代码】-1-概述

    点击返回 Autosar从入门到精通 实战篇 总目录 案例背景 共5页精讲 聊一聊这些封装中关键字宏的命名是如何构成的 FUNC FUNC P2CONST FUNC P2VAR P2VAR P2CONST CONSTP2VAR CONSTP
  • AUTOSAR-自旋锁(spinlock)与互斥锁

    AUTOSAR多核OS为实现核间资源互斥 保证数据一致性 设计了自旋锁机制 该机制适用于核间资源互斥 对于多核概念 需要一种新的机制来支持不同内核上任务的互斥 这种新机制不应在同一内核上的 TASK 之间使用 因为它没有意义 在这种情况下
  • Visio简单使用

    查看入门图表 深入了解并开始自行创建内容前 我们将展示 Visio 提供的多个入门图表 通过这种方式 可了解程序中的图表的观感 单击 类别 单击 流程图 现在请注意本步骤 单击 基本流程图 缩略图 下面介绍此对话的全部内容 如果有一些使用
  • 移动端安全通信的利器——端到端加密(E2EE)技术详解

    前言 端到端加密允许数据在从源点到终点的传输过程中始终以密文形式存在 采用端到端加密 又称脱线加密或包加密 时消息在被传输时到达终点之前不进行解密 因为消息在整个传输过程中均受到保护 所以即使有节点被损坏也不会使消息泄露 端到端加密系统与链
  • 一文入门车载以太网,吐血整理!不看后悔!

    前言 近些年来 随着为了让汽车更加安全 智能 环保等 一系列的高级辅助驾驶功能喷涌而出 未来满足这些需求 就对传统的电子电器架构带来了严峻的考验 需要越来越多的电子部件参与信息交互 导致对网络传输速率 稳定性 负载率等方面都提出了更为严格的
  • Autosar软件架构

    软件架构 应用层通过 Simulink模型实现 模型的代码生成使用统一配置脚本 底层软件模块满足AUTOSAR 4 2 1标准要求 其软件架构如下图所示 软件架构 2 2 2 Com通信模块配置 BCU通过唤醒信号控制相应CAN消息的通信使

随机推荐

  • 80篇+网络安全面试经验帖

    网络安全面试经验80篇 43 xff0c 看完妈妈再也不用担心我面试的问题了 汇总以下安全服务岗的面经 xff1a 渗透测试 红队攻防 代码审计 安全研究 红队开发 主要由两部分组成 xff1a 个人面试 互联网收纳整理 一 我的实习 am
  • Bash 中的 ${} 和 $() 有什么区别

    像 Linux 这样的基于 GNU 的操作系统依赖于一个名为 Bash 的命令语言解释器或 Shell 来完成它们的大部分计算任务和目标 Bash 是 Bourne Again Shell 的缩写 xff0c Bunne Again She
  • Go 服务端开发,请牢记这几条

    服务端开发一般是指业务的接口编写 xff0c 对大部分系统来说 xff0c 接口中CURD的操作占了绝大部分 然而 xff0c 网络上总有调侃 CURD工程师 的梗 xff0c 以说明此类开发技术并不复杂 但我个人认为 xff0c 如果仅仅
  • 域格4G模块串口开机自动透传的使用

    首先要求是模块版本为串口自动透传版本 1 模式切换 从透传模式切换至临时指令模式的时序 xff1a 1 串口设备给模块 连续发送 43 43 43 xff0c 模块收到 43 43 43 后 xff0c 会给串口设备发送一个 a 在发送 4
  • 网红送餐无人车冒充AI,真人海外远程操控

    美国网红外卖机器人Kiwibot实际由远在南美哥伦比亚的真人远程操控 xff0c 每人时薪不到2美元 xff0c 最多控制三台 2017年成立的Kiwi Campus公司累计获得200万美元融资 xff0c 约人民币1414万元 xff0c
  • 国产开源基础软件MiniGUI宣布支持RT-Thread!

    北京飞漫软件技术有限公司宣布 xff1a 将在 MiniGUI 4 0 2 版本中支持国产操作系统 RT Thread xff01 这是自 MiniGUI 创始人魏永明在本月初宣布启动 1998 年年底 xff0c 魏永明开始在清华大学开发
  • 既然C编译器是C语言写的,那第一个C编译器是怎样来的?

    来源 xff1a 伯乐在线 xff0c 作者 xff1a Chaobs 首先向C语言之父Dennis Ritchie致敬 xff01 当今几乎所有的实用的编译器 解释器 xff08 以下统称编译器 xff09 都是用C语言编写的 xff0c
  • Oracle推出全球首个自治操作系统~

    原创 xff1a 程序员的那些事 xff08 id xff1a iProgrammer xff09 导读 xff1a 保持系统的修补和安全是 IT 部门目前面临的最大挑战之一 在大规模云环境中 xff0c 此类任务乏味 容易出错 xff0c
  • 基于Autosar的网络安全理解

    目录 1 车载网络安全说明 2 常用的安全加密算法 2 1 对称加密 2 2 非对称加密 2 3 混合加密 2 4 单向散列函数 2 5 消息认证码 2 6 数字签名 3 Autosar的加密模块 3 1 模块说明 3 2 关键数据流说明
  • Linux实用程序——Make快速入门

    1 Make make 是 linux 系统的实用程序 它用于管理对于大型程序的自动编译任务 xff0c 自动决定程序某一部分需要重新编译 xff0c 并发出编译指令 虽然 xff0c 我们最常见于 C 语言程序的编译 但是 xff0c m
  • 干货!学习STM32的一些经验分享

    前言 前两天在群里看到群友们在讨论学习STM32的话题 xff0c 并且今天也有一位机械专业的准研究生读者也问了STM32的入门问题 正好我也有一点点经验 xff0c 所以试着分享一下这个话题 我也不是什么大神 xff0c 只是一名普通的工
  • 为什么买了开发板只能吃灰,还是学不会嵌入式?

    经常有同学问我 xff1a 老师 xff0c 我想学嵌入式 xff0c 应该买哪个板子 xff1f 这个问题本身就是错的 如果你去问10个买过开发板的人 xff0c 至少有8个最终都吃灰了 xff0c 而且他也没通过这个板子以及板子附带的所
  • 基于LiteOS的智慧农业案例实验分享!

    最近在指导一位读者朋友做毕业设计 xff0c 该毕设是关于端云互通的 xff0c 基于小熊派 43 LiteOS 43 华为云 在指导他的过程中我也学到了不少东西 xff0c 这里通过一个案例实验 xff08 智慧农业 xff09 给大家分
  • 漫谈C变量—为什么嵌入式项目中常用静态变量?

    在C语言中 xff0c 按照生命周期来分 xff0c 变量只有两类 xff1a 静态变量和动态变量 其中 xff0c 静态变量是指 xff0c 在编译时刻 xff08 Compiling time xff09 变量的地址和大小都已经确定下来
  • 10月1日后,GitHub用main替代master

    转自 xff1a 开源中国 GitHub 官方表示 xff0c 从 2020 年 10 月 1 日起 xff0c 在该平台上创建的所有新的源代码仓库将默认被命名为 34 main 34 xff0c 而不是原先的 34 master 34 值
  • C++在嵌入式中表现如何?

    这是知乎嵌入式领域的一个热门话题 xff0c 原文链接 xff1a https www zhihu com question 374663834 几个高赞回答 xff1a idea4good xff1a 先说结论 xff1a 嵌入式 单片机
  • 选微处理器MPU,还是单片机MCU?

    每项新应用设计都需要一个单片机或微处理器 当在两者之间选择其一时 xff0c 需要考虑一些因素 以下是微处理器 单片机的概述和对比 考虑选择微处理器 MPU 或者单片机 MCU 时 xff0c 应用类型通常是关键因素 另一方面 xff0c
  • 图解FreeRTOS 原理系列之任务管理器基本框架!

    导读 学习梳理一下FreeRTOS任务管理单元实现思路 xff0c 代码分析基于V10 4 3 从本文开始计划写个图解freeRTOS内核系列笔记分享给朋友们 xff0c 希望大家喜欢 本文主要学习梳理FreeRTOS任务管理器的基本原理
  • 一文带你快速理解FreeRTOS代码规范~

    导读 遇到些朋友感觉FreeRTOS内核代码看起来很不习惯 xff0c 不习惯其编码风格 xff0c 本文就来梳理一下其代码规范 xff0c 便于提高阅读其代码的效率 代码基于FreeRTOS V10 4 3 FreeRTOS代码结构 其内
  • [Adaptive Autosar]深入理解--Persistency

    目录 1 Per架构 2 Per初始化 3 Per错误处理 4 多进程访问 5 冗余存储 6 安装和更新per数据 7 Key Value 方式 8 file storage 方式 9 典型使用代码 Persistency模块对比 CP 中