NVRAM Manager (NvM)
Provides synchronous and asynchronous block-based data management for non-volatile storage (EEPROM, Flash).
Funktionen — Übersicht
void NvM_Init (const NvM_ConfigType* ConfigPtr);Service for resetting all internal variables.Std_ReturnType NvM_SetDataIndex (NvM_BlockIdType BlockId, uint8 DataIndex);Service for setting the Data Inde x of a dataset NVRAM block.Std_ReturnType NvM_GetDataIndex (NvM_BlockIdType BlockId, uint8* DataIndexPtr);Service for getting the currently set Data Index of a datase t NVRAM blockStd_ReturnType NvM_SetBlockProtection (NvM_BlockIdType BlockId, boolean ProtectionEnabled);Service for setting/ resetting the write protection for a NV block.Std_ReturnType NvM_GetErrorStatus (NvM_BlockIdType BlockId, NvM_RequestResultType* RequestResultPtr);Service to read the block dependent error/ status information.void NvM_GetVersionInfo (Std_VersionInfoType* versioninfo);Service to get the version information of the Nv M module.Std_ReturnType NvM_SetRamBlockStatus (NvM_BlockIdType BlockId, boolean BlockChanged);Service for setting the RAM block status of a permanent RAM block or the status of the explicit synchronization of a NVRAM block.void NvM_SetBlockLockStatus (NvM_BlockIdType BlockId, boolean BlockLocked);Service for setting the lock status of a permanent RAM block or of the explicit synchronization of a NVRAM block.Std_ReturnType NvM_CancelJobs (NvM_BlockIdType BlockId);Service to cancel all jobs pending for a NV block.Std_ReturnType NvM_ReadBlock (NvM_BlockIdType BlockId, void* NvM_DstPtr);Service to copy the data of the NV block to its corresponding RAM block.Std_ReturnType NvM_WriteBlock (NvM_BlockIdType BlockId, const void* NvM_SrcPtr);Service to copy the data of the RAM block to its corresponding NV block.Std_ReturnType NvM_RestoreBlockDefaults (NvM_BlockIdType BlockId, void* NvM_DestPtr);Service to restore the default data to its corr esponding RAM block.Std_ReturnType NvM_EraseNvBlock (NvM_BlockIdType BlockId);Service to erase a NV block.Std_ReturnType NvM_InvalidateNvBlock (NvM_BlockIdType BlockId);Service to invalidate a NV block.Std_ReturnType NvM_ReadPRAMBlock (NvM_BlockIdType BlockId);Service to copy the data of the NV block to its corresponding permanent RAM block.Std_ReturnType NvM_WritePRAMBlock (NvM_BlockIdType BlockId);Service to copy the data of the permanent RAM block to its corresponding NV block.Std_ReturnType NvM_RestorePRAMBlockDefaults (NvM_BlockIdType BlockId);Service to restore the default data to its corresponding permanent RAM block.void NvM_ReadAll (void);Initiates a multi block read request.void NvM_WriteAll (void);Initiates a multi block write request.void NvM_CancelWriteAll (void);Service to cancel a running Nv M_ Write All request.void NvM_ValidateAll (void);Initiates a multi block validation request.void NvM_FirstInitAll (void);The function initiates a multi block first initialization request.void NvM_JobEndNotification (void);Function to be used by the underlying memory abstraction to signal end of job without error.void NvM_JobErrorNotification (void);Function to be used by the underlying memory abstraction to signal end of job with error.void NvM_MainFunction (void);Service for performing the processing of the Nv M jobs.Std_ReturnType NvM_SingleBlockCallbackFunction (NvM_BlockRequestType BlockRequest, NvM_RequestResultType JobResult);Per block callback routine to notify the upper layer that an asynchronous single block request has been finished.Std_ReturnType NvM_MultiBlockCallbackFunction (NvM_MultiBlockRequestType MultiBlockRequest, NvM_RequestResultType JobResult);Common callback routine to notify the upper layer that an asynchronous multi block request has been finished.Std_ReturnType NvM_InitBlockCallbackFunction (NvM_InitBlockRequestType InitBlockRequest);Per block callback routine which shall be called by the Nv M module when default data needs to be restored in RAM, and a RO M...Std_ReturnType NvM_WriteRamBlockToNvm (void* NvMBuffer);Block specific callback routine which shall be called in order to let the application copy data from RAM block to Nv M...Std_ReturnType NvM_ReadRamBlockFromNvm (const void* NvMBuffer);Block specific callback routine which shall be called in order to let the application copy data from Nv M module's mirror to...
Typen — Übersicht
struct NvM_ConfigTypeConfiguration data structure of the Nv M module.NvM_MultiBlockRequestTypeIdentifies the type of request performed on multi block when signaled via the callback function or when reporting to Bsw Menum NvM_RequestResultTypeType NvM_RequestResultType.NvM_BlockIdTypeIdentification of a NVRAM block via a unique block identifier.NvM_InitBlockRequestTypeIdentifies the type of request performed on a block when signaled via the callback functionNvM_BlockRequestTypeIdentifies the type of reques t performed on a block when signaled via the callback function
Funktionen & Typen — Detailansicht
函数 NvM_Init [SWS_NvM_00447] 📄 PDF
void NvM_Init (const NvM_ConfigType* ConfigPtr);
Service for resetting all internal variables.
用法与调用上下文
函数 NvM_Init 用于同步重置 NVRAM 管理器的所有内部变量 [SWS_NvM_00447]。它期望将指向所选配置数据集的指针作为传递参数 ConfigPtr,并且没有返回值 [SWS_NvM_00447]。作为类型 4 的 API,它是配置类别 2 和 3 的组成部分 [SWS_NvM_00560]、[SWS_NvM_00561]。该函数不可重入,且仅允许由 BSW Mode Manager 调用 [SWS_NvM_00447]、[SWS_NvM_00693]。
初始化任务
在调用期间,该函数执行以下操作:
- 将所有内部变量(包括状态机、作业队列和请求标志)重置为其初始值 [SWS_NvM_00399]。
- 将类型为
NVM_BLOCK_DATASET的所有 NVRAM 块的数据集索引设置为零 [SWS_NvM_00192]。 - 在内部设置信号“INIT DONE”,该信号是模块中进行作业处理、队列管理和 CRC 重新计算的前提条件 [SWS_NvM_00257]、[SWS_NvM_00399]。
限制与交互
由于对 ECU 启动时间的严格要求,NvM_Init 不初始化任何已配置的 NVRAM 块 [SWS_NvM_00091]。不更改永久 RAM 块内容,也不调用同步回调;这是函数 NvM_ReadAll 专有的功能 [SWS_NvM_00400]。此外,NvM_Init 既不初始化底层驱动程序,也不初始化存储器硬件抽象或第三方模块,因为它们由 BSW Mode Manager 负责初始化被假定为前提条件 [SWS_NvM_00157]、[SWS_NvM_00193]。
本使用说明基于 AUTOSAR 规范 R20-11 自动生成。
实现者指南即将推出(复杂度 I2)
函数 NvM_SetDataIndex [SWS_NvM_00448] 📄 PDF
Std_ReturnType NvM_SetDataIndex (NvM_BlockIdType BlockId, uint8 DataIndex);
Service for setting the Data Inde x of a dataset NVRAM block.
函数 NvM_GetDataIndex [SWS_NvM_00449] 📄 PDF
Std_ReturnType NvM_GetDataIndex (NvM_BlockIdType BlockId, uint8* DataIndexPtr);
Service for getting the currently set Data Index of a datase t NVRAM block
函数 NvM_SetBlockProtection [SWS_NvM_00450] 📄 PDF
Std_ReturnType NvM_SetBlockProtection (NvM_BlockIdType BlockId, boolean ProtectionEnabled);
Service for setting/ resetting the write protection for a NV block. Availabl e via Nv M.h
用法与语义
同步且可重入的函数 NvM_SetBlockProtection 用于通过管理块中的相应属性来设置或重置 NVRAM 块的写保护 [SWS_NvM_00450]、[SWS_NvM_00016]。它被分配给 API 配置类别 3 [SWS_NvM_00560]。NvM 模块的环境可以通过参数 ProtectionEnabled 定向启用或禁用写保护 [SWS_NvM_00578]。该函数在成功执行时返回 E_OK,在发生错误时返回 E_NOT_OK [SWS_NvM_00450]。
限制与并发性
仅当块的 NvMWriteBlockOnce 配置为 FALSE 时,才允许更改写保护,无论参数 NvMBlockWriteProt 的值如何 [SWS_NvM_00325]。如果 NvMWriteBlockOnce 配置为 TRUE,则既不允许启用也不允许禁用写保护 [SWS_NvM_00398]、[SWS_NvM_00577];即使在读取操作之后,该保护也无法解除 [SWS_NvM_00314]、[SWS_NvM_00316]、[SWS_NvM_00784]。此外,通过 NvM_SetBlockLockStatus 设置的锁定状态不能通过 NvM_SetBlockProtection 进行修改 [SWS_NvM_00754]。只要针对同一块的单块作业处于激活状态或已排队,该调用就是不允许的 [SWS_NvM_00704]。
错误处理
在启用开发错误检测(DET)时,该函数报告特定的错误状态:
NVM_E_UNINIT,如果 NvM 模块尚未初始化 [SWS_NvM_00606]。NVM_E_PARAM_BLOCK_ID:如果传入的BlockId超出有效范围 [SWS_NvM_00609]。NVM_E_BLOCK_PENDING,如果该块已有操作处于活动状态或排队中 [SWS_NvM_00607]。NVM_E_BLOCK_CONFIG,如果该块配置为NvMWriteBlockOnce = TRUE[SWS_NvM_00608]。NVM_E_BLOCK_LOCKED,如果该块已被锁定 [SWS_NvM_00759]。
本使用说明基于 AUTOSAR Classic R20-11 中 NVRAM 管理器的规范。
实现者指南即将推出(复杂度 I2)
函数 NvM_GetErrorStatus [SWS_NvM_00451] 📄 PDF
Std_ReturnType NvM_GetErrorStatus (NvM_BlockIdType BlockId, NvM_RequestResultType* RequestResultPtr);
Service to read the block dependent error/ status information.
函数 NvM_GetVersionInfo [SWS_NvM_00452] 📄 PDF
void NvM_GetVersionInfo (Std_VersionInfoType* versioninfo);
Service to get the version information of the Nv M module.
函数 NvM_SetRamBlockStatus [SWS_NvM_00453] 📄 PDF
Std_ReturnType NvM_SetRamBlockStatus (NvM_BlockIdType BlockId, boolean BlockChanged);
Service for setting the RAM block status of a permanent RAM block or the status of the explicit synchronization of a NVRAM block.
同步且可重入的函数 NvM_SetRamBlockStatus 用于为永久 RAM 块或具有显式同步的块设置 RAM 块状态 [SWS_NvM_00453]。只要通过配置参数 NvMSetRamBlockStatusApi 启用了该函数,它便在 API 配置类别 2 和 3 中可用 [SWS_NvM_00561]、[SWS_NvM_00560] [SWS_NvM_00408]。
通过参数 BlockChanged 控制是将块标记为有效且已更改(TRUE),还是标记为无效且未更改(FALSE)[SWS_NvM_00453]、[SWS_NvM_00406]。在传递 TRUE 时,该模块假定数据有效 [SWS_NvM_00241]。该函数在状态更改成功时返回 E_OK,在出错时返回 E_NOT_OK [SWS_NvM_00453]。
如果将 BlockChanged 设置为 TRUE,且如果配置了 NvMCalcRamBlockCrc,则该函数在后台请求在 NvM_MainFunction 中重新计算校验和 [SWS_NvM_00121]。对于具有显式同步的无永久 RAM 块,该作业使用写回调来获取数据 [SWS_NvM_00906]。如果写回调失败,则在每次调用 NvM_MainFunction 时执行配置的重试 [SWS_NvM_00907]、[SWS_NvM_00908]。如果所有尝试均不成功,该作业仍被视为已结束,并且该块保持标记为已更改 [SWS_NvM_00909]。
在调用之前,NvM 模块必须已经初始化 [SWS_NvM_00711]。当开发错误检测处于激活状态时,如果模块未初始化,该函数报告 NVM_E_UNINIT [SWS_NvM_00643];如果 BlockId 无效,报告 NVM_E_PARAM_BLOCK_ID [SWS_NvM_00645];如果作业已在运行或排队,报告 NVM_E_BLOCK_PENDING [SWS_NvM_00644]。只要单块作业处于激活状态,就不得针对该块调用此函数 [SWS_NvM_00704]。通过 NvM_SetBlockLockStatus 设置的块锁定无法据此更改 [SWS_NvM_00754]。
本使用说明基于 AUTOSAR 规范 R20-11 自动生成。
服务功能与调用语义
NvM_SetRamBlockStatus 是一个同步且具备可重入性的管理服务([SWS_NvM_00453]),仅在通过配置参数 NvMSetRamBlockStatusApi 显式启用时由 NvM 模块提供([SWS_NvM_00408]),并归属于 API 配置类 2 与配置类 3([SWS_NvM_00560]、[SWS_NvM_00561])。该服务用于设置永久 RAM 块的状态或 NVRAM 块显式同步的状态:当输入参数 BlockChanged 传入 TRUE 时,永久 RAM 块或显式同步内部 RAM 镜像被视为有效并标记为已更改([SWS_NvM_00241]、[SWS_NvM_00406]);传入 FALSE 时,则将其置为无效且未更改([SWS_NvM_00453])。状态变更成功返回 E_OK,出现错误则返回 E_NOT_OK([SWS_NvM_00453])。
前置条件与错误检测
环境在调用此函数前必须已完成 NvM 模块的初始化([SWS_NvM_00711])。当启用了开发错误检测(DET)时:
- 若模块尚未初始化,将向 DET 报告错误
NVM_E_UNINIT([SWS_NvM_00643])。 - 若传入的
BlockId超出有效范围,将报告错误NVM_E_PARAM_BLOCK_ID([SWS_NvM_00645])。 - 若目标 NVRAM 块已有操作处于排队或正在处理状态,将报告错误
NVM_E_BLOCK_PENDING([SWS_NvM_00644])。在存在单块挂起操作时,应用程序严禁调用修改管理块状态的接口([SWS_NvM_00704])。
需要注意,通过 NvM_SetBlockLockStatus 设置的 BlockLocked 锁定状态不可被 NvM_SetRamBlockStatus 更改([SWS_NvM_00754])。
后台 CRC 与显式同步交互
对于配置了永久 RAM 且启用了 RAM CRC 计算(NvMCalcRamBlockCrc == TRUE)的块,若 BlockChanged 为 TRUE,该函数将请求在后台重新计算 CRC,并由 NvM_MainFunction 负责执行([SWS_NvM_00121])。若目标块未配置永久 RAM 但使用了显式同步,且 BlockChanged 为 TRUE,该任务将调用写操作的显式同步回调函数以获取用于计算 CRC 的数据([SWS_NvM_00906])。若回调返回 E_NOT_OK,NvM 将在每次 NvM_MainFunction 周期中重试一次,直到达到配置的重试次数([SWS_NvM_00907]、[SWS_NvM_00908]);即使初次调用和所有重试均失败,NvM 仍会将作业视为完成、保持块标记为 BlockChanged 并按成功流程继续([SWS_NvM_00909])。
本使用说明基于 AUTOSAR CP R20-11 规范自动生成。
实现者指南即将推出(复杂度 I2)
函数 NvM_SetBlockLockStatus [SWS_NvM_00548] 📄 PDF
void NvM_SetBlockLockStatus (NvM_BlockIdType BlockId, boolean BlockLocked);
Service for setting the lock status of a permanent RAM block or of the explicit synchronization of a NVRAM block.
用法与调用上下文
同步且可重入的函数 NvM_SetBlockLockStatus 用于锁定(BlockLocked = TRUE)或解锁(BlockLocked = FALSE)永久配置的 RAM 块或 NVRAM 块的显式同步 [SWS_NvM_00548]。它属于 API 配置类 2 和 3 的功能范围 [SWS_NvM_00561]、[SWS_NvM_00560]。该函数未包含在 ServicePort 接口中,主要由 DCM 以及复杂设备驱动程序(CDD)调用 [SWS_NvM_00732]。
限制与交互
该调用仅对具有永久 RAM 块或配置了显式同步的 NVRAM 块有效;对于所有其他块则不起作用 [SWS_NvM_00732]。若锁定某个块(BlockLocked = TRUE),NvM 确保关联的 NV 数据不被修改:该块在 NvM_WriteAll 时被跳过,且服务 NvM_WriteBlock、NvM_WritePRAMBlock、NvM_InvalidateNvBlock 以及 NvM_EraseNvBlock 被拒绝 [SWS_NvM_00751]。在下一次启动时,NvM 在 NvM_ReadBlock 或 NvM_ReadPRAMBlock 时保证从 NV 存储器加载该块 [SWS_NvM_00752]。已设置的锁定状态既不能通过 NvM_SetRamBlockStatus 也不能通过 NvM_SetBlockProtection 进行修改 [SWS_NvM_00754]。传递 BlockLocked = FALSE 可恢复常规处理 [SWS_NvM_00753]。
错误处理
在开发检测(DET)激活时,该函数报告特定的开发错误:
NVM_E_UNINIT:若在调用时 NvM 模块尚未初始化 [SWS_NvM_00728]。NVM_E_PARAM_BLOCK_ID:当参数BlockId超出允许范围时 [SWS_NvM_00731]。NVM_E_BLOCK_CONFIG:只要引用的 NVRAM 块配置了参数NvMWriteBlockOnce = TRUE[SWS_NvM_00730]。
本使用说明基于 AUTOSAR Classic 规范 R20-11,总结了该 API 在调用、保护作用和错误处理方面的要求。
实现者指南即将推出(复杂度 I2)
函数 NvM_CancelJobs [SWS_NvM_00535] 📄 PDF
Std_ReturnType NvM_CancelJobs (NvM_BlockIdType BlockId);
Service to cancel all jobs pending for a NV block.
用法与语义
通过 NvM.h 提供的函数 NvM_CancelJobs 用于同步中止针对特定 NVRAM 块在队列中挂起的所有作业 [SWS_NvM_00535]、[SWS_NvM_00536]。该函数设计为可重入,并期望接收 BlockId 作为参数,该参数唯一标识相关 NVRAM 块的块描述符 [SWS_NvM_00535]。若能成功从队列中移除挂起的作业,调用将返回 E_OK;若在队列中未找到指定块的作业,则返回 E_NOT_OK [SWS_NvM_00535]。
流程与并发性
在函数调用时若某个作业已处于活动处理状态,则该作业不会被 NvM_CancelJobs 中断,而是继续运行直至结束 [SWS_NvM_00537]。只要针对等待作业的中止请求被接受,该服务就会预先将块特定的请求结果置为 NVM_REQ_CANCELED [SWS_NvM_00225]、[SWS_NvM_00536]。这种清理的目的在于,例如在分区终止或重启时清空队列,从而阻止针对已完成作业的后续通知 [SWS_NvM_00225]。
错误处理与配置
在开发检测(DET)激活时,该函数检查前置条件:若模块尚未初始化,则报告错误 NVM_E_UNINIT [SWS_NvM_00648]。若传递的 BlockId 超出有效范围,则发出 DET 报告 NVM_E_PARAM_BLOCK_ID [SWS_NvM_00649]。NvM_CancelJobs 被归类为类型 2 API,并在 API 配置类 2 和 3 中可用 [SWS_NvM_00561]、[SWS_NvM_00560]。
此使用说明基于AUTOSAR规范自动生成。
实现者指南即将推出(复杂度 I2)
函数 NvM_ReadBlock [SWS_NvM_00454] 📄 PDF
Std_ReturnType NvM_ReadBlock (NvM_BlockIdType BlockId, void* NvM_DstPtr);
Service to copy the data of the NV block to its corresponding RAM block.
用法与语义
函数 NvM_ReadBlock 用于将有效数据从 NV 存储器异步复制到关联的 RAM 块中 [SWS_NvM_00010]、[SWS_NvM_00454]。该调用是可重入的 [SWS_NvM_00454]。它接收参数,将读取作业排入内部作业队列,并在成功接收时立即返回 E_OK,在拒绝时立即返回 E_NOT_OK [SWS_NvM_00195]、[SWS_NvM_00454]。
若传递了指针 NvM_DstPtr,则可以不同于块配置将数据读取到临时 RAM 缓冲区中;在这种情况下,非法的 NULL 指针会导致 DET 错误 [SWS_NvM_00196]、[SWS_NvM_00278]。已配置的永久 RAM 块在排队时或在作业处理开始时直接被标记为无效 [SWS_NvM_00198]。只有在成功完成复制过程后,RAM 块才被视为有效且未更改 [SWS_NvM_00200],并且作业结果变为 NVM_REQ_OK [SWS_NvM_00206]。
错误处理与数据完整性
如果为该块启用了校验和(NvMCalRamBlockCrC == TRUE),则作业在复制后会请求重新计算 [SWS_NvM_00201]:
- 在发生 CRC 错误时,将
NVM_E_INTEGRITY_FAILED报告给 DEM [SWS_NvM_00203]。如果存在默认值,则加载默认值并将结果设置为NVM_REQ_RESTORED_DEFAULTS[SWS_NvM_00202]。若缺少 ROM 数据和初始化回调,则导致NVM_REQ_INTEGRITY_FAILED[SWS_NvM_00204]。 - 若存储器驱动报告
MEMIF_JOB_FAILED且没有替代值可用,则作业以NVM_REQ_NOT_OK结束 [SWS_NvM_00359]。
块类型的特殊特性
- Redundant:若读取第一份副本失败,则自动使用第二份 NV 副本 [SWS_NvM_00199]。如果两份副本均无效,则整个块被作废 [SWS_NvM_00317]。
- Dataset:如果通过数据集索引选择的块被标记为无效,则不会复制到 RAM 中 [SWS_NvM_00355]。
- Write-Once:一致读取且设置了
NVM_WRITE_BLOCK_ONCE的块将被永久写保护 [SWS_NvM_00316]。
本文档由 AI 生成,完全基于 Release R20-11 的规范。
实现者指南即将推出(复杂度 I2)
函数 NvM_WriteBlock [SWS_NvM_00455] 📄 PDF
Std_ReturnType NvM_WriteBlock (NvM_BlockIdType BlockId, const void* NvM_SrcPtr);
Service to copy the data of the RAM block to its corresponding NV block. Available vi a Nv M.h
函数 NvM_WriteBlock 用于将 RAM 块的数据复制到分配的 NV 块中 [SWS_NvM_00455]、[SWS_NvM_00410]。该调用以可重入和异步方式执行:该函数接收传递的参数 BlockId 以及 NvM_SrcPtr,将写入作业排入内部作业队列,并立即返回 [SWS_NvM_00208]。返回值通过 E_OK 表示作业已被成功接收,或通过 E_NOT_OK 表示作业已被拒绝 [SWS_NvM_00455]。
关于参数化和数据源,适用以下规定:
- 如果通过
NvM_SrcPtr传递了有效的 RAM 地址,写入作业将使用此缓冲区 [SWS_NvM_00210]。这也允许在实际配置为永久块或具有显式同步的块中备份临时 RAM 块 [SWS_NvM_00280]。 - 配置的永久 RAM 块被假定为有效,或者在复制过程之前自动进行有效性验证 [SWS_NvM_00303]。
- 如果为 NV 块配置了校验和,则作业在写入过程之前请求重新计算 CRC [SWS_NvM_00212]。
- 对于数据集块(
NVM_BLOCK_DATASET),通过管理块中保存的数据索引选择目标 [SWS_NvM_00338]。 - 对于冗余块(
NVM_BLOCK_REDUNDANT),一旦至少有一个副本成功写入,作业即以NVM_REQ_OK结束 [SWS_NvM_00284]。 - 若设置了
NvMWriteBlockOnce == TRUE,则作业在成功写入后立即激活管理块中的写保护 [SWS_NvM_00328]。 - 针对保留块 ID 1 的写作业仅在激活
NvMDynamicConfiguration时允许 [SWS_NvM_00311]。
错误处理与并发性:
- 若开发错误检测处于激活状态,当模块未初始化时
NvM_WriteBlock报告 DET 错误NVM_E_UNINIT[SWS_NvM_00619];若同一块已在处理中或已排队,则报告NVM_E_BLOCK_PENDING[SWS_NvM_00620]。临时缓冲区缺少源指针会导致 DET 参数错误 [SWS_NvM_00280]。 - 存储接口的负反馈会增加重试计数器;超过
NVM_MAX_NUM_OF_WRITE_RETRIES后,作业以NVM_REQ_NOT_OK结束 [SWS_NvM_00213],[SWS_NvM_00216]。 - 若该块配置了立即优先级,
NvM_WriteBlock会破坏性地中止当前正在运行的作业,以便接下来处理写请求 [SWS_NvM_00300]。
此使用说明基于 AUTOSAR 规范自动生成。
实现者指南即将推出(复杂度 I2)
函数 NvM_RestoreBlockDefaults [SWS_NvM_00456] 📄 PDF
Std_ReturnType NvM_RestoreBlockDefaults (NvM_BlockIdType BlockId, void* NvM_DestPtr);
Service to restore the default data to its corr esponding RAM block.
用法与语义
函数 NvM_RestoreBlockDefaults 在分配的 RAM 块中恢复默认数据([SWS_NvM_00456]、[SWS_NvM_00012])。它采用异步工作方式:调用后接收参数,将请求排入内部作业队列,并在成功接收时立即返回 E_OK,在拒绝时返回 E_NOT_OK([SWS_NvM_00456]、[SWS_NvM_00224])。若通过输出参数 NvM_DestPtr 传递了有效的 RAM 地址,则将其用作目标地址([SWS_NvM_00435])。为了在配置了永久 RAM 块或同步回调的情况下将 ROM 数据复制到临时 RAM 块中,调用方必须强制传递不等于 NULL 的指针([SWS_NvM_00436])。
错误处理与边界条件
该函数为不可重入([SWS_NvM_00456]),属于 API 配置类 2 和 3([SWS_NvM_00561]、[SWS_NvM_00560])。若开发错误检测(DET)处于激活状态,当模块尚未初始化时它会报告 NVM_E_UNINIT([SWS_NvM_00625]),当 BlockId 无效时报告 NVM_E_PARAM_BLOCK_ID([SWS_NvM_00630]),以及当针对永久配置的块进行临时复制而未传递有效目标指针时报告参数错误([SWS_NvM_00436])。当块属于类型 NVM_BLOCK_DATASET、存在至少一个 ROM 块且当前数据索引指向 NV 块时,该函数同步失败并返回 E_NOT_OK([SWS_NvM_00353])。
作业处理与协同交互
作为异步作业处理的一部分,该服务从配置的 ROM 块中加载默认值([SWS_NvM_00267])。如果请求了永久 RAM 块或使用了显式同步回调(NvMReadRamBlockFromNvCallback),则在复制过程之前或在调用回调之前将 RAM 块作废([SWS_NvM_00227])。在复制过程成功之后或在同步回调返回 E_OK 之后,RAM 块被验证并标记为已更改([SWS_NvM_00228])。如果为该块配置了校验和,则作业最后会请求重新计算 CRC([SWS_NvM_00229])。NvM_ReadBlock 和 NvM_ReadAll 也使用相同的恢复逻辑,作为存储器读取访问错误或 CRC 错误时的后备机制([SWS_NvM_00202]、[SWS_NvM_00293]、[SWS_NvM_00657])。
此使用说明基于 AUTOSAR Classic R20-11 规范自动生成。
实现者指南即将推出(复杂度 I2)
函数 NvM_EraseNvBlock [SWS_NvM_00457] 📄 PDF
Std_ReturnType NvM_EraseNvBlock (NvM_BlockIdType BlockId);
Service to erase a NV block.
API 配置类 3([SWS_NvM_00560])的可重入异步函数 NvM_EraseNvBlock([SWS_NvM_00457])用于根据传入的 BlockId 删除非易失性存储块。只要写保护未处于活动状态,该函数就会接收参数,将删除作业排入内部作业队列并立即返回([SWS_NvM_00231]、[SWS_NvM_00418])。返回值 E_OK 表示成功接收作业,而 E_NOT_OK 表示被拒绝([SWS_NvM_00457])。
在调用之前,NvM 模块必须已完全初始化([SWS_NvM_00715])。在排队之后,从队列中取出作业之前不会再次检查写保护([SWS_NvM_00662])。对于类型为 NVM_BLOCK_REDUNDANT 的冗余块,仅当两个冗余 NV 块均已删除时,删除过程才被视为成功([SWS_NvM_00269])。所分配 RAM 块的数据内容在作业处理过程中始终保持不变([SWS_NvM_00416])。
如果寻址了数据集块的 ROM 块([SWS_NvM_00661])或者通过 NvM_SetBlockLockStatus 禁用了该块([SWS_NvM_00751]),则调用将被拒绝。当开发错误检测(DET)激活时,该函数在模块未初始化时报告 NVM_E_UNINIT([SWS_NvM_00631]),在 BlockId 无效时报告 NVM_E_PARAM_BLOCK_ID([SWS_NvM_00635]),并在块被阻塞时报告 NVM_E_BLOCK_LOCKED([SWS_NvM_00757])。如果该块不具有立即优先级(“immediate priority”)或配置了标准优先级,则在 DET 激活时会报告错误 NVM_E_BLOCK_CONFIG 并返回 E_NOT_OK([SWS_NvM_00357]、[SWS_NvM_00636])。如果随后的异步执行失败,则请求状态被设置为 NVM_REQ_NOT_OK([SWS_NvM_00271]),并将 NVM_E_REQ_FAILED 报告给 DEM([SWS_NvM_00663])。
本使用说明基于规范自动生成。
实现者指南即将推出(复杂度 I2)
函数 NvM_InvalidateNvBlock [SWS_NvM_00459] 📄 PDF
Std_ReturnType NvM_InvalidateNvBlock (NvM_BlockIdType BlockId);
Service to invalidate a NV block.
函数 NvM_InvalidateNvBlock 是 API 配置类 3 的一个异步且可重入服务,用于使 NV 块无效 [SWS_NvM_00459]、[SWS_NvM_00560]。其调用条件是:NvM 模块必须事先已由模块环境初始化 [SWS_NvM_00717]。该调用接收参数 BlockId,在写保护禁用的情况下将请求排入队列,并返回 E_OK [SWS_NvM_00239]、[SWS_NvM_00424]。若无法接受该作业,则函数返回 E_NOT_OK [SWS_NvM_00459]。
如果通过 BlockId 指定了数据集块(Dataset)的 ROM 块,则调用将被同步拒绝并返回 E_NOT_OK [SWS_NvM_00664]。若该块此前已通过 NvM_SetBlockLockStatus 锁定,NvM 将拒绝该作业 [SWS_NvM_00751],并在开发接口激活时报告 DET 错误 NVM_E_BLOCK_LOCKED [SWS_NvM_00756]。若该块已排队或正在执行,则发出 DET 报告 NVM_E_BLOCK_PENDING [SWS_NvM_00639]。
实际的异步作业在考虑以下约束条件的前提下使引用的 NV 块无效 [SWS_NvM_00421]:
- 对于冗余块(
NVM_BLOCK_REDUNDANT),只有当两个冗余 NV 块均成功失效后,作业结果才会被置为NVM_REQ_OK[SWS_NvM_00274];相同的机制也应用于NvM_FirstInitAll[SWS_NvM_00919]、[SWS_NvM_00920]。 - 对于具有
NVM_WRITE_BLOCK_ONCE的块,作业保持写保护不变 [SWS_NvM_00960]。若此前未进行读取过程,作业将报告 DET 错误NVM_E_WRITE_ONCE_STATUS_UNKNOWN[SWS_NvM_00958]。 - 若在异步处理期间发生错误,请求结果将被置为
NVM_REQ_NOT_OK[SWS_NvM_00275],并将生产错误NVM_E_REQ_FAILED发送至 DEM [SWS_NvM_00666]。
本使用说明由 AI 生成,完全基于 AUTOSAR R20-11 的规范数据。
实现者指南即将推出(复杂度 I2)
函数 NvM_ReadPRAMBlock [SWS_NvM_00764] 📄 PDF
Std_ReturnType NvM_ReadPRAMBlock (NvM_BlockIdType BlockId);
Service to copy the data of the NV block to its corresponding permanent RAM block.
使用
异步且可重入的函数 [SWS_NvM_00764] 用于将 NV 块的数据复制到关联的永久 RAM 块中。该调用接收 BlockId,将读取请求排入内部作业队列并立即返回 [SWS_NvM_00766]。返回值 E_OK 确认接受作业,而 E_NOT_OK 表示拒绝 [SWS_NvM_00764]。该函数属于 API 配置类 2 和 3 的功能范围 [SWS_NvM_00560]、[SWS_NvM_00561]。
流程与同步
随着作业成功排队或处理开始,永久 RAM 块立即失效 [SWS_NvM_00767]。若为该块设置了显式同步,应用程序可以在同步例程到达之前修改 RAM 块;在此情况下,失效操作直接在调用 NvMReadRamBlockFromNvCallback 之前执行 [SWS_NvM_00706]、[SWS_NvM_00767]。若 NV 数据无错误地传输到 RAM 中,作业以状态 NVM_REQ_OK 结束 [SWS_NvM_00765]、[SWS_NvM_00775]。
错误处理与冗余
对于类型为 NVM_BLOCK_REDUNDANT 的块,若第一次读取尝试失败,作业会自动在第二个块上启动读取尝试 [SWS_NvM_00768]。对于数据集(NVM_BLOCK_DATASET),若通过索引选择的 NV 块不一致,则阻止复制 [SWS_NvM_00771];若索引指向 ROM 数据,则加载该数据并将结果置为 NVM_REQ_OK [SWS_NvM_00772]。若配置了默认数据且在 RAM 状态无效时 NV 块不可读,则执行隐式恢复 [SWS_NvM_00575],该恢复将 RAM 块归类为有效且已更改 [SWS_NvM_00774];若未配置预设值,则不执行恢复 [SWS_NvM_00572]。若此前 NvM_SetBlockLockStatus 处于活动状态,则强制从 NV 存储器重新加载 [SWS_NvM_00752]。
本使用说明是基于 AUTOSAR CP R20-11 规范版本自动生成的。
实现者指南即将推出(复杂度 I2)
函数 NvM_WritePRAMBlock [SWS_NvM_00793] 📄 PDF
Std_ReturnType NvM_WritePRAMBlock (NvM_BlockIdType BlockId);
Service to copy the data of the permanent RAM block to its corresponding NV block.
可重入的异步函数 NvM_WritePRAMBlock 触发将永久 RAM 块的数据写入关联的 NV 块 [SWS_NvM_00793]、[SWS_NvM_00794]。该函数在 API 配置类 2 和 3 中可用 [SWS_NvM_00561]、[SWS_NvM_00560]。仅当 NvMDynamicConfiguration 设置为 TRUE 时,才允许传递保留的块 ID 1 [SWS_NvM_00311]。
在传递时,函数在成功接受时返回 E_OK,否则返回 E_NOT_OK [SWS_NvM_00793]。若引用的块被锁定,调用失败并返回 E_NOT_OK,且模块报告 DET 错误 [SWS_NvM_00797]。块保护在排入作业队列时即被检查,在作业执行前不再重新验证 [SWS_NvM_00799]。若 NVRAM 块具有即时优先级(immediate priority),则当前正在运行的作业被立即破坏性中止,且该写作业作为下一个作业被处理 [SWS_NvM_00800]。
在实际传输到 NV 存储器之前,若块配置了 CRC,作业会请求 CRC 重新计算 [SWS_NvM_00801]。尚无效的永久 RAM 块将自动验证为有效 [SWS_NvM_00803]。对于冗余块(NVM_BLOCK_REDUNDANT),将对两个 NV 块进行写入,从先前读取作业中未读取的那个块开始 [SWS_NvM_00807]、[SWS_NvM_00808]。在发生写入错误时,重试次数受 NVM_MAX_NUM_OF_WRITE_RETRIES 限制 [SWS_NvM_00806];若发生溢出,NvM 将作业结果置为 NVM_REQ_NOT_OK [SWS_NvM_00804] 并向 DEM 报告 NVM_E_REQ_FAILED [SWS_NvM_00805]。
关于并发性:在隐式同步时,应用程序在调用后直至作业结束不得再修改缓冲区数据,读取访问仍被允许 [SWS_NvM_00698]。在显式同步时,允许修改缓冲区,直到回调例程 NvMWriteRamBlockToNvCallback 被调用 [SWS_NvM_00705]。
本段文本由 AI 生成,用于依据规范提供技术参考。
实现者指南即将推出(复杂度 I2)
函数 NvM_RestorePRAMBlockDefaults [SWS_NvM_00813] 📄 PDF
Std_ReturnType NvM_RestorePRAMBlockDefaults (NvM_BlockIdType BlockId);
Service to restore the default data to its corresponding permanent RAM block.
用法与语义
函数 NvM_RestorePRAMBlockDefaults 在关联的永久 RAM 块中恢复默认数据([SWS_NvM_00813]、[SWS_NvM_00814])。该服务异步工作,并通过参数 BlockId 接收 NVRAM 块描述符的标识符([SWS_NvM_00813])。调用时,请求被排入内部作业队列中([SWS_NvM_00815])。返回值 E_OK 表示成功接受,而 E_NOT_OK 表示拒绝([SWS_NvM_00813])。若配置了 ROM 块,则在异步处理的框架下从中加载数据([SWS_NvM_00816])。
错误处理与边界条件
若既未为该块指定 ROM 默认数据,也未指定回调例程 NvMInitBlockCallback,则块状态保持不变,且调用返回 E_NOT_OK([SWS_NvM_00884])。在开发检测(DET)激活时,报告特定错误:
NVM_E_UNINIT:模块尚未初始化([SWS_NvM_00831])。NVM_E_PARAM_BLOCK_ID:传入的BlockId超出有效范围([SWS_NvM_00834])。NVM_E_BLOCK_PENDING:该块 ID 已有作业排队或正在处理([SWS_NvM_00832])。NVM_E_BLOCK_WITHOUT_DEFAULTS:既不存在 ROM 默认数据也不存在初始化回调([SWS_NvM_00886])。NVM_E_PARAM_ADDRESS:既未配置永久 RAM 块也未配置显式同步([SWS_NvM_00894])。
并发性与交互
该服务被指定为不可重入([SWS_NvM_00813]),并在 API 配置类 2 和 3 中可用([SWS_NvM_00561]、[SWS_NvM_00560])。若底层读取过程失败,相同的恢复逻辑还会在内部应用于 NvM_ReadPRAMBlock([SWS_NvM_00789]、[SWS_NvM_00882])。
本使用说明基于 AUTOSAR Classic Release R20-11 的规范。
实现者指南即将推出(复杂度 I2)
函数 NvM_ReadAll [SWS_NvM_00460] 📄 PDF
void NvM_ReadAll (void);
Initiates a multi block read request.
函数 NvM_ReadAll 异步触发多块读作业以初始化 RAM 数据块 [SWS_NvM_00460]、[SWS_NvM_00158]。它没有参数,不提供返回值,并且不可重入 [SWS_NvM_00460]。该调用向 NvM 模块发出请求信号并立即返回;但实际处理会延迟,直到所有单块作业队列为空 [SWS_NvM_00243]。
在开始时,该作业在系统启动期间通过比较存储的值与编译的值来验证配置 ID [SWS_NvM_00073]、[SWS_NvM_00246]:
- 若一致,则对所有已配置的块执行常规准备 [SWS_NvM_00247]。
- 若设置了
NvMDynamicConfiguration == FALSE,则配置差异将被忽略 [SWS_NvM_00248]。 - 若
NvMDynamicConfiguration == TRUE且NvMResistantToChangedSw == FALSE,则在不一致时执行扩展准备 [SWS_NvM_00249]。
随后,该作业遍历所有用户块,从最低的块 ID 开始(保留 ID 0 和 1 除外)[SWS_NvM_00244]。只要配置了 NvmSelectBlockForReadall == TRUE,就会考虑永久 RAM 块或配置了同步回调的块 NvM_ReadRamBlockFromNvm [SWS_NvM_00118]。未读取但被选中的块将获得结果 NVM_REQ_BLOCK_SKIPPED [SWS_NvM_00287]。
对于冗余块(NVM_BLOCK_REDUNDANT),若第一次读取尝试失败,将自动读取第二个 NV 块 [SWS_NvM_00288]。成功加载到 RAM 后,块状态设置为“valid/unmodified”,且作业结果设置为 NVM_REQ_OK [SWS_NvM_00251]、[SWS_NvM_00290]、[SWS_NvM_00291]。对于带有 NvMCalRamBlockCrC == TRUE 的块,作业会请求重新计算 CRC [SWS_NvM_00292]。如果已配置,将对每个块调用 NvMSingleBlockCallback,并在最后一个块之后调用 MultiBlockCallback [SWS_NvM_00281]。
本使用说明基于 AUTOSAR Classic R20-11 的规范要求。
实现者指南即将推出(复杂度 I1)
函数 NvM_WriteAll [SWS_NvM_00461] 📄 PDF
void NvM_WriteAll (void);
Initiates a multi block write request.
用法与调用上下文
函数 NvM_WriteAll 异步触发多块写作业,既没有参数也没有返回值 [SWS_NvM_00461]。调用后,该函数向 NvM 模块发出请求信号并立即返回 [SWS_NvM_00254]。实际处理被推迟,直到单块作业的所有队列完全处理完毕 [SWS_NvM_00254]。该调用通常在 BSW Mode Manager 执行的基本关闭过程(Shutdown)框架内进行 [SWS_NvM_00092]。
流程与块处理
在关闭期间,该作业将永久 RAM 块与关联的 NV 块同步,或执行显式同步回调 NvM_WriteRamBlockToNvm [SWS_NvM_00018]。此时仅考虑配置参数 NvMSelectBlockForWriteAll 设置为 true 的块 [SWS_NvM_00252],以及在动态配置处于激活状态且配置 ID 不一致情况下的块 1 [SWS_NvM_00310]。如果为 NVRAM 块配置了 CRC,则作业在写入过程之前请求重新计算并更新校验和 [SWS_NvM_00253]。对于带有 NvMWriteBlockOnce == TRUE 的块,作业在成功写入后立即在管理块中设置写保护标志 [SWS_NvM_00329]。
并发与错误处理
- 重入性:该函数不可重入 [SWS_NvM_00461]。
- 错误监控:为了避免死循环,重试计数器会在 MemIf 模块返回未成功反馈时监控重试尝试 [SWS_NvM_00296]。
- 作业结果:若至少一个块的处理失败,则总结果设置为
NVM_REQ_NOT_OK[SWS_NvM_00318]。对于已配置但未写入的块,单个结果设置为NVM_REQ_BLOCK_SKIPPED[SWS_NvM_00298]。对于冗余块(NVM_BLOCK_REDUNDANT),一旦成功写入至少一个 NV 块,单项作业即视为NVM_REQ_OK[SWS_NvM_00337]。 - 中止:正在运行的作业可以通过
NvM_CancelWriteAll中止 [SWS_NvM_00019]。这会导致总结果为NVM_REQ_CANCELED[SWS_NvM_00237],其中当前正在处理的块将以非破坏性且数据一致的方式完成 [SWS_NvM_00238]。
本文本由 AI 生成,仅供参考。一切以 AUTOSAR 规范为准。
实现者指南即将推出(复杂度 I1)
函数 NvM_CancelWriteAll [SWS_NvM_00458] 📄 PDF
void NvM_CancelWriteAll (void);
Service to cancel a running Nv M_ Write All request.
用法与语义
函数 NvM_CancelWriteAll 用于提前中止正在运行的多块写操作(NvM_WriteAll)[SWS_NvM_00458]、[SWS_NvM_00019]。该调用为异步、不可重入,不接收任何参数,且不提供返回值 [SWS_NvM_00458]。该函数直接向模块发出中止请求信号并立即返回 [SWS_NvM_00232]。该请求不会排入作业队列;始终只能有一个此类型的请求挂起 [SWS_NvM_00420]。如果在调用时没有操作处于活动状态,则该调用不起任何作用 [SWS_NvM_00233]。
流程与数据一致性
中止的执行方式使得中止时正在处理的 NVRAM 块的数据一致性不受影响 [SWS_NvM_00019]。该模块正常结束此活动块,并根据成功与否将其状态属性设置为 NVM_REQ_OK 或 NVM_REQ_NOT_OK,而所有剩余的待处理块均被设置为 NVM_REQ_CANCELED [SWS_NvM_00236]。总结果由已中止操作的结果隐式给定 [SWS_NvM_00235],存储在单独的变量中 [SWS_NvM_00393],并且可以通过指定保留的块 ID 0 经由 NvM_GetErrorStatus 查询 [SWS_NvM_00394]。此外,可以选择通知上层回调(NvMMultiBlockCallback)[SWS_NvM_00260]。如果通过 NvMDrvModeSwitch 配置,该作业将在中止后将存储设备切换到慢速运行模式(“slow-mode”)[SWS_NvM_00681]。
限制与错误处理
NvM_CancelWriteAll 的调用受到功能限制,仅允许由 BSW 模式管理器(BswM)执行 [SWS_NvM_00703]。此外,该函数属于 API 配置类 2 [SWS_NvM_00561]。该模块在调用前必须已经初始化 [SWS_NvM_00716];当开发错误检测(DET)激活时,在未初始化状态下调用会导致错误消息 NVM_E_UNINIT [SWS_NvM_00637]。
本使用说明基于 AUTOSAR 规范 R20-11 自动生成。
实现者指南即将推出(复杂度 I1)
函数 NvM_ValidateAll [SWS_NvM_00855] 📄 PDF
void NvM_ValidateAll (void);
Initiates a multi block validation request.
函数 NvM_ValidateAll 发起对多个 NVRAM 块的异步验证([SWS_NvM_00855]),并属于 API 配置类 3([SWS_NvM_00560])。它是不可重入的,不期望参数且不提供返回值([SWS_NvM_00855])。在调用之前,NvM 模块必须已初始化([SWS_NvM_00859])。
调用时,该函数向模块发出请求信号并立即返回([SWS_NvM_00858])。然而,实际处理会延迟到所有单块作业队列完全处理完毕([SWS_NvM_00858])。在作业队列中总共仅有一个位置可用于多块作业([SWS_NvM_00380])。异步作业的总体结果保存在一个单独的状态变量中([SWS_NvM_00393])。
在作业处理的框架下,预先将多块结果以及受影响单块的结果均置为 NVM_REQ_PENDING([SWS_NvM_00861])。处理仅考虑将 NvMBlockUseAutoValidation 配置为 TRUE 的块([SWS_NvM_00856]、[SWS_NvM_00860]):
- 处理永久 RAM 块或通过回调
NvM_WriteRamBlockToNvm执行显式同步([SWS_NvM_00860])。 - RAM 块状态被置为“VALID / CHANGED”([SWS_NvM_00856])。
- 若在 RAM 中另外配置了 CRC 计算,该作业在后台请求重新计算,该计算通过
NvM_MainFunction处理([SWS_NvM_00857])。 - 在成功验证 RAM 块后,块特定结果变为
NVM_REQ_OK([SWS_NvM_00862])。
本使用说明基于 AUTOSAR 规范 R20-11 自动生成。
实现者指南即将推出(复杂度 I1)
函数 NvM_FirstInitAll [SWS_NvM_91001] 📄 PDF
void NvM_FirstInitAll (void);
The function initiates a multi block first initialization request. The job of the function does not care if a block exists in the non - volatile memory or not OR if it is valid (i.e. not corrupted) or not, when processing it.
函数 NvM_FirstInitAll 发起对多个已配置块的异步初次初始化([SWS_NvM_91001])。该服务不可重入,不期望参数且不提供返回值([SWS_NvM_91001])。在处理时不考虑非易失性存储器中的块是否已存在、有效或损坏([SWS_NvM_91001])。多块作业(包括来自 NvM_FirstInitAll 的作业)的队列长度为 1,因此同时只能排队一个多块作业([SWS_NvM_00380])。
处理方式根据块的管理类型而有所不同:
- NATIVE:若存在默认数据,则使用其写入 NV 块([SWS_NvM_00913])。若块具有永久 RAM 或显式同步,则像
NvM_RestoreBlockDefaults一样使用默认数据(ROM 或初始化回调)更新 RAM([SWS_NvM_00915]);在没有永久 RAM 且没有显式同步的情况下,NvM 内部缓冲区用作 RAM,此时 RAM 状态保持不变([SWS_NvM_00914])。若缺少默认数据([SWS_NvM_00919])或配置的初始化回调因返回值不等于E_OK而失败([SWS_NvM_00921]),则该块被失效。 - REDUNDANT:若存在默认数据,则使用其写入两个块实例([SWS_NvM_00916]),并在存在永久 RAM 或显式同步时更新 RAM([SWS_NvM_00918]);否则使用内部缓冲区([SWS_NvM_00917])。若初始化回调未返回
E_OK,则两个实例均失效([SWS_NvM_00922])。 - DATASET:为此处理配置的所有该类型块或 NV 块实例无一例外地失效([SWS_NvM_00923]、[SWS_NvM_00924])。
若使用默认数据写入 NATIVE 块([SWS_NvM_00925])、使 NATIVE 块失效([SWS_NvM_00927])或写入 REDUNDANT 块的两个实例([SWS_NvM_00926])失败,作业将总体结果置为 NVM_REQ_NOT_OK。
本段文本由 AI 基于规范 R20-11 生成。
实现者指南即将推出(复杂度 I1)
函数 NvM_JobEndNotification [SWS_NvM_00462] 📄 PDF
void NvM_JobEndNotification (void);
Function to be used by the underlying memory abstraction to signal end of job without error.
使用
同步回调函数 NvM_JobEndNotification 由底层存储器抽象调用,以向 NVRAM 管理器通知作业的无错误结束 [SWS_NvM_00462]。该函数既无参数也无返回值,可通过头文件 NvM_MemIf.h 获取,服务 ID 为 0x11 [SWS_NvM_00462]。存储器抽象的成功通知包括无错误完成的读取、写入或擦除操作 [SWS_NvM_00111]。
并发性与限制
该接口被指定为不可重入 [SWS_NvM_00462]。取决于存储器抽象内部的调用函数,该例程可以在中断上下文中执行 [SWS_NvM_00111]。存储器抽象的所有模块应配置为一致地使用相同的模式——回调或轮询 [SWS_NvM_00111]。
配置与交互
仅当通过配置参数 NvMPollingMode 禁用轮询模式时,NvM 模块才提供回调函数 NvM_JobEndNotification [SWS_NvM_00440]。此外,该函数受通用 NvM 配置参数的影响 [SWS_NvM_00440]。
此使用说明基于 AUTOSAR 规范 R20-11。
实现者指南即将推出(复杂度 I1)
函数 NvM_JobErrorNotification [SWS_NvM_00463] 📄 PDF
void NvM_JobErrorNotification (void);
Function to be used by the underlying memory abstraction to signal end of job with error.
回调函数 NvM_JobErrorNotification([SWS_NvM_00463])用于底层存储器抽象层向 NVRAM 管理器模块(NvM)通知异步作业的有错误结束。调用为同步进行,并被指定为不可重入([SWS_NvM_00463])。
使用与签名
- 接口:函数声明通过头文件
NvM_MemIf.h提供([SWS_NvM_00463])。 - 签名:根据
void NvM_JobErrorNotification(void),该函数既无输入、输出也无输入/输出参数,且不提供返回值([SWS_NvM_00463])。 - 服务 ID:该函数通过十六进制标识符
0x12进行标识([SWS_NvM_00463])。
配置依赖性与交互
模块 NvM 仅在通过配置参数 NvMPollingMode 禁用轮询模式时才提供回调函数 NvM_JobErrorNotification([SWS_NvM_00441])。若使用轮询,则省略该通知机制。此外,该函数受符合 [SWS_NvM_00028] 原文尚未导入 的通用配置参数影响([SWS_NvM_00441])。
错误处理与并发
该函数仅用于作业的错误通知,既不定义自身的错误码,也不定义 DET 或 DEM 反馈([SWS_NvM_00463])。由于其分类为 Non Reentrant,推测应由存储器抽象中的调用方确保不发生重叠或打断的调用([SWS_NvM_00463])。 问题 Q-5f72d9d605c25922 (未决)
此使用说明基于 AUTOSAR Classic R20-11 规范自动生成。
实现者指南即将推出(复杂度 I1)
函数 NvM_MainFunction [SWS_NvM_00464] 📄 PDF
void NvM_MainFunction (void);
Service for performing the processing of the Nv M jobs.
使用
函数 NvM_MainFunction 既无传递参数也无返回值(void NvM_MainFunction(void)),并通过 SchM_NvM.h 声明([SWS_NvM_00464])。它用于处理 NVRAM 管理器作业([SWS_NvM_00464]、[SWS_NvM_00256])。在异步服务完成后,它执行配置的回调例程以通知上层([SWS_NvM_00347])。此外,它在后台负责所请求的 NVRAM 块 CRC 重新计算([SWS_NvM_00333]),例如由 NvM_SetRamBlockStatus([SWS_NvM_00121])或 NvM_ValidateAll([SWS_NvM_00857])引起的重新计算。
流程控制与优先级排序
若进行了配置,该函数会监视即时优先级队列以获取具有即时优先级的请求([SWS_NvM_00259])。若某个常规请求被即时作业破坏性中止,NvM_MainFunction 会在其完成后重新启动该请求([SWS_NvM_00258])。在轮询模式激活时,它检查传递给下层的作业的状态([SWS_NvM_00346])。在处理 NvM_WriteAll 期间,它通过 MemIf_GetStatus 针对 MEMIF_BROADCAST_ID 周期性查询存储驱动程序抽象的状态,并且只要报告 MEMIF_BUSY_INTERNAL 就暂扣发送给上层的回调([SWS_NvM_00350])。
错误处理与重试
若应用程序特定的回调失败,NvM_MainFunction 控制重试尝试:
- 若
NvMReadRamBlockFromNvCallback返回值E_NOT_OK,模块将在NvM_MainFunction的下一个周期中重复调用([SWS_NvM_00839])。 - 若
NvMWriteRamBlockToNvCallback返回E_NOT_OK,重试同样在NvM_MainFunction的下一次调用中进行([SWS_NvM_00840])。 - 若显式同步回调在
NvM_SetRamBlockStatus时返回E_NOT_OK,模块将执行配置的重试,每次调用NvM_MainFunction进行一次尝试([SWS_NvM_00908])。
本段文本由人工智能基于 AUTOSAR 规范 R20-11 生成。
实现者指南即将推出(复杂度 I2)
函数 NvM_SingleBlockCallbackFunction [SWS_NvM_00467] 📄 PDF
Std_ReturnType NvM_SingleBlockCallbackFunction (NvM_BlockRequestType BlockRequest, NvM_RequestResultType JobResult);
Per block callback routine to notify the upper layer that an asynchronous single block request has been finished.
使用
回调例程 NvM_SingleBlockCallbackFunction 同步通知上层此前发起的异步单块请求已完成 [SWS_NvM_00467]。
该函数处理两个传递参数 [SWS_NvM_00467]:
BlockRequest(类型NvM_BlockRequestType):传递此前执行的块请求类型,例如读取或写入操作 [SWS_NvM_00467]。JobResult(类型NvM_RequestResultType):报告已处理块作业的总体结果 [SWS_NvM_00467]。
作为返回值,该函数提供类型 Std_ReturnType [SWS_NvM_00467]。回调的成功处理通过返回 E_OK 来表示;任何其他返回值均表示执行不成功 [SWS_NvM_00467]。
错误处理与并发
该接口未指定自身的 DET 或 DEM 错误报告 [SWS_NvM_00467]。先前作业的结果通过参数 JobResult 传递,而回调处理本身的错误则通过函数返回值报告 [SWS_NvM_00467]。
关于并发性,该例程被声明为不可重入(Non Reentrant)[SWS_NvM_00467]。它通过头文件 NvM_Externals.h 提供 [SWS_NvM_00467]。推测 NvM 模块的调用是在周期性 NvM 作业处理的任务上下文中同步进行的(解释)。 问题 Q-f50640211851274f (未决)
本使用说明由 AI 基于 AUTOSAR R20-11 规范生成。
实现者指南即将推出(复杂度 I1)
函数 NvM_MultiBlockCallbackFunction [SWS_NvM_00468] 📄 PDF
Std_ReturnType NvM_MultiBlockCallbackFunction (NvM_MultiBlockRequestType MultiBlockRequest, NvM_RequestResultType JobResult);
Common callback routine to notify the upper layer that an asynchronous multi block request has been finished. Available v ia Nv M_ Externals.h
回调例程 NvM_MultiBlockCallbackFunction 向上层通知此前发起的异步多块作业已完成 [SWS_NvM_00468]。该函数的声明通过头文件 NvM_Externals.h 提供 [SWS_NvM_00468]。
调用上下文与参数
NVRAM 管理器的调用与处理流程中的执行同步进行 [SWS_NvM_00468]。调用时向该例程传递两个参数:
MultiBlockRequest(类型NvM_MultiBlockRequestType):表示此前处理的多块作业的具体请求类型,例如读取或写入访问 [SWS_NvM_00468]。JobResult(类型NvM_RequestResultType):将先前多块作业处理的最终结果传输至上层 [SWS_NvM_00468]。
返回值与错误处理
该例程向调用模块返回类型为 Std_ReturnType 的值 [SWS_NvM_00468]。返回值 E_OK 表示回调函数能够成功处理;反之,任何其他返回值均表示处理失败 [SWS_NvM_00468]。规范范围中未为此函数定义具体的错误码、DET 或 DEM 报告。解释:返回值不等于 E_OK 的具体后果推测是特定于实现的,因为标准未规定后续的错误处理。 问题 Q-462dea7f3074ae9c (未决)
并发性与限制
该函数被指定为不可重入(Non Reentrant)[SWS_NvM_00468]。因此在调用系统中必须确保不发生对此回调接口的并发或中断性多次调用。
本文本由 AI 基于规范生成。
实现者指南即将推出(复杂度 I1)
函数 NvM_InitBlockCallbackFunction [SWS_NvM_00469] 📄 PDF
Std_ReturnType NvM_InitBlockCallbackFunction (NvM_InitBlockRequestType InitBlockRequest);
Per block callback routine which shall be called by the Nv M module when default data needs to be restored in RAM, and a RO M block is not configured. AUTOSAR CP R20 - of Document ID : AUTOSAR_SWS_NVRAMManager
用法与调用上下文
当必须在 RAM 中恢复 NVRAM 块的默认数据且未配置相应的 ROM 块时,NvM 模块将调用用户特定的回调例程 NvM_InitBlockCallbackFunction [SWS_NvM_00469]。调用同步进行,且该接口通过头文件 NvM_Externals.h 声明 [SWS_NvM_00469]。
作为传递参数,函数接收类型为 NvM_InitBlockRequestType 的 InitBlockRequest [SWS_NvM_00469]。该值向例程告知当前处理块的具体请求类型,例如读取或恢复数据(read、restore)[SWS_NvM_00469]。
返回值与错误处理
该例程返回类型为 Std_ReturnType 的状态值 [SWS_NvM_00469]:
E_OK:向 NvM 模块表示回调函数已成功初始化并处理了 RAM 中的数据 [SWS_NvM_00469]。- 任何其他返回值:表示初始化未能成功完成 [SWS_NvM_00469]。
针对该接口本身未指定 DET 或 DEM 的具体错误码 [SWS_NvM_00469]。
并发性与执行限制
该接口被定为同步且不可重入(Non Reentrant)[SWS_NvM_00469]。由于 NVRAM 管理器同步等待该函数返回,例程内部的阻塞执行推测会直接暂停 NvM 的后续处理(解释)。 问题 Q-c0e43c9871c4f2d0 (未决)
此使用说明由 AI 基于 AUTOSAR R20-11 规范生成。
实现者指南即将推出(复杂度 I1)
函数 NvM_WriteRamBlockToNvm [SWS_NvM_00539] 📄 PDF
Std_ReturnType NvM_WriteRamBlockToNvm (void* NvMBuffer);
Block specific callback routine which shall be called in order to let the application copy data from RAM block to Nv M module's mirror.
块特定的回调函数 NvM_WriteRamBlockToNvm 用于显式同步,以将应用程序数据从 RAM 块复制到 NvM 模块的内部 RAM 镜像中 [SWS_NvM_00539]。它声明性地通过 NvM_Externals.h 可用,并由 NvM 同步调用 [SWS_NvM_00539]。
用法与参数
该函数将指针 NvMBuffer 作为输出参数传递,该指针表示必须向其写入数据的 NvM 镜像的目标地址 [SWS_NvM_00539]。作为返回值,回调例程在成功处理时返回 E_OK,在发生错误时返回任何其他值 [SWS_NvM_00539]。
并发性与限制
根据规范,NvM_WriteRamBlockToNvm 被设计为不可重入(Non Reentrant)[SWS_NvM_00539]。
模块内的相互作用
- 在关机时,只要 NVRAM 块的参数
NvMSelectBlockForWriteAll配置为true[SWS_NvM_00252],作业NvM_WriteAll便会同步永久 RAM 块或调用用于显式同步的回调例程NvM_WriteRamBlockToNvm[SWS_NvM_00018]。 - 写作业
NvM_WriteBlock[SWS_NvM_00303] 和NvM_WritePRAMBlock[SWS_NvM_00803] 在调用NvM_WriteRamBlockToNvm后自动使尚无效的永久 RAM 块有效。
本段文本由人工智能基于 AUTOSAR 规范 R20-11 生成。
实现者指南即将推出(复杂度 I1)
函数 NvM_ReadRamBlockFromNvm [SWS_NvM_00540] 📄 PDF
Std_ReturnType NvM_ReadRamBlockFromNvm (const void* NvMBuffer);
Block specific callback routine which shall be called in order to let the application copy data from Nv M module's mirror to RAM block.
函数 NvM_ReadRamBlockFromNvm 是一个块特定的回调例程,通过 NvM_Externals.h 声明 [SWS_NvM_00540]。其目的在于允许应用程序将数据从 NvM 模块的内部镜像缓冲区复制到关联的 RAM 块中,以执行显式同步 [SWS_NvM_00540]、[SWS_NvM_00118]。
用法与语义
- 调用上下文与并发性:调用同步进行,并被指定为不可重入(
Non Reentrant)[SWS_NvM_00540]。 - 参数:指针
NvMBuffer(类型const void*)用作传递参数。它传递可以从中读取数据并复制到 RAM 块中的缓冲区地址 [SWS_NvM_00540]。 - 返回值与错误处理:回调函数返回一个
Std_ReturnType。返回值E_OK表示成功处理;任何其他返回值均表示处理不成功 [SWS_NvM_00540]。
相互作用
在多块服务 NvM_ReadAll 的框架下,针对进行了相应配置且 NvmSelectBlockForReadall == TRUE 适用的那些 NVRAM 块调用 NvM_ReadRamBlockFromNvm 以进行显式同步 [SWS_NvM_00118]、[SWS_NvM_00356]。这构成了直接复制到永久 RAM 块的替代方案,而 NvM_ReadAll 则初始化块的管理数据 [SWS_NvM_00356]。
本段文本由 AI 系统基于规范要求生成。
实现者指南即将推出(复杂度 I1)
类型 NvM_ConfigType [SWS_NvM_00880] 📄 PDF
Configuration data structure of the Nv M module.
类型 NvM_MultiBlockRequestType [SWS_NvM_91003] 📄 PDF
Identifies the type of request performed on multi block when signaled via the callback function or when reporting to Bsw M
枚举类型 NvM_MultiBlockRequestType 通过头文件 NvM.h 提供,用于唯一标识已执行的多块请求 [SWS_NvM_91003]。当通过回调函数指示多块操作的结果或状态,或者向模块 BswM 报告时,使用该类型 [SWS_NvM_91003]。
值范围与语义
该枚举定义了以下值以区分多块作业 [SWS_NvM_91003]:
NVM_READ_ALL(0x00):指示已执行NvM_ReadAll。NVM_WRITE_ALL(0x01):指示已执行NvM_WriteAll。NVM_VALIDATE_ALL(0x02):指示已执行NvM_ValidateAll。NVM_FIRST_INIT_ALL(0x03):指示已执行NvM_FirstInitAll。NVM_CANCEL_WRITE_ALL(0x04):指示已执行NvM_CancelWriteAll。
相互作用
通过传递该类型,被调用的回调以及 BswM 能够确定具体是哪一个多块服务触发了通知。解释:推测向 BswM 的反馈用于将整个系统中的后续动作或状态转换与特定多块服务的完成相挂钩。 问题 Q-69b4d985301acfeb (未决)
本段文本由 AI 生成并用作参考指南。以引用的规范为准。
实现者指南即将推出(复杂度 I1)
类型 NvM_RequestResultType [SWS_NvM_00470] 📄 PDF
Type NvM_RequestResultType.
类型 NvM_RequestResultType 基于 uint8,通过 Rte_NvM_Type.h 提供,并反映 NVRAM 管理器的读、写和控制作业的异步请求结果 [SWS_NvM_00470]。该结果主要通过 API 服务 NvM_GetErrorStatus 查询,此外还可以通过配置的回调函数发出信号 [SWS_NvM_00470]。
取值范围反映了不同的执行状态和错误情况 [SWS_NvM_00470]:
NVM_REQ_OK(0x00):上一个异步作业已成功完成;这同时也是复位后的默认值。NVM_REQ_NOT_OK(0x01):异步读、写或控制请求未成功完成。NVM_REQ_PENDING(0x02):异步请求当前仍在处理中。NVM_REQ_INTEGRITY_FAILED(0x03):NvM_ReadBlock或NvM_ReadAll时的数据完整性错误。在NvM_ReadBlock的情况下,RAM 块的内容已被更改,但已变为无效;应用程序负责更新并验证其内容。NVM_REQ_BLOCK_SKIPPED(0x04):引用的块在NvM_ReadAll或NvM_WriteAll期间被跳过(例如NvM_ReadAll时的 Dataset-NVRAM 块或未配置永久 RAM 块的块)。NVM_REQ_NV_INVALIDATED(0x05):引用的 NV 块已失效。NVM_REQ_CANCELED(0x06):通过NvM_CancelWriteAll中止NvM_WriteAll,或通过NvM_CancelJobs中止单块作业(NvM_ReadBlock、NvM_WriteBlock、NvM_EraseNvBlock、NvM_InvalidateNvBlock、NvM_RestoreBlockDefaults)。NVM_REQ_RESTORED_DEFAULTS(0x08):默认值已成功复制到 RAM 镜像中。
在与冗余块(NVM_BLOCK_REDUNDANT)配合使用时,函数 NvM_InvalidateNvBlock 仅在两个 NV 块均已失效时,才将请求结果 NvM_RequestResultType 设置为 NVM_REQ_OK [SWS_NvM_00274]。
该文本为自动生成。所有说明均仅基于 AUTOSAR 版本 R20-11 的规范要求。
实现者指南即将推出(复杂度 I1)
类型 NvM_BlockIdType [SWS_NvM_00471] 📄 PDF
Identification of a NVRAM block via a unique block identifier. Reserved NVRAM block IDs: 0 - > to derive multi block request results via Nv M_ Get Error Status 1 - > redundant NVRAM block which holds the configuration ID
类型 NvM_InitBlockRequestType [SWS_NvM_91123] 📄 PDF
Identifies the type of request performed on a block when signaled via the callback function
数据类型 NvM_InitBlockRequestType 基于 uint8,并通过头文件 Rte_NvM_Type.h 提供 [SWS_NvM_91123]。当通过相应的回调函数发出通知时,它用于标识在 NVRAM 块上执行的请求类型 [SWS_NvM_91123]。
允许的值范围包括四种请求类型 [SWS_NvM_91123]:
NVM_INIT_READ_BLOCK(0x00):指示已为该块请求了NvM_ReadBlock或NvM_ReadPRAMBlock[SWS_NvM_91123]。NVM_INIT_RESTORE_BLOCK_DEFAULTS(0x01):指示已为该块请求了NvM_RestoreBlockDefaults或NvM_RestorePRAMBlockDefaults[SWS_NvM_91123]。NVM_INIT_READ_ALL_BLOCK(0x02):指示该块的处理在NvM_ReadAll的范围内进行 [SWS_NvM_91123]。NVM_INIT_FIRST_INIT_ALL(0x03):标识在NvM_FirstInitAll的执行过程中的块处理 [SWS_NvM_91123]。
被调用的应用逻辑可以根据此枚举值区分是显式的单个块请求(读取或恢复默认值),还是系统启动期间的全局批处理操作 [SWS_NvM_91123]。Interpretation:该类型推测会作为参数传递给与块相关的初始化回调,以便应用程序能够根据具体情况提供默认数据或进行特定准备。 问题 Q-42d0d469e305728e (未决)
本使用说明基于 AUTOSAR Classic Release R20-11 规范。
实现者指南即将推出(复杂度 I1)
类型 NvM_BlockRequestType [SWS_NvM_91002] 📄 PDF
Identifies the type of reques t performed on a block when signaled via the callback function
枚举类型 NvM_BlockRequestType 基于 uint8,并通过头文件 Rte_NvM_Type.h 提供 [SWS_NvM_91002]。它用于在通过回调函数进行通知时,传递先前在 NVRAM 块上执行的请求类型 [SWS_NvM_91002]。
值范围包括六个特定的块请求 [SWS_NvM_91002]:
NVM_READ_BLOCK(0x00):表示已对该块执行了NvM_ReadBlock或NvM_ReadPRAMBlock[SWS_NvM_91002]。NVM_WRITE_BLOCK(0x01):表示已对该块执行了NvM_WriteBlock或NvM_WritePRAMBlock[SWS_NvM_91002]。NVM_RESTORE_BLOCK_DEFAULTS(0x02):表示已执行了NvM_RestoreBlockDefaults或NvM_RestorePRAMBlockDefaults[SWS_NvM_91002]。NVM_ERASE_NV_BLOCK(0x03):表示已在该块上执行了NvM_EraseNvBlock[SWS_NvM_91002]。NVM_INVALIDATE_NV_BLOCK(0x04):表示已在该块上执行了NvM_InvalidateNvBlock[SWS_NvM_91002]。NVM_READ_ALL_BLOCK(0x05):表示NvM_ReadAll已完成对该块的处理 [SWS_NvM_91002]。
在应用架构中,该值推测作为参数在回调例程中被评估,以向下分化地通知上层软件组件关于特定块操作的结束 [SWS_NvM_91002]。 问题 Q-467801b6b5e898a2 (未决)由于有效载荷中缺少关于错误码或并发性的进一步规定,规范细节仅限于类型定义和值范围 [SWS_NvM_91002]。
本文由 AI 创建;无法保证准确性。
实现者指南即将推出(复杂度 I1)
Request a governed re-review of this record. The record is not changed immediately.
- Record
AUTOSAR/AP/record/CP_MOD_NvM- Status
- unspecified
- Version
AUTOSAR/AP/record/CP_MOD_NvM@rel:R20-11#f5d7cc73- Content hash
f5d7cc73- Source
- https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_NVRAMManager.pdf#nameddest=SWS_NvM_00447
gemini-3.8-flash-low· 2026-10-13 · 德文原文