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的设置来决定。