BulkNvDataManager分析与设计
目录
1. 模块架构
1.1 BulkNvDataManager架构概述
BulkNvDataManager (简称BndM) 是AUTOSAR基础软件中的一个服务层模块,专门用于管理非易失性批量数据。
1.2 架构层次说明
-
应用层:包含使用BulkNvDataManager服务的应用软件组件。
- 应用软件组件通过BndM的API接口访问非易失性数据。
- 这些数据通常用于变体编码等需要频繁读取但很少更新的场景。
-
服务层:包含BulkNvDataManager模块本身。
- BndM的主要功能是允许应用层直接从Flash中读取数据,避免使用RAM镜像。
- 这种设计适用于需要大量非易失性数据的应用场景,提高内存利用效率。
-
ECU硬件抽象层:包含Flash驱动。
- BndM通过这一层访问底层Flash存储设备。
- 当前版本仅支持带有A/B扇区切换功能的高端微控制器中的PFlash写入。
-
硬件层:实际的Flash存储器硬件。
1.3 架构特点与限制
-
数据管理特点:
- 适用于频繁读取但很少更新的数据场景
- 直接从Flash读取数据,不需要RAM镜像
- 针对变体编码等大量数据场景优化
-
当前限制:
- 仅支持带有A/B扇区切换功能的PFlash写入
- 适用性受限于支持该特性的架构
- 当前不支持与底层Flash驱动的并行访问同步
2. 类结构与数据模型
2.1 BulkNvDataManager类图概述
BulkNvDataManager模块的类结构定义了其配置和数据处理方式。下图展示了主要的类型定义和它们之间的关系:
2.2 核心数据类型说明
-
BndM_ConfigType
:模块的主配置类型- 包含一般配置、块描述符数组和回调函数
- 在模块初始化时传递给
BndM_Init
函数
-
BndM_BlockIdType
:块ID类型- 用于唯一标识不同的数据块
- 基本类型为
uint16
-
BndM_Block<BlockId.Shortname>Type
:块数据类型- 对应每个配置的数据块的实际类型
- 不同数据块可以有不同的类型和大小
-
BndM_Result
:操作结果枚举BndM_OK
:操作成功BndM_NOT_OK
:操作失败BndM_PENDING
:操作挂起,尚未完成BndM_ABORTED
:操作被中止
2.3 配置容器说明
-
BndMGeneral
:一般配置容器BndMDevErrorDetect
:开发错误检测开关BndMVersionInfoApi
:版本信息API开关BndMFinalizeNotification
:完成通知开关BndMImplicitVariant
:隐式变体开关
-
BndMBlockDescriptor
:数据块描述符BndMBlockShortName
:块短名BndMBlockId
:块IDBndMBlockLength
:块长度BndMBlockIsProgrammable
:块是否可编程BndMSectorRange
:扇区范围引用
-
BndMCallbackBlock
:块回调函数容器BndMCallbackBlockRef
:块引用BndMModuleName
:模块名称
-
BndMCallbackGeneral
:一般回调函数容器BndMJobErrorNotification
:错误通知回调BndMJobEndNotification
:任务结束通知回调
2.4 API函数概述
BndM_Init
:初始化BndM模块BndM_GetVersionInfo
:获取版本信息BndM_GetBlockPtr
:获取数据块指针BndM_WriteStart
:开始写入操作BndM_WriteBlock
:写入指定数据块BndM_WriteFinalize
:完成写入操作BndM_WriteCancel
:取消写入操作BndM_MainFunction
:主函数,周期性调用
3. 操作序列
3.1 BulkNvDataManager写入操作序列
下图展示了BulkNvDataManager模块写入数据的典型交互序列:
3.2 序列操作详解
-
初始化阶段
- 应用调用
BndM_Init
传入配置指针 - BndM初始化内部数据结构和状态
- 应用调用
-
读取数据阶段
- 应用调用
BndM_GetBlockPtr
获取数据块指针 - BndM返回直接指向Flash中数据的指针,无需复制到RAM
- 应用调用
-
写入过程
- 写入开始:应用调用
BndM_WriteStart
- 块写入:应用调用
BndM_WriteBlock
指定块ID - 写入完成:应用调用
BndM_WriteFinalize
- 在写入过程中,BndM会调用配置的回调函数
- 写入开始:应用调用
-
错误处理
- 应用可以随时调用
BndM_WriteCancel
取消写入操作 - 发生错误时会调用
BndM_JobErrorNotification
回调
- 应用可以随时调用
3.3 回调函数使用
-
块级回调
xxx_BndMWriteStartFinish
:写入开始后回调xxx_BndMWriteBlockFinish
:块写入完成后回调xxx_BndMWriteFinalizeFinish
:写入完成后回调
-
一般回调
BndM_JobEndNotification
:任务成功完成时回调BndM_JobErrorNotification
:任务出错时回调
4. 总结
BulkNvDataManager是AUTOSAR基础软件中的一个专门用于管理非易失性批量数据的模块。它的特点是允许应用直接从Flash读取数据,避免使用RAM镜像,适合处理变体编码等需要频繁读取但很少更新的大量数据场景。
模块的架构清晰,包括完整的配置结构和API函数集,支持数据块的读取和写入操作。写入操作通过一系列API函数实现,包括开始、写入块和完成操作。模块也提供了相应的回调机制,便于应用层获知操作状态。
量数据的模块。它的特点是允许应用直接从Flash读取数据,避免使用RAM镜像,适合处理变体编码等需要频繁读取但很少更新的大量数据场景。
模块的架构清晰,包括完整的配置结构和API函数集,支持数据块的读取和写入操作。写入操作通过一系列API函数实现,包括开始、写入块和完成操作。模块也提供了相应的回调机制,便于应用层获知操作状态。
当前版本的BulkNvDataManager仅支持带有A/B扇区切换功能的PFlash写入,适用性受限于支持该特性的硬件架构。未来版本可能会改进其架构以支持更多类型的存储器和应用场景。