十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

[AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步

[AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步 目录关键词平台说明背景一、implicit synchronization1.1 Write requests 流程 (NvM_WriteBlock)1.2 Read requests 流程 (NvM_ReadBlock)1.3 Restore default requests 流程 (NvM_RestoreBlockDefaults)1.4 Multi block read requests 流程 (NvM_ReadAll)1.5 Multi block write requests 流程 (NvM_WriteAll)二、explicit synchronization2.1 Write requests 流程 (NvM_WriteBlock)2.2Read requests 流程 (NvM_ReadBlock)关键词嵌入式、C语言、autosar、OS、BSW平台说明项目ValueOSautosar OSautosar厂商vector EB芯片厂商TI 英飞凌编程语言CC编译器HighTec (GCC)autosar版本4.3.1回到总目录缩写描述EEPROMElectrically Erasable Programmable read only memoryNVMNVRAM ManagerMEMIFMemory Abstraction InterfaceEAEEPROM AbstractionEEPinternal/external EEPROM DRIVERFEEFlash EEPROM EmulationFLSinternal/external Flash DriverFCFSFirst come first served背景NVM与APP之间的data有implicit和explicit两种同步方式本文描述了两种方式之间的区别和实现方式。一、implicit synchronization如NVM模块介绍和使用说明1.1所描述的不论什么类型的NVRAM BLOCK 都至少有一个NV block, 一个RAM block and 一个 Administrative block。implicit synchronization 的意思就是APP 与NVRAM block 共用一个 RAM block。如下图所示不建议多个APP 访问同一个RAM block一是因为在写入期间 RAM 的值不允许改动二是因为多个APP 的读写容易造成冲突和越界。1.1 Write requests 流程 (NvM_WriteBlock)APP 数据写入RAM 中APP发出the NvM_WriteBlock请求此后这个RAM block 的控制权移交给NVM模块。从现在开始APP不允许修改RAM block直到通过异步轮询预留链接位置后面更新详情发出请求成功或者失败的返回。这个时候可以读取RAM block。APP可以用轮询的方式周期性检查NvM写入操作是否完成NvM也可以用回调函数的方式来通知APP操作完成。当NvM操作完成后APP才可以重新更改RAM Block中的值。1.2 Read requests 流程 (NvM_ReadBlock)APP 端提供一个RAM 用于被 NVM 端的RAM block 填充data。APP 发出NvM_ReadBlock 请求此后这个RAM block 的控制权移交给NVM模块。从这一步开始APP不允许读取也不允许写入这个RAM直到通过异步轮询发出请求成功或者失败的返回。APP可以用轮询的方式周期性检查NvM写入操作是否完成NvM也可以用回调函数的方式来通知APP操作完成。当NvM操作完成后APP才可以重新读取和使用RAM Block中的值。1.3 Restore default requests 流程 (NvM_RestoreBlockDefaults)APP 端提供一个RAM 用于被 NVM 端的ROM block 填充data。APP 发出NvM_RestoreBlockDefaults请求此后这个RAM block 的控制权移交给NVM模块。从这一步开始APP不允许读取也不允许写入这个RAM直到通过异步轮询发出请求成功或者失败的返回。APP可以用轮询的方式周期性检查NvM写入操作是否完成NvM也可以用回调函数的方式来通知APP操作完成。当NvM操作完成后APP才可以重新读取和使用RAM Block中被ROM提供的值。1.4 Multi block read requests 流程 (NvM_ReadAll)EcuM Fixed 状态机在启动的时候调用用于读取填充所有permanent block。ECU状态管理器可以使用轮询来获取请求的状态也可以通过回调函数得到通知。在NvM_ReadAll期间将在完全处理完NVRAM块后调用单个块回调(如果配置了)。这些回调使RTE能够单独启动每个SW-C。1.5 Multi block write requests 流程 (NvM_WriteAll)此请求必须仅在系统关闭时由ECU状态管理器触发。这个请求将所有修改过的永久RAM块的内容写入NV内存。通过仅在ECU关闭期间调用此请求ECU状态管理器可以确保在操作结束之前没有SW组件能够修改RAM块中的数据。ECU状态管理器发出NvM_WriteAll请求该请求将控制权转移给NvM模块。ECU状态管理器可以使用轮询来获取请求的状态也可以通过回调函数得到通知。二、explicit synchronization开启explicit sync 配置NvMReadRamBlockFromNvCallback回调读取RAM mirror 数据到 RAM block。NvMWriteRamBlockToNvCallback回调将RAM block 数据写到 RAM mirror。NvMrepeatmirrorOperations:上述两个回调失败时重新执行次数。如下图所示explicit 与implicit synchronization 相比多了一个mirro RAM 显式同步与隐式同步最根本的区别就是显式同步APP是知道NvM使用RAM Block的起始时间点和结束时间点的而且这两个时间点是APP自己来控制的即两个回调函数中的复制操作起始和结束的时间点。APP不需要通过读取NvM的操作状态来判断当前是否可以使用RAM Block。通过一个互斥量设计可以让多个APP同时共享一个RAM BLOCK。注意如果在一个APP 请求 没有执行完的时候APP2又来一个请求NVM会合并两个请求NVM只会处理一次。2.1 Write requests 流程 (NvM_WriteBlock)APP 数据写入RAM 中。APP发出the NvM_WriteBlock请求。APP可以修改RAM block直到NvM模块调用NvMWriteRamBlockToNvM 回调。NvM模块调用NvMWriteRamBlockToNvM回调的时候将RAM block 数据写到 RAM mirror。如果返回E_NOT_OK则表示数据不一致重新执行直到NvMRepeatMirrorOperations次数。成功执行NvMWriteRamBlockToNvM后APP才能重新读写RAM block。APP可以用轮询的方式获取NvM的操作结果NvM也可以用回调函数的方式通知APP操作结果。2.2Read requests 流程 (NvM_ReadBlock)APP 端提供一个RAM 用于被 NVM 端的RAM block 填充data。APP发出NvM_ReadBlock请求。APP可以修改RAM block直到NvM模块调用NvMReadRamBlockFromNvM回调。NvM模块调用NvMReadRamBlockFromNvM 回调的时候将RAM mirror 数据写到 RAM block 。如果返回E_NOT_OK则表示数据不一致重新执行直到NvMRepeatMirrorOperations次数。成功执行NvMReadRamBlockFromNvM 后APP才能重新使用RAM block 的数据。APP可以用轮询的方式获取NvM的操作结果NvM也可以用回调函数的方式通知APP操作结果。回到总目录
返回列表