尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
[AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步
目录关键词平台说明背景一、implicit synchronization1.1 Write requests 流程 (NvM_WriteBlock)1.2 Read requests 流程 (NvM_ReadBlock)1.3 Restore default requests 流程 (NvM_RestoreBlockDefaults)1.4 Multi block read requests 流程 (NvM_ReadAll)1.5 Multi block write requests 流程 (NvM_WriteAll)二、explicit synchronization2.1 Write requests 流程 (NvM_WriteBlock)2.2Read requests 流程 (NvM_ReadBlock)关键词嵌入式、C语言、autosar、OS、BSW平台说明项目ValueOSautosar OSautosar厂商vector EB芯片厂商TI 英飞凌编程语言CC编译器HighTec (GCC)autosar版本4.3.1回到总目录缩写描述EEPROMElectrically Erasable Programmable read only memoryNVMNVRAM ManagerMEMIFMemory Abstraction InterfaceEAEEPROM AbstractionEEPinternal/external EEPROM DRIVERFEEFlash EEPROM EmulationFLSinternal/external Flash DriverFCFSFirst come first served背景NVM与APP之间的data有implicit和explicit两种同步方式本文描述了两种方式之间的区别和实现方式。一、implicit synchronization如NVM模块介绍和使用说明1.1所描述的不论什么类型的NVRAM BLOCK 都至少有一个NV block, 一个RAM block and 一个 Administrative block。implicit synchronization 的意思就是APP 与NVRAM block 共用一个 RAM block。如下图所示不建议多个APP 访问同一个RAM block一是因为在写入期间 RAM 的值不允许改动二是因为多个APP 的读写容易造成冲突和越界。1.1 Write requests 流程 (NvM_WriteBlock)APP 数据写入RAM 中APP发出the NvM_WriteBlock请求此后这个RAM block 的控制权移交给NVM模块。从现在开始APP不允许修改RAM block直到通过异步轮询预留链接位置后面更新详情发出请求成功或者失败的返回。这个时候可以读取RAM block。APP可以用轮询的方式周期性检查NvM写入操作是否完成NvM也可以用回调函数的方式来通知APP操作完成。当NvM操作完成后APP才可以重新更改RAM Block中的值。1.2 Read requests 流程 (NvM_ReadBlock)APP 端提供一个RAM 用于被 NVM 端的RAM block 填充data。APP 发出NvM_ReadBlock 请求此后这个RAM block 的控制权移交给NVM模块。从这一步开始APP不允许读取也不允许写入这个RAM直到通过异步轮询发出请求成功或者失败的返回。APP可以用轮询的方式周期性检查NvM写入操作是否完成NvM也可以用回调函数的方式来通知APP操作完成。当NvM操作完成后APP才可以重新读取和使用RAM Block中的值。1.3 Restore default requests 流程 (NvM_RestoreBlockDefaults)APP 端提供一个RAM 用于被 NVM 端的ROM block 填充data。APP 发出NvM_RestoreBlockDefaults请求此后这个RAM block 的控制权移交给NVM模块。从这一步开始APP不允许读取也不允许写入这个RAM直到通过异步轮询发出请求成功或者失败的返回。APP可以用轮询的方式周期性检查NvM写入操作是否完成NvM也可以用回调函数的方式来通知APP操作完成。当NvM操作完成后APP才可以重新读取和使用RAM Block中被ROM提供的值。1.4 Multi block read requests 流程 (NvM_ReadAll)EcuM Fixed 状态机在启动的时候调用用于读取填充所有permanent block。ECU状态管理器可以使用轮询来获取请求的状态也可以通过回调函数得到通知。在NvM_ReadAll期间将在完全处理完NVRAM块后调用单个块回调(如果配置了)。这些回调使RTE能够单独启动每个SW-C。1.5 Multi block write requests 流程 (NvM_WriteAll)此请求必须仅在系统关闭时由ECU状态管理器触发。这个请求将所有修改过的永久RAM块的内容写入NV内存。通过仅在ECU关闭期间调用此请求ECU状态管理器可以确保在操作结束之前没有SW组件能够修改RAM块中的数据。ECU状态管理器发出NvM_WriteAll请求该请求将控制权转移给NvM模块。ECU状态管理器可以使用轮询来获取请求的状态也可以通过回调函数得到通知。二、explicit synchronization开启explicit sync 配置NvMReadRamBlockFromNvCallback回调读取RAM mirror 数据到 RAM block。NvMWriteRamBlockToNvCallback回调将RAM block 数据写到 RAM mirror。NvMrepeatmirrorOperations:上述两个回调失败时重新执行次数。如下图所示explicit 与implicit synchronization 相比多了一个mirro RAM 显式同步与隐式同步最根本的区别就是显式同步APP是知道NvM使用RAM Block的起始时间点和结束时间点的而且这两个时间点是APP自己来控制的即两个回调函数中的复制操作起始和结束的时间点。APP不需要通过读取NvM的操作状态来判断当前是否可以使用RAM Block。通过一个互斥量设计可以让多个APP同时共享一个RAM BLOCK。注意如果在一个APP 请求 没有执行完的时候APP2又来一个请求NVM会合并两个请求NVM只会处理一次。2.1 Write requests 流程 (NvM_WriteBlock)APP 数据写入RAM 中。APP发出the NvM_WriteBlock请求。APP可以修改RAM block直到NvM模块调用NvMWriteRamBlockToNvM 回调。NvM模块调用NvMWriteRamBlockToNvM回调的时候将RAM block 数据写到 RAM mirror。如果返回E_NOT_OK则表示数据不一致重新执行直到NvMRepeatMirrorOperations次数。成功执行NvMWriteRamBlockToNvM后APP才能重新读写RAM block。APP可以用轮询的方式获取NvM的操作结果NvM也可以用回调函数的方式通知APP操作结果。2.2Read requests 流程 (NvM_ReadBlock)APP 端提供一个RAM 用于被 NVM 端的RAM block 填充data。APP发出NvM_ReadBlock请求。APP可以修改RAM block直到NvM模块调用NvMReadRamBlockFromNvM回调。NvM模块调用NvMReadRamBlockFromNvM 回调的时候将RAM mirror 数据写到 RAM block 。如果返回E_NOT_OK则表示数据不一致重新执行直到NvMRepeatMirrorOperations次数。成功执行NvMReadRamBlockFromNvM 后APP才能重新使用RAM block 的数据。APP可以用轮询的方式获取NvM的操作结果NvM也可以用回调函数的方式通知APP操作结果。回到总目录
RELATED

相关推荐

基于Dify平台构建私有知识库AI助手:从本地部署到RAG智能体实战

基于Dify平台构建私有知识库AI助手:从本地部署到RAG智能体实战

在实际企业级应用开发中,如何将私有知识库与大语言模型(LLM)的能力结合,构建一个既能理解专业领域知识,又能执行复杂逻辑的智能体(Agent),是当前技术落地的核心挑战。Dify 作为一个开…

📅 2026/10/5 2:24:34
把网页小说打包成EPUB电子书:WebToEpub扩展安装与使用指南

把网页小说打包成EPUB电子书:WebToEpub扩展安装与使用指南

把网页小说打包成EPUB电子书:WebToEpub扩展安装与使用指南 【免费下载链接】WebToEpub A simple Chrome (and Firefox) Extension that converts Web Novels (and other web pages) into an EPUB. 项目地址: https://gitcode.com/gh_mirrors/we/WebToEpub We…

📅 2026/10/8 9:29:51
3分钟把开源宏录制工具PyMacroRecord调成中文界面:完整指南

3分钟把开源宏录制工具PyMacroRecord调成中文界面:完整指南

3分钟把开源宏录制工具PyMacroRecord调成中文界面:完整指南 【免费下载链接】PyMacroRecord Free and Open Source Macro Recorder with a modern GUI using Python 项目地址: https://gitcode.com/gh_mirrors/py/PyMacroRecord PyMacroRecord 是一款免费的开…

📅 2026/10/13 17:13:05
MORE NEWS

更多资讯

📰

TensorRT工业部署实战:从Mnist示例解剖INT8校准与跨平台断点

1. 为什么一个Mnist示例值得单独写十八篇?——从“能跑通”到“真落地”的断层真相很多人看到“TensorRT Mnist示例”这几个字,第一反应是:这不就是教科书级的Hello World吗?模型小、数据简单、GPU显存占用不到200MB,连…

📰

Spring Boot汽车销售服务管理系统:从数据库设计到前后端部署全解析

最近有不少同学在挑毕业设计题目,我的建议是别一上来就找那种花里胡哨的“人工智能区块链”标题,先问问自己:这系统我能不能完整讲清楚、能不能真正跑起来。汽车销售服务管理系统就是这么个经典选题——业务脉络清晰,技术栈主流&a…

📰

DAX度量值嵌套实战:上下文传递、VAR与CALCULATE的应用

很多人第一次接触度量值的嵌套使用,都会觉得它不过是在公式里多套几层函数、多引用几个度量值。直到某零售项目的看板里,销售额、达成率、环比、同比、健康度评分全挤在一起时,才发现嵌套真正的难点根本不是“怎么写公式”,而是“…

📰

AnyPS5项目解析:PS5手柄跨平台兼容性与蓝牙HID技术实现

我无法根据当前输入内容生成符合要求的博文。原因如下:输入中仅提供了项目标题"AnyPS5",但未提供任何实质性的【项目正文】、【关键词】或【摘要描述】;所谓“相关热搜词”和“最新网络热词”字段为空,无实际文本&#…

📰

R语言无监督聚类实战:K-means与层次聚类核心原理及调参指南

1. 为什么无监督聚类值得你花时间搞明白做数据分析的人迟早会撞上这样一个场景:手里攥着一份数据,有几十个甚至上百个特征列,但偏偏没有标签。你没法做分类,也没法做回归,因为压根不知道“正确答案”长什么样。这时候聚…

📰

从XMLHttpRequest到Fetch:前端异步请求的机制、封装与实战避坑指南

干前端这些年,我有个很深的感受:很多同学 JS 基础背得滚瓜烂熟,但一碰到数据交互就露怯。项目里十个报错,至少有五个和 JS AJAX 这条链路有关。AJAX 不是一个库,也不是某个框架独有的能力,它是浏览器提供的…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬