嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读 > 通过RTE访问NvM (二) —— ServiceSwComponent案例(2)

通过RTE访问NvM (二) —— ServiceSwComponent案例(2)

前文介绍了通过RTE调用NvM服务两种不同实现方式的介绍,以及NvM作为ServiceSwComponent使用的其中一个案例:



本文将介绍NvM作为ServiceSwComponent使用,且没有设置过NvMRamBlockDataAddress的另外一种场景:也即使用显性同步机制。

当使用显性同步机制时,需要将NvMBlockUseSyncMechanism配置选择设置为TRUE。

在这个场景中,数据仍由应用SWC本地维护,调用NvM_WriteBlock接口会触发写入操作的开始,但此时SWC仍旧可以修改这个数据,直到NvMWriteRamBlockToNvCallback回调函数被调用。

这个时候,SWC需要将数据提供给这个回调函数,其会将数据复制到Ram镜像中。读取过程类似。

如上图所示,我们能够看到,SWC和NvM是通过请求+回调完成整个操作的,数据则是SWC各自维护自己的RAM数据,读取或者写入都需要和NvM的RAM镜像进行数据交换。

在本文的场景中,由于是用户负责将数据拷贝到RAM镜像或者从RAM镜像拷贝,用户可以更加高效地控制数据地使用。

当然,为了使用显性同步机制,这意味着NvM模块需要额外的RAM区域来作为RAM镜像使用,也需要在回调函数中进行拷贝工作。

以写入操作为例,其调用过程如下:

用户向NvM提交请求后,NvM会在主函数中调用回调函数,由用户将数据拷贝到RAM镜像中。

底层返回写入任务结果后,NvM触发事件,借由RTE向SWC通知任务结果。

这个案例中,使用到的接口为:



NvM相关回顾: