关键点:
-
NvM Block配置:
- 在AUTOSAR架构中,NvM块可以配置为RAM Block和ROM Block。RAM Block通常体现为一个全局变量,存放在栈Ram中,而ROM Block体现为一个const全局变量,存放在Data Flash中。RAM Block是一定会有的,而ROM Block是可配置的,并且与默认值(Default Value)的配置相关。
-
SWC访问NvM:
- SWC(软件组件)可以通过NvM Block Needs直接访问NvM。如果配置了默认值,就会配置ROM Block。SWC写NvM实际上是写一个名为
Rte_NonVolatileMemoryBlock_NVBlockDescriptor_PortName
的全局变量,也就是RAM Block。
- SWC(软件组件)可以通过NvM Block Needs直接访问NvM。如果配置了默认值,就会配置ROM Block。SWC写NvM实际上是写一个名为
-
NvM写操作:
- 当SWC调用写NvM的接口时,会触发一个更新Flag,并触发一个OSTask事件。这个操作会通过
NonvolatileMemoryBlock
的NonVolatileMemoryBlockTriggerRunnable
被OS调用,根据Block的写Flag调用NvM_WriteBlock
。NvM_WriteBlock
中调用NvM_QueueJob
,将Job排队。
- 当SWC调用写NvM的接口时,会触发一个更新Flag,并触发一个OSTask事件。这个操作会通过
-
NvM队列管理:
NvM_QueueJob
会判断队列是否已经Full,如果Full则Job被丢弃,如果没有Full,则Job入队列。这是NvM写操作的关键步骤,确保NvM操作的顺序和完整性。
-
NvM错误状态处理:
- 在
NonVolatileMemoryBlockTriggerRunnable
中,会检查NvM的错误状态。如果错误状态不是NVM_REQ_PENDING
,则会清除DirtyFlag并调用NvM_WriteBlock
。如果错误状态是NVM_REQ_PENDING
,则设置NvBlockPendingFlag
。
- 在
这些信息提供了ibcm_swc_10nvblockneed_nvmtest
的详细解释,涉及到AUTOSAR架构下NvM块的配置、SWC访问NvM、NvM写操作和队列管理等关键方面。