AUTOSAR NvM模块(二)

NvMMaxNumOfReadRetries

定义了最大读取重试次数。当前版本的NvM不支持此功能,因此此参数始终需要设置为0。

NvMMaxNumOfWriteRetries

定义了最大写入重试次数。当前版本的NvM不支持此功能,因此这个参数总是需要设置为0。

NvMNvBlockLength

定义了NV块数据的长度,单位是字节。(提示:NvM内部保留了128字节的空间,因此最大块长度是65535-128=65407字节。)

NvMNvBlockNum

定义了根据给定的块管理类型,在连续区域内多个NV块的数量。允许的NV块数量是:

对于一个本地块,数量为1;
对于一个冗余块,数量为2;
对于一个数据集块,数量为1到255。
此外,还必须满足以下条件:

NvMNvBlockNum(非易失性存储块的数量)加上NvMRomBlockNum(只读存储块的数量)必须小于或等于255。

NvMNvramBlockIdentifier

通过一个唯一的块标识符来识别NVRAM块,该标识符用于NvM API函数(不用于内存硬件抽象层,也不用于存储介质)。值0保留用于多块相关的操作及其结果。值1保留用于包含配置ID的块,该配置ID作为动态配置特性的一部分使用。所有块的标识符必须是连续的,即块标识符的序列中不能有任何间隔。所有多块操作都按升序ID顺序进行,这意味着ID较低的块比ID较高的块更早被读取和写入。如果不为块明确指定一个标识符,NvM将自动分配这样一个标识符。

NvMNvramDeviceId

标识NVRAM块所在设备的标识符。与AUTOSAR的NvM规范不同,这不是一个从Ea/Fee模块配置中派生的参数,而是在这里直接指定设备标识符(Ea/Fee块配置是完全自动生成的)。注意:如果NVRAM块应该位于Ea设备上,那么用户应使用在容器NvMRbEaDevices中定义的Ea设备ID。如果这里使用的ID在容器NvMRbEaDevices中没有对应的定义,则NVRAM块将不会位于Ea设备上。注意:设备ID 0固定用于指向Fee。如果使用Fee,则所有相应的块都应使用设备ID 0。如果有多个Fee,则第一个Fee(通常是用于内部闪存的Fee)应使用设备ID 0,所有其他Fee可以使用其他设备ID。

NvMRamBlockDataAddress

定义了永久RAM块数据的起始地址。你可以在这里提供一个十六进制表示的地址(例如0x1234ABCD),或者一个链接器符号的名称(例如MyTestRamBlock),或者地址(例如&MyTestRamBlock)。如果你明确指定不为此块使用永久RAM块,请在这里输入NULL_PTR。

NvM用户应在称为"saved zone"的RAM区域内为每个NvM RAM块分配内存。当使用AUTOSAR机制进行内存分配时,应使用内存类SEC_VAR_SAVED_ZONE。

注意:为多个NvM块配置相同的永久RAM是可能的,但非常不推荐。实际上,共享相同永久RAM块的其他NvM块的所有者也可能会修改共享RAM块的内容。因此,需要在共享公共永久RAM块的不同NvM块的所有者之间建立某种读写访问同步机制。

NvMRbBackupBlock

定义了应使用rba_MemBckp组件将块包含在块备份中。注意:该特性仅适用于Fee块,并且不支持与可变长度块(NvMNvBlockLength = 0)的组合。
TRUE:块被包含在备份中。
FALSE:块不被包含在备份中。

NvMRbBlockJobImmSubPriority

为NVRAM块定义了立即作业优先级的子优先级。只有在通过NvMJobPrioritization配置参数启用了优先级作业处理时,才能启用立即作业优先级的子优先级。

NvMRbBlockPersistentId

为这个块定义了一个独特的ID,代表其特定的块属性。只有在这些块特定属性以不兼容的方式被修改时,才应更改此ID。这个ID存储在存储介质上,是存储驱动程序(Fee、Eep)中块识别的基础。与C API中用于块识别的ID不同,对于给定的块,这个ID在存储堆栈的所有模块中是相同的。即使在块布局中添加或删除了其他块,它的值通常也保持不变。不允许任何两个块具有相同的持久ID。此外,持久ID 0和65535保留供内部使用。如果不为块明确指定一个持久ID,NvM将根据块名称和块长度自动分配这样一个标识符。

NvMRbBlockVersion

定义了块的版本。
如果为这个块配置了版本,它将与用户数据一起存储到非易失性存储器中。
用户可以通过将此参数设置为非零值来启用此功能,值为零表示该块没有块版本。
如果用户对块的内部结构进行了重大更改,则应更新块版本。
如果为块配置了版本,在读取块请求期间,如果配置的版本与读取的版本匹配,则正常执行读取请求;如果不匹配,则使用默认值,如果没有默认值可用,则NvM不提供任何值。

NvMRbFirstReadDataMigration

启用/禁用此块的首次读取数据迁移特性。当首次读取数据迁移功能被启用时,如果配置的NV块长度与介质(EEPROM)上的块长度不匹配,也会执行读取作业。如果NV块长度小于介质上的块长度,则剩余数据将被丢弃。如果NV块长度大于介质上的块长度,则剩余数据将用零填充。如果该特性被禁用,并且发生长度不匹配,则不执行读取作业。

NvMRbInitBlockAtLayoutChange

定义了如果检测到块布局变化,NvM块是否应该被初始化。在这种情况下,块首先在ReadAll期间被读取。如果无法从介质中检索到块,则在ReadAll执行后,初始化数据(来自ROM块或通过初始化回调)将被写入介质。

此配置参数在以下条件下被允许设置为“true”:
(1) 公共配置参数NvMRbInitAtLayoutChange被设置为“true”。
(2) 块是本地块或冗余块。
(3) 块具有标准优先级。
(4) 块有一个ROM块或初始化回调。
(5) 块有一个RAM块或配置了显式同步。
(6) 块配置为ReadAll。
(7) 另外,如果启用了动态配置,则此块必须是对软件变更有抵抗力的。

提示:如果检测到配置ID不匹配,则块将被初始化(即在ReadAll之后写入介质)。因此,在用此特性配置块时,应通过NvMCompiledConfigId参数配置一个新的编译后的配置ID(否则块不会被初始化)。

NvMRbNoFallback

这个配置激活或停用一个回退机制,用于访问相同块的旧副本。它仅对位于Fee上的块进行评估,并对位于Ea上的块忽略。默认情况下,此特性设置为false,这是Fee块的标准行为(即,较旧的相同块的值优先于根本不提供块数据)。在Ea中,原则上永远不会提供旧值,因此位于Ea上的块将表现得好像这个标签被设置为true,不管它的实际设置如何。如果这个标签被设置为true,并且相应的块位于Fee上,如果最新的块实例完全损坏,则不会返回旧值。在这种情况下,将报告不一致的状态。注意:当第一次启用此特性时,存储介质上已有的相应块的实例可能不再可读。此外,一些Fee配置可能根本不支持此特性。有关详细信息,请参阅Fee的文档。

NvMRbNvBlockLengthString

定义了NV块数据的长度,单位为字节。C编程语言中的所有可能的R-VALUE(运行时值)都支持,除了单独的数字字面量。在C表达式的末尾不需要分号。对于数字字面量,使用NvMNvBlockLength或定义指令(define directive)。例如,如果要配置空(Null)块长度,请使用像NV_BLOCK_LENGTH_NULL这样的定义指令。这里使用的所有R-Value都必须由用户声明。此外,用户还必须让NvM_Cfg.c知道这一点。因此,必须使用配置参数NvMBlockHeaderInclude。

NvMRbRamBlockDataAddressString

定义了NV块数据的长度,单位为字节。C编程语言中的所有可能的R-VALUE(运行时值)都支持,除了单独的数字字面量。在C表达式的末尾不需要分号。对于数字字面量,使用NvMNvBlockLength或定义指令(define directive)。例如,如果要配置空(Null)块长度,请使用像NV_BLOCK_LENGTH_NULL这样的定义指令。这里使用的所有R-Value都必须由用户声明。此外,用户还必须让NvM_Cfg.c知道这一点。因此,必须使用配置参数NvMBlockHeaderInclude。

NvMRbRamInitUnconditional

此参数设定是否永久性地初始化RAM块。

真(true):即使在上一次复位之后该块未发生变化,也会进行初始化(共用参数NvMRbRamInitCheck设置为NVM_RAM_INIT_CHECK_QUICK)。
假(false):永久RAM块的初始化将根据参数NvMRbRamInitCheck的设置来决定。

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

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

相关文章

Winform中控件与模型MVC

在Windows Forms (WinForms) 应用程序开发中,用户控件(UserControl)与模型(Model)的结合使用是一种常见的MVC(Model-View-Controller)模式的体现,能够有效地分离界面表示层与业务逻辑层,从而提高代码的可维护性和复用性…

【vue3|第14期】深入Vue3自定义Hooks:掌握组件逻辑复用的核心

日期:2024年6月26日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xf…

动力环境监控系统内部绝密报价!动环监控系统全套价格一览

作为一个综合性的监控系统,动力环境监控系统包含动力系统、环境系统、安防系统等,是整个机房的控制中枢,无论哪里出现问题都可以实时监测到,并在第一时间通知管理人员。当然,根据机房大小和监测需求不同,动…

Windows系统开启python虚拟环境

.\env4socre\Scripts\activate : 无法加载文件 E:\SocreMan\env4socre\Scripts\Activate.ps1,因为在此系统上禁止运行脚本。 环境:windows 11、vscode 1、用管理员权限打开powershell 输入set-executionpolicy remotesigned,选择Y 2、返回v…

初识ECMAScript 6 (ES6)

ECMAScript 6 (ES6),也称为 ECMAScript 2015,是 JavaScript 的一个主要更新,增加了许多新的特性和改进,使得编写 JavaScript 更加简洁、高效和易于维护。以下是 ES6 中的一些重要特性及其详细阐述: 1. 块级作用域 (Bl…

稀疏迭代最近点算法(Sparse ICP)

2013年,2013年Sofien Bouaziz等提出了一种新的ICP改进算法,稀疏迭代最近点(Sparse Iterative Closest Point, Sparse ICP)算法。更多扩展资料可参看随书附赠资源中的说明文档。 Sparse ICP算法的设计的灵感、应用范围、优缺点和泛化能力 两个几何数据集…

oninput和onchange事件有什么区别?

onchange事件:触发条件:在域内容更改时触发,也可用于单选框和复选框改变后触发;作用 对象:select、input、textarea。 oninput事件:触发事件:在域内容更改时触发(严格说是用户输入时…

NAS—网络附加存储

关键词:私有化存储、Nas、云盘、群晖、Tailscale、 前言 身处于互联网时代的我们,几乎每时每刻都在与计算机打交道,而软件则作为我们和计算机之间沟通的桥梁,因此可以认为软件的作用是:将计算机能力进行包装&#xf…

【React】如何监听LocalStorage的变化

在代码中遇到了需要在react中监听localStorage的数据,下意识想到的是按照useEffect监听useState变化那一套,但是未生效。 代码如下: useEffect(()>{console.log("变化了") },[localStorage.getItem(data)])需要使用监听器 us…

Java基础入门day72

day72 mybatis mybatis的实现方式 三种实现方式: 纯xml方式,namespace随便写,id随便写,只要保证整个项目namespaceid唯一即可 xml接口的方式,namespace必须是接口的全路径,id必须是接口的方法名&#xf…

瓦罗兰特新赛季更新资讯 瓦罗兰特新赛季免费加速器

瓦罗兰特新赛季来喽,这是一款由拳头开发的免费第一人称射击游戏,游戏凭借其独特的玩法和丰富的英雄选择吸引了大量玩家。 我们可以在游戏中选择自己喜欢的角色出场与敌人进行对战,而且每一个角色都有自己独特的道具以及技能,使用好…

SwiftUI 中的内容边距

文章目录 前言创建示例适配 iPad使用 contentMargins可运行 Demo总结前言 SwiftUI 引入了一组视图修饰符,使我们能够有效地管理视图中的安全区域。在许多情况下,安全区域是你希望放置内容的地方。今天,我们将了解 SwiftUI 引入的新内容边距概念以及它与安全区域的区别。 创…

MySQL数据管理

表的基本概念 数据完整性 实体完整性 每一行必须是唯一的实体 域完整性 检查每一列是否有效 引用完整性 确保所有表中的数据的一致性,不允许引用不存在的值 用户定义的完整性 制定特定的业务规则 主键 用于唯一标识表中的行数据由一个或多个字段组成具有唯一性…

【Proteus仿真】多变循环彩灯

【Proteus仿真】多变循环彩灯 ‍ 01功能描述 10种灯光效果可通过按键进行切换/通过按键切换灯光效果,通过数码管显示当前灯光模式,并通过按键调节当前灯光速度快慢。 02原理图 ​​ ‍ 03资料内容 源码仿真 04资料获取链接 https://docs.qq.co…

【unity笔记】五、UI面板TextMeshPro 添加中文字体

Unity 中 TextMeshPro不支持中文字体,下面为解决方法: 准备字体文件,从Windows系统文件的Fonts文件夹里拖一个.ttf文件(C盘 > Windows > Fonts ) 准备字库文件,新建一个文本文件,命名为“字库”&…

确认偏差:金融市场交易中的隐形障碍

确认偏差,作为一种深刻影响交易员决策与表现的心理现象,其核心在于个体倾向于寻求与既有信念相符的信息,而自动过滤或轻视与之相悖的资讯。这种认知偏见严重扭曲了交易者的决策过程,导致他们过分依赖符合既有观念的数据&#xff0…

pdf合并,这三种方法学会了吗?

在信息爆炸的时代,PDF文档凭借其跨平台、不易修改的特性,成为了我们工作和学习中不可或缺的一部分。然而,当面对多个PDF文件需要合并成一个完整的文档时,许多人可能会感到头疼。今天,就让我们一起来探讨三种高效的PDF合…

Rust Eq 和 PartialEq

Eq 和 PartialEq 在 Rust 中&#xff0c;想要重载操作符&#xff0c;你就需要实现对应的特征。 例如 <、<、> 和 > 需要实现 PartialOrd 特征: use std::fmt::Display;struct Pair<T> {x: T,y: T, }impl<T> Pair<T> {fn new(x: T, y: T) ->…

C#——里氏转换详情

里氏转换 里氏转换就是派生类的对象赋值给父类对象&#xff0c;反之则不行 实例 : 先创键一个类然后继承 调用

LLM App统计报告【Streamlit】

本文重点介绍了 Streamlit 报告&#xff1a;2023 年 LLM 应用状况&#xff0c;深入了解了 2023 年在 Streamlit 社区云上部署的所有 LLM 应用程序的统计数据。 Streamlit 是一个开源框架&#xff0c;旨在方便部署数据科学和机器学习应用程序。LLM 的最新发展使 Streamlit 成为开…