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)。

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
AUTOSAR NVM是一种用于非易失性存储器(Non-Volatile Memory)的模块,根据引用\[1\]中的描述,它分为三种类型:NATIVE、DATASET和REDUNDANT。AUTOSAR NVM模块的配置是基于AUTOSAR标准,不受限于任何工具。该模块提供了API来进行数据的读写操作。 根据引用\[2\],AUTOSAR NVM模块中的显式同步NVM定义了一个RAM Mirror用于和APP进行数据交换。当APP调用NvM_WriteBlock时,数据会被写入RAM Block中,此时数据仍然可以被修改。当调用NVM数据操作NvMWriteRamBlockToNvM时,数据会被复制到内部的Mirror中,并最终写入Nv Block。 在读取数据时,AUTOSAR NVM模块会调用API从NvM_ReadBlock中读取数据,然后通过调用NvMReadRamBlockFromNvM将数据从RAM Mirror复制到RAM Block中,如引用\[3\]所述。NvM还提供了双向的控制Callback的路由,以实现APP数据的传输。 总之,AUTOSAR NVM是一种用于非易失性存储器的模块,它提供了API来进行数据的读写操作,并通过RAM Mirror和RAM Block进行数据交换。 #### 引用[.reference_title] - *1* [AUTOSAR NvM&Fee Configuration](https://blog.csdn.net/tiankefeng19850520/article/details/122792830)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Autosar NvM 详解](https://blog.csdn.net/king110108/article/details/125032885)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

美好生活丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值