AUTOSAR-MemIf模块
0 前言
MemIf模块全称Memory Abstraction Interface Module,属于ECU抽象层
MemIf模块有两个意义:
- 抽象ROM的功能,无论使用Flash还是EEPROM,从MemIf模块开始指令没有任何区别,代码通用,彻底脱离硬件
- 抽象ROM的设备,MemIf模块眼中,ECU只有3种区别:只使用Flash,只使用EEPROM,两者同时使用
MemIf模块最精简任务包括:
- 给Flash或者EEPROM或者同时给两者一个Device Index,根据Device Index将NvM模块的指令转发给对应的Fee模块或者Ea模块
-
MemIf模块模块没有初始化,没有配置指针,没有状态指针
1 MemIf模块的设计原理
MemIf模块没有MemIf_Init
和MemIf_MainFunction
MemIf模块所有API都是同步指令
2 MemIf模块的C语言实现
2.1 C文件架构
静态文件 | 描述 |
---|---|
MemIf.h | 包含API所需的状态枚举常量、类定义 |
MemIf.c | API代码 |
MemIf_Types.h |
EMEIF_ 开头的枚举常量 |
动态文件 | 描述 |
---|---|
StartApplication_MemIf_ecuc.arxml | Configurator生成的本地配置文件 |
MemIf_Bswmd.arxml | |
MemIf_Cfg.h | 包含项目所需的常量宏定义、开关宏定义 |
MemIf_Cfg.c | 包含使用到的Device API列表 |
2.2 使用到的类定义和状态枚举
MemIf定义的类 | 描述 | 定义来源 |
---|---|---|
MemIf_StatusType | 描述Fls模块的Module Status: 1. MEMIF_UNINIT 模块未初始化 2. MEMIF_IDLE 没有需要处理的job 3. MEMIF_BUSY 模块正在处理job,不接受新job |
MemIf_Types.h |
MemIf_JobResultType | 描述Fls模块的Job Result 1. MEMIF_JOB_OK job处理成功 2. MEMIF_JOB_FAILED job处理以error结束 3. MEMIF_JOB_PENDING job正在处理 4. MEMIF_JOB_CANCELLED job已经取消 |
MemIf_Types.h |
MemIf_ModeType | 描述Fls模块的Processing Mode: 1. MEMIF_MODE_SLOW Slow模式 2. MEMIF_MODE_FAST Fast模式 |
MemIf_Types.h |
Std定义的类 | 描述 | 定义来源 |
---|---|---|
Std_ReturnType | 描述Job Request结果 1. E_OK 对同步指令,表示指令执行成功 对异步指令,表示指令被队列接受 2. E_NOT_OK 对同步指令,表示指令执行失败 对异步指令,表示指令被队列拒绝 |
Std_Type.h |
2.4 MemIf模块提供的API
MemIf_Read
Std_ReturnType MemIf_Read ( uint16 DeviceIndex ,uint16 BlockNumber ,uint16 BlockOffset ,uint8* DataBufferPtr ,uint16 Length ) |
---|
- 根据
DeviceIndex
的不同,MemIf_Read
将调用Fee_Read
或者Ea_Read
-
MemIf_Read
是同步指令,Fee_Read
或者Ea_Read
是异步指令,注意区分
MemIf_Write
Std_ReturnType MemIf_Write ( uint16 DeviceIndex ,uint16 BlockNumber ,uint8* DataBufferPtr ) |
---|
- 根据
DeviceIndex
的不同,MemIf_Write
将调用Fee_Write
或者Ea_Write
-
MemIf_Write
是同步指令,Fee_Write
或者Ea_Write
是异步指令,注意区分
MemIf_InvalidateBlock
Std_ReturnType MemIf_InvalidateBlock ( uint16 DeviceIndex ,uint16 BlockNumber ) |
---|
- 根据
DeviceIndex
的不同,MemIf_InvalidateBlock
将调用Fee_InvalidateBlock
或者Ea_InvalidateBlock
-
MemIf_InvalidateBlock
是同步指令,Fee_InvalidateBlock
、Ea_InvalidateBlock
都是异步指令,注意区分
MemIf_EraseImmediateBlock
Std_ReturnType MemIf_EraseImmediateBlock ( uint16 DeviceIndex ,uint16 BlockNumber ) |
---|
- 根据
DeviceIndex
的不同,MemIf_EraseImmediateBlock
将调用Fee_EraseImmediateBlock
或者Ea_EraseImmediateBlock
-
MemIf_EraseImmediateBlock
是同步指令,Fee_EraseImmediateBlock
、Ea_EraseImmediateBlock
都是异步指令,注意区分
MemIf_Cancel
Std_ReturnType MemIf_Cancel (uint16 DeviceIndex ) |
---|
- 根据
DeviceIndex
的不同,MemIf_Cancel
将调用Fee_Cancel
或者Ea_Cancel
-
MemIf_Write
、Fee_Write
、Ea_Write
都是同步指令
MemIf_SetMode
void MemIf_SetMode (MemIf_ModeType Mode ) |
---|
-
MemIf_SetMode
同时调用Fee_SetMode
或者Ea_SetMode
-
MemIf_SetMode
、Fee_SetMode
、Ea_SetMode
都是同步指令
MemIf_GetStatus
Std_ReturnType MemIf_GetStatus (uint16 DeviceIndex ) |
---|
- 根据
DeviceIndex
的不同,MemIf_GetStatus
将调用Fee_GetStatus
或者Ea_GetStatus
-
MemIf_GetStatus
、Fee_GetStatus
、Ea_GetStatus
都是同步指令
MemIf_GetJobResult
Std_ReturnType MemIf_GetJobResult (uint16 DeviceIndex ) |
---|
- 根据
DeviceIndex
的不同,MemIf_GetJobResult
将调用Fee_GetJobResult
或者Ea_GetJobResult
-
MemIf_GetJobResult
、Fee_GetJobResult
、Ea_GetJobResult
都是同步指令
2.5 MemIf模块使用的外部API
Det_ReportError
Std_ReturnType Det_ReportError ( uint16 ModuleId ,uint8 InstanceId ,uint8 ApiId ,uint8 ErrorId ) |
---|
- 来自Det模块的API,检测并报告开发错误,由Dev Error Detect启用
-
ModuleId
==MEMIF_MODULE_ID
或22
-
InstanceId
=0
-
ErrorId
有2个,如下MEMIF_E_PARAM_DEVICE
MEMIF_E_PARAM_POINTER
3 MemIf模块的DaVinci Configurator配制
3.1 MemIf\MemIfMemHwAs
每个Fee模块或者Ea模块都有一个MemIfMemHwA页面,提供设备的Device Index
Reference to Fee/Ea
配制 | Configurator选项 | Reference to Fee/Ea -> reference |
---|---|---|
影响 | MemIf_Cfg.h |
#define MEMIF_Fee #define MEMIF_Ea
|
- 关联一个Fee/FeeGeneral或者Ea/EaGeneral
Memory Hardware Abstraction Id
配制 | Configurator选项 | Memory Hardware Abstraction Id -> [0, 1] |
---|---|---|
影响 | MemIf_Cfg.h |
#define MEMIF_Fee #define MEMIF_Ea
|
- 给关联的Fee/FeeGeneral或者Ea/EaGeneral提供一个Device Index
3.2 MemIf\MemIfGeneral
MemIfGeneral部分主要对应MemIf_Cfg.h文件中的常量宏定义和开关宏定义
Development Error Detection
配制 | Configurator选项 | Development Error Detection -> True/False |
---|---|---|
影响 | MemIf_Cfg.h | #define MEMIF_DEV_ERROR_DETECT |
- 宏定义开关,是否启用Det模块检测开发错误
- 如果启用Development Error Detection,则添加
#include Det.h
并启用APIDet_ReportError
- 选择
False
Number of devices
配制 | Configurator选项 | Number of devices -> [0, 1] |
---|
- 功能没做好,不用填
Safe Bsw Checks
配制 | Configurator选项 | Safe Bsw Checks -> True/False |
---|
- 带有功能安全要求的项目需要开启,非AUTOSAR标准内容
- 选择
False
Version Info Api
配制 | Configurator选项 | Version Info Api -> True/False |
---|---|---|
影响 | MemIf_Cfg.h | #define MEMIF_DEV_ERROR_DETECT |
- 宏定义开关,是否启用API
MemIf_GetVersionInfo
- 选择
False