当前位置: 首页 > news >正文

[AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步

目录

  • 关键词
  • 平台说明
  • 背景
  • 一、implicit synchronization
    • 1.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 synchronization
    • 2.1 Write requests 流程 (NvM_WriteBlock)
    • 2.2Read requests 流程 (NvM_ReadBlock)

  

关键词

嵌入式、C语言、autosar、OS、BSW

平台说明

项目Value
OSautosar OS
autosar厂商vector , EB
芯片厂商TI 英飞凌
编程语言C,C++
编译器HighTec (GCC)
autosar版本4.3.1

在这里插入图片描述
  
  
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  
  

缩写描述
EEPROMElectrically Erasable Programmable read only memory
NVMNVRAM Manager
MEMIFMemory Abstraction Interface
EAEEPROM Abstraction
EEPinternal/external EEPROM DRIVER
FEEFlash EEPROM Emulation
FLSinternal/external Flash Driver
FCFSFirst 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)

    1. APP 数据写入RAM 中
    1. APP发出the NvM_WriteBlock请求,此后这个RAM block 的控制权移交给NVM模块。
    1. 从现在开始,APP不允许修改RAM block,直到通过异步轮询(预留链接位置,后面更新详情)发出请求成功或者失败的返回。这个时候可以读取RAM block。
    1. APP可以用轮询的方式周期性检查NvM写入操作是否完成,NvM也可以用回调函数的方式来通知APP操作完成。
    1. 当NvM操作完成后,APP才可以重新更改RAM Block中的值。
        

1.2 Read requests 流程 (NvM_ReadBlock)

    1. APP 端提供一个RAM 用于被 NVM 端的RAM block 填充data。
    1. APP 发出NvM_ReadBlock 请求,此后这个RAM block 的控制权移交给NVM模块。
    1. 从这一步开始,APP不允许读取 也不允许写入这个RAM,直到通过异步轮询发出请求成功或者失败的返回。
    1. APP可以用轮询的方式周期性检查NvM写入操作是否完成,NvM也可以用回调函数的方式来通知APP操作完成。
    1. 当NvM操作完成后,APP才可以重新读取和使用RAM Block中的值。

1.3 Restore default requests 流程 (NvM_RestoreBlockDefaults)

    1. APP 端提供一个RAM 用于被 NVM 端的ROM block 填充data。
    1. APP 发出NvM_RestoreBlockDefaults请求,此后这个RAM block 的控制权移交给NVM模块。
    1. 从这一步开始,APP不允许读取 也不允许写入这个RAM,直到通过异步轮询发出请求成功或者失败的返回。
      1. APP可以用轮询的方式周期性检查NvM写入操作是否完成,NvM也可以用回调函数的方式来通知APP操作完成。
    1. 当NvM操作完成后,APP才可以重新读取和使用RAM Block中被ROM提供的值。

1.4 Multi block read requests 流程 (NvM_ReadAll)

  EcuM Fixed 状态机在启动的时候调用,用于读取填充所有permanent block。

    1. ECU状态管理器可以使用轮询来获取请求的状态,也可以通过回调函数得到通知。
    1. 在NvM_ReadAll期间,将在完全处理完NVRAM块后调用单个块回调(如果配置了)。这些回调使RTE能够单独启动每个SW-C。

1.5 Multi block write requests 流程 (NvM_WriteAll)

  此请求必须仅在系统关闭时由ECU状态管理器触发。这个请求将所有修改过的永久RAM块的内容写入NV内存。通过仅在ECU关闭期间调用此请求,ECU状态管理器可以确保在操作结束之前,没有SW组件能够修改RAM块中的数据。

    1. ECU状态管理器发出NvM_WriteAll请求,该请求将控制权转移给NvM模块。
    1. 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)

    1. APP 数据写入RAM 中。
    1. APP发出the NvM_WriteBlock请求。
    1. APP可以修改RAM block,直到NvM模块调用NvMWriteRamBlockToNvM 回调。
    1. NvM模块调用NvMWriteRamBlockToNvM回调的时候,将RAM block 数据写到 RAM mirror。如果返回E_NOT_OK则表示数据不一致,重新执行直到NvMRepeatMirrorOperations次数。
    1. 成功执行NvMWriteRamBlockToNvM后,APP才能重新读写RAM block。
    1. APP可以用轮询的方式获取NvM的操作结果,NvM也可以用回调函数的方式通知APP操作结果。

2.2Read requests 流程 (NvM_ReadBlock)

    1. APP 端提供一个RAM 用于被 NVM 端的RAM block 填充data。
    1. APP发出NvM_ReadBlock请求。
    1. APP可以修改RAM block,直到NvM模块调用NvMReadRamBlockFromNvM回调。
    1. NvM模块调用NvMReadRamBlockFromNvM 回调的时候,将RAM mirror 数据写到 RAM block 。如果返回E_NOT_OK则表示数据不一致,重新执行直到NvMRepeatMirrorOperations次数。
    1. 成功执行NvMReadRamBlockFromNvM 后,APP才能重新使用RAM block 的数据。
    1. APP可以用轮询的方式获取NvM的操作结果,NvM也可以用回调函数的方式通知APP操作结果。

  
  
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

相关文章:

  • 网络安全 | 什么是单点登录SSO?
  • 业务网关的设计与实践
  • 配置 施耐德 modbusTCP 分布式IO子站 RPA0100
  • HTML中js简单实现石头剪刀布游戏
  • [技术闲聊]我对电路设计的理解(二)-突飞猛进的第一年
  • 『python爬虫』巨量http代理使用 每天白嫖1000ip(保姆级图文)
  • 接口测试用例设计
  • 前端路径问题总结
  • 物联网实战--入门篇之(六)嵌入式-WIFI驱动(ESP8266)
  • 2024-04-04 问AI: 在深度学习中,微调是什么?
  • 大数据实验三-HBase编程实践
  • intellij idea 使用git ,快速合并冲突
  • 实现 select 中嵌套 tree 外加搜索
  • ROS 2边学边练(12)-- 创建一个工作空间
  • 提高空调压缩机能效的通用方法
  • 【EOS】Cleos基础
  • 【剑指offer】让抽象问题具体化
  • ➹使用webpack配置多页面应用(MPA)
  • 78. Subsets
  • Computed property XXX was assigned to but it has no setter
  • es6(二):字符串的扩展
  • Fastjson的基本使用方法大全
  • Java,console输出实时的转向GUI textbox
  • js操作时间(持续更新)
  • leetcode-27. Remove Element
  • Nacos系列:Nacos的Java SDK使用
  • passportjs 源码分析
  • Promise面试题,控制异步流程
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • webpack入门学习手记(二)
  • 代理模式
  • 飞驰在Mesos的涡轮引擎上
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • ------- 计算机网络基础
  • 前言-如何学习区块链
  • 三分钟教你同步 Visual Studio Code 设置
  • 数据科学 第 3 章 11 字符串处理
  • 思考 CSS 架构
  • 因为阿里,他们成了“杭漂”
  • 中文输入法与React文本输入框的问题与解决方案
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 数据可视化之下发图实践
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET框架
  • @Builder用法
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作