Autosar存储入门系列04_NvM的CRC比较机制及同/异步写

本文框架

  • 0.前言
  • 1. NvM的CRC校验
    • 1.1 CRC 比较机制
  • 2. NvM的同步写及异步写
    • 2.1 NvM的同步写
    • 2.1 NvM的异步写

0.前言

本系列是Autosar存储入门系列,希望能从学习者的角度把存储相关的知识点梳理一遍,这个过程中如果大家觉得有讲得不对或者不够清晰的地方,还请一定指出来,一起探讨,加深学习。

另外根据本人多年的开发经验,做了一些AutosarMCAL配置,通信,诊断,模式管理等实战总结,如果您有需求可以参见AutoSar 实战进阶系列专栏,快速链接:AutoSar实战进阶系列导读

本篇介绍一下Autosar中NVM的CRC校验及同/异步写调用逻辑介绍,前面内容也有涉及到,内容较简单,对于老手可以直接跳过本篇。

基本框架如下:
Autosar存储入门系列04_NvM的CRC比较机制及同/异步写_第1张图片

1. NvM的CRC校验

1.1 CRC 比较机制

在上篇文章中我们介绍了Block存储的信息中,除必须的Block Data外,还有可选的Block头信息及CRC校验信息。
在这里插入图片描述
Block的CRC的计算是由NvM_MainFunction()异步完成的,CRC数据可以避免在NVM内存中进行不必要的写操作,其实现原理为:在写入数据到NVM内存之前,NvM重新基于当前数据计算CRC值,并将该值与之前读取或写入数据(存储在RAM中)的CRC进行比较:

1)CRC的数值一致,则NvM会判定数据未被更改,不会对block进行写入操作,并且回复成功写完成的状态;
2)CRC的数据不一致,即NvM数据已更改(不是最新的NV内存),并将数据写入NV RAM。

该机制可以通过NvMBlockUseCRCCompMechanism对NvM块启用。

2. NvM的同步写及异步写

NVM同步写和异步写是NvM(Non-volatile Memory)模块中的两种不同的数据写入方式,其中:

2.1 NvM的同步写

NVM同步写是指在写入数据到NVM时,需要等待数据写入操作完成后才能继续执行后续的操作。在配置了同步机制的情况下,必须同时配置NvMWriteRamBlockToNvM和NvMReadRamBlockFromNvM函数,以确保数据的正确读写。

同步写适用于下电前task已关闭后的NvM写入操作,此时即使写入的时间较长不会有任务超时发生。

2.1 NvM的异步写

NVM异步写是指在写入数据到NVM时,可以立即返回并继续执行后续的操作,在后续的NvM_MainFunction()中继续完成写入操作,这期间任务可以被打断,调用端也不需要等待写入操作完成。

异步写可以提高系统的响应性能,但在使用异步写时需要注意将数据先copy到对应的Mirror区域,在SWC运行过程中可以改变对应Ram里的值,但Mirror里的内容不能再去改变,否则会导致数据前后信息不一致。

其对应的调度顺序如下,与前面介绍的实时调用相同,即虽然是实时写,但实际是异步操作写入的。
在这里插入图片描述
适用于在ECU运行过程中对单个Block的写入。

总结来说,NVM同步写需要等待写入操作完成后才能继续执行后续其他操作,而NVM异步写则可以立即返回并继续执行后续的操作,两者各有优缺点及适用场景。

你可能感兴趣的:(#,Autosar,MemoryStack入门系列,autosar,nvm)