AUTOSAR NvM模块(三)

NvMRbResistantToLayoutRemoval

该参数定义了一个NvM块是否对布局移除具有抵抗性。如果该参数配置为真并且该块已被写入,那么即使该块不再是当前布局的一部分(例如,当配置发生变化并且该块从布局中移除时),底层系统也会将该块保存在持久性存储介质上。

当配置发生变化并且该块被从布局中移除时,该块将无法通过NvM访问。但是,如果配置再次发生变化并且该块被重新配置,那么对该块的访问将再次启用。

如果启用了动态配置(通过NvMDynamicConfiguration参数),那么具有布局移除抵抗性的块必须同时具有对软件更改的抵抗性(通过NvMResistantToChangedSw参数进行配置)。
总的来说,如何确保某些关键的NvM块在配置变更的情况下仍能保留并在必要时重新启用访问权限的机制。

NvMRbSelectBlockForFirstInitAll

配置参数定义了是否在执行NvM_Rb_FirstInitAll操作时处理一个NvM块。
该配置参数可以在以下几种情况下进行设置:
情况 (i):
NvM块是本地块或冗余块,且具有ROM块或InitBlockCallback,且具有永久RAM块或配置为使用显式同步机制。
情况 (ii):
NvM块是本地块或冗余块,且没有ROM块和InitBlockCallback。在这种情况下,NvM块将被NvM_Rb_FirstInitAll操作简单地无效化。
情况 (iii):
NvM块的类型是NVM_BLOCK_DATASET。在这种情况下,NvM块的所有NV块都会被NvM_Rb_FirstInitAll操作无效化。

NvMRbSingleBlockStartCallback

该参数指定了在访问实际存储介质时应调用的块特定回调例程的名称。如果明确不需要调用这样的回调例程,可以在此处输入NULL_PTR。

回调函数的声明:
回调函数的声明取决于配置参数NvMRbCallbackSignatureAR45的值:
NvMRbCallbackSignatureAR45=false:
回调函数的声明应为:Std_ReturnType CallbackName(uint8 ServiceId);
NvMRbCallbackSignatureAR45=true:
回调函数的声明应为:Std_ReturnType CallbackName(NvM_BlockRequestType BlockRequest);

在这个回调函数中,不允许调用任何NvM或DEM函数。这意味着回调函数只能执行独立于NvM和DEM的逻辑操作,不能直接调用这些模块中的函数。

NvMRbWriteCounter

该参数用于定义是否为一个NVRAM块启用写计数器。写计数器用于跟踪对NVRAM块的写操作次数。

当启用写计数器时,存储在非易失性存储器中的数据大小会发生变化。具体而言,块的大小将变为用户数据大小加上写计数器的大小。

这种变化对向后兼容性有重要影响。因为块大小的变化可能导致以前使用该块的系统或软件无法正确识别或处理新的数据格式。

启用写计数器后,由于数据块的总大小发生了变化,所以在涉及数据格式、数据解析以及存储空间分配等方面需要特别注意,以避免兼容性问题。

NvMReadRamBlockFromNvCallback

该参数指定了在需要将数据从NvM模块的镜像复制到RAM块时调用的块特定回调例程的名称。如果明确不需要调用这样的回调例程,可以在此处输入NULL_PTR。

这个回调与NvMBlockUseSyncMechanism参数相关。如果使用同步机制,需要该回调函数来处理数据复制。

对于位于RTE(Runtime Environment)之上的用户,如果NvMRbGenRteServicePort参数设置为TRUE,则这个回调应留空,以便自动生成回调。这意味着在这种情况下,不需要手动指定回调函数的名称。

回调函数的声明必须为:Std_ReturnType CallbackName(void* NvMBuffer);
Std_ReturnType:这是一个标准返回类型,通常用于表示函数的执行结果(如成功或失败)。
CallbackName:这是用户定义的回调函数的名称。
void NvMBuffer*:这是一个指向NvM模块缓冲区的指针,用于在回调函数中访问和复制数据。
函数调用限制:

在这个回调函数中,不允许调用任何NvM或DEM函数。这意味着回调函数只能执行独立于NvM和DEM的逻辑操作,不能直接调用这些模块中的函数。

NvMResistantToChangedSw

这个参数决定了一个NVRAM块是否应在配置更改时保持数据不变。它与其他参数(如NvMCompiledConfigId和NvMDynamicConfiguration)共同作用,确保在配置变更情况下的数据稳定性。

当一个NVRAM块被配置为对配置更改具有抵抗性时,即使配置发生变化,该块的数据也不会被删除或重置。这意味着该块的数据在不同配置版本之间保持一致。
这种机制确保了某些关键数据不会因为配置变化而丢失或被破坏,提供了数据的稳定性和持久性。

NvMRomBlockDataAddress

该参数用于定义一个NVRAM块的ROM块数据的起始地址。

可以通过以下几种方式指定地址:
以十六进制表示法给出地址,例如0x2345BCDE。
使用链接符号的名称,例如MyTestRomBlock。
使用地址符号,例如&MyTestRomBlock。

如果明确表示该块不需要ROM块,可以在此处输入NULL_PTR。

NvM用户应将每个NvM ROM块分配在所谓的“保存恢复区”(saved recovery zone)中。
当使用AUTOSAR机制进行内存分配时,应使用以下内存类:
SEC_CONST_SAVED_RECOVERY_ZONE

NvMRomBlockNum

允许的ROM块数量:

对于本地块或冗余块:允许的ROM块数量范围是 0 到 1。
对于数据集块:允许的ROM块数量范围是 0 到 254。

必须满足以下条件:
NvMNvBlockNum + NvMRomBlockNum <= 255
这个条件确保了NV块(NvMNvBlockNum)和ROM块(NvMRomBlockNum)的总数不超过255。这一要求由引用 [NVM444] 规定。

NvMSelectBlockForReadAll

定义了在执行NvM_ReadAll操作期间是否处理一个NVRAM块。

只有符合以下条件的NVRAM块才允许设置这个配置参数:
NVRAM块配置了永久性RAM块或者NVRAM块配置了使用显式同步机制。
数据集块(通过NvMBlockManagementType参数配置)以及立即优先级块(通过NvMBlockJobPriority参数配置)不允许被选择用于NvM_ReadAll操作。

NvMSelectBlockForWriteAll

定义了在执行NvM_WriteAll操作期间是否处理一个NVRAM块。

只有符合以下条件的NVRAM块才允许设置这个配置参数:
NVRAM块配置了永久性RAM块或者NVRAM块配置了使用显式同步机制。

NvMStaticBlockIDCheck

用于启用或禁用该NVRAM块的静态块ID检查。
目前版本的NvM不支持这一功能,因此这个参数必须始终设置为false。

NvMWriteBlockOnce

启用或禁用一旦NVRAM块成功从存储介质读取或写入后的自动写保护功能。

当自动写保护启用时,一旦NVRAM块的数据成功写入存储介质,该块的数据就会被保护,防止其在写入后被重写。

在NvM_Init之后,块数据成功写入的信息会丢失。要恢复这一信息,通常在尝试对配置为只能写入一次的块执行任何写入/使无效/擦除操作之前,可以通过NvM_ReadAll或NvM_ReadBlock来尝试读取该块。
配置为“写一次”的NvM块允许在布局更改时初始化(请参阅NvMRbInitBlockAtLayoutChange配置参数)。如果块被初始化(即其恢复数据在ReadAll后被写入介质),则在该块上尝试执行任何写入/使无效/擦除操作都将失败。

NvMWriteRamBlockToNvCallback

该参数指定了一个块特定的回调例程的名称,在应用程序中用于将数据从RAM块复制到NvM模块的镜像中。如果不需要调用这样的回调例程,可以在此处输入NULL_PTR。

这个回调与NvMBlockUseSyncMechanism参数相关。如果使用了同步机制,就需要这个回调函数来处理数据复制。

对于位于RTE(Runtime Environment)之上的用户,如果NvMRbGenRteServicePort参数设置为TRUE,则应该将这个回调保留为空,以便自动生成回调。这意味着在这种情况下,不需要手动指定回调函数的名称。
回调函数的声明:
Std_ReturnType CallbackName(void* NvMBuffer);

NvMWriteVerification

启用或禁用写入验证功能。
目前版本的NvM不支持这一功能,因此这个参数必须始终设置为false。

NvMWriteVerificationDataSize

指定在启用写入验证功能时,每步比较RAM块和读回块内容时要比较的字节数。

如果为该块禁用了写入验证功能,则此参数将被忽略。

NvMBlockCipheringRef

如果配置了这个参数,NvM会在存储数据之前对其进行加密,并在恢复数据时对其进行解密。

当配置了加密容器时,NvM会对用户数据进行加密,然后存储在非易失性存储器(NVRAM)中。
在恢复或读取数据时,NvM会对加密的数据进行解密,以便将其还原为原始格式,然后提供给应用程序使用。

如果这个参数为空或未配置(NULL_PTR),则NvM将直接存储和恢复原始的用户数据,没有进行加密或解密处理。

NvMBlockEcucPartitionRef

将NV块映射到一个特定的ECUC分区,或者可以选择不映射到任何ECUC分区。

通过映射NV块到特定的ECUC分区,可以限制只有被指定的分区才能访问该NV块的数据。

所引用的ECUC分区必须属于NvM映射到的ECUC分区子集之一。换句话说,NvM必须已经映射到某个ECUC分区,然后才能将NV块映射到该分区。

NvMRbRamInitAddSavedZoneNameRef

此参数(BSW_SWCS_AR_NVRAMManager_Ext-3440)仅在特定条件下使用:
NvMRbRamInitCheck必须设置为TRUE。
NvMRbRamInitUnconditional必须设置为FALSE。
必须配置了一个PRAM块。

复位标记决定了NvM模块在系统启动或复位时如何初始化PRAM块。
如果未指定具体内容,将使用标准的“SAVEDZONE”声明区段。这个区段确保PRAM块在复位后的初始化行为与其他RAM块类似。

如果PRAM位于具有不同复位行为的RAM区域中,则NvM的初始化行为需要与之同步。
因此,必须在与PRAM同一区段中放置额外的复位标记。用于额外复位标记的声明为 NVM_{START/STOP}SEC_VAR_SAVED_ZONE_32。
参数 NvMRbRamInitAddSavedZoneName 是对 AUTOSAR_SWS_MemoryMapping 中 SEC_VAR_SAVED_ZONE 的进一步细化。

这个区段必须添加到 NvM_MemMap.h 中(如果没有使用 MemMapGen)或者 MemMap-Pragma-configuration xpt 文件中(如果使用了 MemMapGen)。

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

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

相关文章

资产编排大师:Symfony资产组件的全面解析

资产编排大师&#xff1a;Symfony资产组件的全面解析 在现代Web开发中&#xff0c;Symfony框架以其强大的组件系统而著称。资产组件是Symfony提供的关键工具之一&#xff0c;用于管理和优化前端资源&#xff0c;如JavaScript、CSS、图片等。本文将深入探讨Symfony资产组件的功…

全球AI新闻速递6.28

全球AI新闻速递 1.首款 Transformer 专用 AI 芯片 Sohu 登场。 2.钉钉&#xff1a;宣布对所有AI大模型厂商开放&#xff0c;首批7家接入。 3.华为联合清华大学发布《AI 终端白皮书》。 4.国家卫生健康委&#xff1a;推动AI技术在制定个性化营养、运动干预方案中的应用。 …

1Python的Pandas:基本简介

1. Pandas的简介 Pandas 是一个开源的 Python 数据分析库&#xff0c;由 Wes McKinney 在 2008 年开始开发&#xff0c;目的是为了解决数据分析任务中的各种需求。Pandas 是基于 NumPy 库构建的&#xff0c;它使得数据处理和分析工作变得更加快速和简单。Pandas 提供了易于使用…

项目实战--Spring Boot实现三次登录容错功能

一、功能描述 项目设计要求输入三次错误密码后&#xff0c;要求隔段时间才能继续进行登录操作&#xff0c;这里简单记录一下实现思路 二、设计方案 有几个问题需要考虑一下&#xff1a; 1.是只有输错密码才锁定&#xff0c;还是账户名和密码任何一个输错就锁定&#xff1f;2…

Android程序崩溃定位

Crash:程序在执行过程中,由于一些未知问题经常会带来程序崩溃、闪退等现象,这是由于代码中出现了一些类似数组越界、访问非法内存等问题造成的。为了高效解决问题,我们首先需要快速定位到问题的位置。 add2line:add2line是一个可以将指令的地址转换为源代码行数的工具。当…

父子节点内容和个数提取

有时我们需要获得菜单的内容和个数&#xff0c;这个时候通常有父子菜单&#xff0c;那么怎么分别获取到他们呢&#xff1f;以下面的智慧物业管理系统为例&#xff0c;有7个父节点&#xff0c;每个父节点下面有子节点。如何把父节点名称和总数&#xff0c;以及子节点的名称和总数…

[信号与系统]IIR滤波器与FIR滤波器相位延迟定量的推导。

IIR滤波器与FIR滤波器最大的不同&#xff1a;相位延迟 IIR滤波器相位延迟分析 相位响应和延迟 这里讨论一下理想延迟系统的相位延迟。 对于一个给定的系统频率响应 H ( e j w ) H(e^{jw}) H(ejw)可以表示为 H ( e j w ) ∣ H ( e j w ) ∣ e Φ ( w ) H(e^{jw}) |H(e^{jw…

拆分盘投资策略解析:机制、案例与风险考量

一、引言 随着互联网技术的迅猛发展和金融市场的不断创新&#xff0c;拆分盘这一投资模式逐渐崭露头角&#xff0c;成为投资者关注的焦点。它基于特定的拆分策略&#xff0c;通过调整投资者持有的份额和单价&#xff0c;实现了看似稳健的资产增长。本文旨在深入探讨拆分盘的运…

打造离散制造行业的未来:PLM系统的应用

在全球竞争日益激烈的今天&#xff0c;离散制造行业面临着前所未有的挑战和机遇。企业必须不断创新&#xff0c;提高效率&#xff0c;以满足市场需求。而产品生命周期管理&#xff08;PLM&#xff09;系统的引入&#xff0c;为这一行业带来了新的变革契机。 什么是PLM系统&…

鸿蒙开发设备管理:【@ohos.multimodalInput.inputEvent (输入事件)】

输入事件 InputEvent模块描述了设备上报的基本事件。 说明&#xff1a; 本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import InputEvent from ohos.multimodalInput.inputEvent;InputEvent 系统能力…

WPS图片无法居中、居中按钮无法点击(是灰色的)

在PPT中复制对象到WPS word中后&#xff0c;导致图片一直靠左&#xff0c;而无法居中 直接选中图片是错误的&#xff1a; 这时你会发现居中按钮无法点击&#xff08;是灰色的&#xff09; 正确的是选中图片的前面的部分&#xff0c;然后点击居中&#xff0c;或者Ctrl E

昇思25天学习打卡营第10天|FCN图像语义分割

一、简介&#xff1a; 本篇博客是昇思大模型打卡营应用实践部分的第一次分享&#xff0c;主题是计算机视觉&#xff08;CV&#xff09;领域的FCN图像语义分割&#xff0c;接下来几天还会陆续分享其他CV领域的知识&#xff08;doge&#xff09;。 全卷积网络&#xff08;Fully…

博客建站2 - 选择网站服务器

1. 本网站的系统架构2. 是否需要购买服务器3. 如何选择服务器 3.1. 确定需求3.2. 云服务提供商 3.2.1. 国内与海外3.2.2. 国内的服务器供应商 3.3. 服务器类型 3.3.1. 共享主机3.3.2. 虚拟私有服务器&#xff08;VPS&#xff09;3.3.3. 云服务器3.3.4. 个人建议 3.4. 服务器位置…

软件测试面试八股文【答案+文档】

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我…

基于Java实现图像浏览器的设计与实现

图像浏览器的设计与实现 前言一、需求分析选题意义应用意义功能需求关键技术系统用例图设计JPG系统用例图图片查看系统用例图 二、概要设计JPG.javaPicture.java 三、详细设计类图JPG.java UML类图picture.java UML类图 界面设计JPG.javapicture.java 四、源代码JPG.javapictur…

深入理解pytest fixture:提升测试的灵活性和可维护性!

在现代软件开发中&#xff0c;测试是保证代码质量的重要环节。pytest作为一个强大的测试框架&#xff0c;以其灵活的fixture系统脱颖而出。本文将详细介绍pytest中的fixture概念&#xff0c;通过具体案例展示其应用&#xff0c;并说明如何利用fixture提高测试的灵活性和可维护性…

uart串口通信

UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09; 异步收发传输器 优缺点可以分点表示和归纳 优点 线路简洁&#xff1a;仅使用两根传输线&#xff08;TX和RX&#xff09;&#xff0c;简化了硬件连接&#xff0c;降低了成本无需时钟信号&#xff…

EKF+UKF+CKF+PF的效果对比|三维非线性滤波|MATLAB例程

前言 标题里的EKF、UKF、CKF、PF分别为&#xff1a;扩展卡尔曼滤波、无迹卡尔曼滤波、容积卡尔曼滤波、粒子滤波。 EKF是扩展卡尔曼滤波&#xff0c;计算快&#xff0c;最常用于非线性状态方程或观测方程下的卡尔曼滤波。 但是EKF应对强非线性的系统时&#xff0c;估计效果不如…

头文件没有string.h ----- 怎么统计字符串的长度?

字符串的逆序&#xff08;看收藏里面的题&#xff09; 第一种方式&#xff1a; #include <stdio.h> void f(char *p);int main() {char s[1000];gets(s);f(s);printf("%s",s);return 0; }void f(char *p) {int i0;int q,k0;while(p[i]!\0){i;}while(k<i){…