在本案例中,NvM配置为ServiceSwComponent,应用程序访问NVRAM数据需要通过C/S接口使用标准NvM服务。
根据NvM Block同步方式的不同,进而还有两种场景,本文将介绍第一种:应用提供了其RAM数据区的地址,也即选择的隐性同步机制,同时,NvMRamBlockDataAddress也并未设置。
选择隐性同步机制,需要将NvMBlockUseSyncMechanism设置为FALSE。
在这种场景下,应用需要提供RAM数据的地址作为NvM_ReadBlock / NvM_WriteBlock接口的参数,因此,用户需要保证RAM数据的一致性。

上图展示了此案例中,NvM配置与使用到的block的关系。
以write block为例,SWC首先需要通过RTE接口的调用向NvM请求WriteBlock操作,此后,SWC应当确保待写入数据的一致性。
NvM接受请求后即返回OK。
实际的写入请求将会在NvM主函数周期执行时进行操作,调用底层驱动,基于SWC提供的数据地址取值,写入NVRAM。
当底层返回写入任务完成状态后,NvM通过RTE调用触发事件,由OS换起SWC的NvM任务结束通知函数,代表写入过程结束,此后无需再保证数据的一致性。

当NvM被配置为ServiceSwComponentType时,提供接口为:

对于不需要在不同SWC间共享的NvData,那么就适用于本案例场景。
NvM相关回顾: