[Adaptive Autosar]深入理解--Persistency

目录

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;
}

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Autosar是汽车行业的一个开放性的标准化平台,旨在推动汽车电子系统的可重用性、标准化和互操作性。Adaptive AutosarAutosar的最新版本,旨在通过引入自适应功能,实现更高级别的电子控制单元(ECU)架构和功能。 Adaptive Autosar标准-21-11是指版本为21.11的Adaptive Autosar标准。这个版本引入了一些新的功能和特性,以提升汽车电子系统的性能和灵活性。 首先,在-21-11版本中,引入了基于虚拟功能总线(VFB)的通信机制。VFB是一个软件组件,用于在不同的ECUs之间进行通信。通过使用VFB,不同ECUs之间的通信可以变得更加灵活和高效。此外,这个版本还引入了一种新的应用级别的网络协议,提供了更好的网络通信能力。 其次,-21-11版本还引入了一些新的自适应功能,例如自适应应用程序接口(API)和自适应软件体系结构。这些功能使车辆的软件系统能够根据不同的环境条件进行自适应,从而提升车辆的性能和安全性。同时,这个版本还引入了一些新的软件定义网络(SDN)功能,用于提供车辆互联和通信的灵活性。 最后,在-21-11版本中,还针对软件开发过程进行了一些改进。新的标准强调了模型驱动的开发方法和自动化测试技术的应用,以提高软件开发的效率和质量。 总体来说,Adaptive Autosar标准-21-11通过引入自适应功能和改进软件开发过程,提升了汽车电子系统的性能、灵活性和安全性。这将有助于推动汽车行业的技术创新和发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值