[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操作结果。

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

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

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

相关文章

【Python系列】 yaml中写入数据

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

WEB漏洞-文件上传之基础及过滤方式

目录 案例1&#xff1a;百度搜索关键词&#xff0c;找到可能存在漏洞的网页 案例2&#xff1a;不同格式下的文件类型后门测试 案例3&#xff1a;配合解析漏洞下的文件类型后门测试 案例4&#xff1a;本地文件上传漏洞下的文件类型后门测试 案例5&#xff1a;某CVE漏洞利用…

MySQL索引原理

MySQL索引原理 1、Innodb中的B树是怎么产生的呢? 背景1.1、mysql索引使用B树&#xff0c;为什么&#xff1f;1.2、主键索引图示1.3、mysql最好使用自增ID&#xff1a;为什么呢&#xff1f;1.4、高度为3的B树能存多少条数据&#xff1f;a、假设2层b、假设3层 2、索引采用什么数…

从0到1构建uniapp应用-store状态管理

背景 在 UniApp的开发中&#xff0c;状态管理的目标是确保应用数据的一致性&#xff0c;提升用户体验&#xff0c;并简化开发者的工作流程。通过合理的状态管理&#xff0c;可以有效地处理用户交互、数据同步和界面更新等问题。 此文主要用store来管理用户的登陆信息。 重要…

Dubbo入门项目搭建【Dubbo3.2.9、Nacos2.3.0、SpringBoot 2.7.17、Dubbo-Admin 0.6.0】

B站学习视频 基于Dubbo3.2.9、Nacos2.3.0、SpringBoot 2.7.17、Dubbo-Admin 0.6.0、Jdk1.8 搭建的Dubbo学习Demo 一、前置安装 1-1、Nacos 安装 我本地是通过docker-compose来安装nacos的&#xff0c;如果需要其它方式安装可以去百度找下教程&#xff0c;版本是2.3.0的 docker…

新模因币MVP正在受到关注,预计将超越 SHIB 和 BONK

随着一种新的模因币TRUMP进入爆发式增长&#xff0c;加密市场开始对这种基于选举和权利的模因币充满了期待。并引发了人们对过去“玩笑式”模因币未来的疑问&#xff0c;因为当人们审视区块链与现实的意义时&#xff0c;发现&#xff08;SHIB) 和 Bonk (BONK) 等成熟模因币这样…

常见滤波算法(PythonC版本)

简介 受限于MCU自身的ADC外设缺陷&#xff0c;精度和稳定性通常较差&#xff0c;很多场景下需要用滤波算法进行补偿。滤波的主要目的是减少噪声与干扰对数据的影响&#xff0c;让数据更加接近真实值。 一阶低通滤波 一阶低通滤波是一种信号处理技术&#xff0c;用于去除信号中…

在project模式下自定义Implementation Strategies

Implementation Settings定义了默认选项&#xff0c;当要定义新的implementation runs时会使用这些选项&#xff0c;选项的值可以在Vivado IDE中进行配置。 图1展示了“Settings”对话框中的“implementation runs”对话框。要从Vivado IDE打开此对话框&#xff0c;请从主菜单中…

网络通信(一)

网络编程 互联网时代&#xff0c;现在基本上所有的程序都是网络程序&#xff0c;很少有单机版的程序了。 网络编程就是如何在程序中实现两台计算机的通信。 Python语言中&#xff0c;提供了大量的内置模块和第三方模块用于支持各种网络访问&#xff0c;而且Python语言在网络…

QT实现NTP功能

一.NTP基础 1.NTP定义 NTP&#xff08;Network Time Protocol&#xff0c;网络时间协议&#xff09;是由RFC 1305定义的时间同步协议&#xff0c;用于分布式设备&#xff08;比如电脑、手机、智能手表等&#xff09;进行时间同步&#xff0c;避免人工校时的繁琐和由此引入的误…

Web日志/招聘网站/电商大数据项目样例【实时/离线】

Web服务器日志分析项目 业务分析 业务背景 ​ 某大型电商公司&#xff0c;产生原始数据日志某小时达4千五万条&#xff0c;一天日志量月4亿两千万条。 主机规划 &#xff08;可略&#xff09;日志格式&#xff1a; 2017-06-1900:26:36101.200.190.54 GET /sys/ashx/ConfigH…

预处理指令详解

前言 上一节我们了解了文件操作的相关内容&#xff0c;本节我们来了解一下预处理指令&#xff0c;那么废话不多说&#xff0c;我们正式开始今天的学习 预定义符号 在C语言中&#xff0c;设置了一些预定义的符号&#xff0c;可以供我们直接使用&#xff0c;预定义符号是在程序…

一场人生的风险控制,商业社会识人指南

一、资料前言 本套社会识人资料&#xff0c;大小679.94M&#xff0c;共有37个文件。 二、资料目录 识人的终极目的&#xff1a;一整场人生的风险控制.pdf 信任的搭建&#xff1a;更多的时间与维度.pdf 没有搞不定的人&#xff01;角色人格与全面人格.pdf 政治不正确的正确…

程序员为什么不能一次性写好,需要一直改Bug?

程序员为什么不能一次性写好&#xff0c;需要一直改Bug&#xff1f; 我有一问&#xff1a; 你为什么不上清华呢&#xff0c;高考答满分不就行了&#xff1f; 程序员在软件开发过程中可能会遇到需要不断修改Bug的情况&#xff0c;这主要是由以下几个原因造成的&#xff1a; 复杂…

Linux简单介绍

Linux简单介绍 编译器VMware虚拟机Ubuntu——LinuxOS为什么使用LinuxOS&#xff1f; 目录结构Windows目录结构Linux操作系统home是不是家目录&#xff1f; Linux常用命令终端命令行提示符与权限切换命令tab 作用&#xff1a;自动补全上下箭头pwd命令ls命令mkdir命令touch命令rm…

智能革命:ChatGPT3.5与GPT4.0的融合,携手DALL·E 3和Midjourney开启艺术新纪元

迷图网(kk.zlrxjh.top)是一个融合了顶尖人工智能技术的多功能助手&#xff0c;集成了ChatGPT3.5、GPT4.0、DALLE 3和Midjourney等多种智能系统&#xff0c;为用户提供了丰富的体验。以下是对这些技术的概述&#xff1a; ChatGPT3.5是由OpenAI开发的一个自然语言处理模型&#x…

第17章 反射机制

一 反射(Reflection)的概念 1.1 反射的出现背景 Java程序中&#xff0c;所有的对象都有两种类型&#xff1a;编译时类型和运行时类型&#xff0c;而很多时候对象的编译时类型和运行时类型不一致。 Object obj new String(“hello”); obj.getClass() 例如&#xff1a;某些变…

C++多线程:单例模式与共享数据安全(七)

1、单例设计模式 单例设计模式&#xff0c;使用的频率比较高&#xff0c;整个项目中某个特殊的类对象只能创建一个 并且该类只对外暴露一个public方法用来获得这个对象。 单例设计模式又分懒汉式和饿汉式&#xff0c;同时对于懒汉式在多线程并发的情况下存在线程安全问题 饿汉…

深入理解计算机系统 家庭作业 2.75

/* 书中的公式是w位的公式(mod 就是为了截断成w位),我们现在做的是2w位中的前w位 注意书上这句话:由于模运算符,所有带有权重和的项都丢掉 对应到本题 该项除以后还是超过了2w位所以被丢弃了,因为题目说了只有2w位 这个式子除以就是我们想要的最终结果 函数signed_high_p…

前端学习<四>JavaScript基础——03-常量和变量

常量&#xff08;字面量&#xff09;&#xff1a;数字和字符串 常量也称之为“字面量”&#xff0c;是固定值&#xff0c;不可改变。看见什么&#xff0c;它就是什么。 常量有下面这几种&#xff1a; 数字常量&#xff08;数值常量&#xff09; 字符串常量 布尔常量 自定义…