【Memory协议栈】Memory Abstraction Interface模块介绍

目录

前言

正文

1.功能简介

2.关键概念

3.关键类型定义

3.1 MemIf_StatusType

3.2 MemIf_JobResultType

3.3 MemIf_ModeType

4.关键API定义

4.1 MemIf_SetMode

4.2 MemIf_Read

4.3 MemIf_Write

4.4 MemIf_Cancel

4.5 MemIf_GetStatus

4.6 MemIf_GetJobResult

4.7 MemIf_InvalidateBlock

4.8 MemIf_EraseImmediateBlock

4.9 MemIf_EraseImmediateBlock

5.依赖的接口

6.小结


前言

存储协议栈负责ECU中非易失性数据的存储管理。存储协议栈的分享包括NVM、MemI、Ea、Fea、Eep、Fls模块的详细介绍及代码分析,具体的项目实战请关注本号的后续文章,本篇为Memory Abstraction Interface(MemIf)模块详细介绍篇。

正文

1.功能简介

MemIf模提供统一的接口让NVRAM管理器访问几个内存抽象模块(FEE或EA模块)。

内存抽象接口(MemIf)应从底层FEE或EA模块的数量中抽象,并在统一的线性地址空间上提供虚拟分割。

2.关键概念

Fast Mode: 例如,在启动/关闭期间,底层驱动程序可以被切换到快速模式,以便在这些阶段允许快速读/写。

Slow Mode: 在正常操作期间,底层驱动程序可以以慢速模式使用,以减少在底层设备/通信媒体的运行时或阻塞时间方面的资源使用。

注意:Fast Mode和Slow Mode可能取决于驱动程序的实现和底层设备的功能。也可能取决于NVRAM Manage的配置,因此也取决于特定项目的需求。

3.关键类型定义

3.1 MemIf_StatusType

图片

MemIf_StatusType类型标示底层抽象模块和设备驱动器的当前状表态。

3.2 MemIf_JobResultType

图片

图片

MemIf_JobResultType表示上一个作业的结果。

3.3 MemIf_ModeType

图片

MemIf_ModeType表示底层抽象模块和设备驱动程序的操作模式。

4.关键API定义

MemIf模块没有自己内部的功能逻辑,所有的API接口都会直接映射到对应的底层抽象模块(Ea, FEE)的API。

如果只配置了一个内存抽象模块,则内存抽象接口应实现为一组宏,将内存抽象接口API映射到相应的内存抽象模块的API。

参数设备索引应用于选择内存抽象模块(以及内存设备)。如果只配置了一个内存抽象模块,则应忽略参数设备索引。

例如

#define MemIf_Write(DeviceIndex, BlockNumber, DataPtr) \Fee_Write(BlockNumber, DataPtr)

如果配置了多个内存抽象模块,则内存抽象接口应使用有效的机制将API调用映射到适当的内存抽象模块。

注意:一种解决方案是使用指向函数的指针表,其中参数开发索引被用作数组索引。​​​​​​​

typedef struct{  uint8 DeviceIndex;  Std_ReturnType  (WriteFctPtr)(uint16 BlockNumber, uint8* DataBufferPtr);}MemIf_Write;
MemIf_Write MemIf_WriteFctPtr[] ={  {0, Fee_Write},  {1, Ea_Write},}

Example:​​​​​​​

#define MemIf_Write(DeviceIndex, BlockNumber, DataPtr) \MemIf_WriteFctPtr[DeviceIndex](BlockNumber,DataPtr)

如果配置了多个内存抽象模块,并且为该模块启用了开发错误检测,则内存抽象接口API的功能应检查参数设备指数是否为现有设备或模块服务中的广播标识符。

内存抽象接口API的功能应向默认错误参数跟踪器(DET)报告检测到的错误,错误代码为MEMIF_E_PARAM_DEVICE,不得执行被调用的服务。

如果内存抽象接口API的调用函数检测到属于非法参数设备索引的错误并具有返回值,则应设置如下:

MemIf_GetStatus: MEMIF_UNINIT

MemIf_GetJobResult: MEMIF_JOB_FAILED

All other functions: E_NOT_OK

4.1 MemIf_SetMode

图片

MemIf_SetMode调用所有底层内存抽象模块的“SetMode”功能。

注意:上述功能中故意遗漏了设备索引,即内存接口应将所有底层模块切换到请求的模式。在这种情况下,不需要一个额外的“广播”参数,因为设备不能单独切换到不同的模式。

4.2 MemIf_Read

图片

图片

MemIf_Read调用由参数DeviceIndex所选择的底层内存抽象模块的“读取”功能。

4.3 MemIf_Write

图片

MemIf_Write调用由参数设备索引所选择的底层内存抽象模块的“写入”功能。

4.4 MemIf_Cancel

图片

图片

MemIf_Cancel调用由参数设备索引所选择的底层内存抽象模块的“取消”功能。

4.5 MemIf_GetStatus

图片

MemIf_GetStatus调用由参数开发索引所选择的底层内存抽象模块的“GetStatus”功能。

4.6 MemIf_GetJobResult

图片

MemIf_GetJobResult调用由参数DeviceIndex所选择的底层内存抽象模块的“GetJobResult”功能。

4.7 MemIf_InvalidateBlock

图片

MemIf_InvalidateBlock调用由参数设备索引选择的底层内存抽象模块的“无效验证块”功能。

4.8 MemIf_EraseImmediateBlock

图片

4.9 MemIf_EraseImmediateBlock

图片

MemIf_EraseImmediateBlock调用由参数设备索引选择的底层内存抽象模块的“立即删除块”功能。

5.依赖的接口

图片

6.小结

如果不同时使用Fee和Ea,则MemIf模块的功能非常简单,就是一个底层Ea或者Fee的宏封装层。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/423989.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「滚雪球学Java」:集合(章节汇总)

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…

Ocr之PaddleOcr模型训练

目录 一、系统环境 1 镜像拉取ppocr 进行部署 2 安装paddlepaddle 二、训练前的准备 1 下载源码 2 预模型下载 3 修改模型训练文件yml 4 编排训练集 5 执行脚本进行训练 6 需要修改文件夹名称 三、开始训练 1 执行训练命令 2 对第一次评估进行解释 3 引言 五、总…

【解决方案】ArcGIS Engine二次开发时,运行后出现“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain...”

我们在做ArcGIS Engine二次开发时,特别是新手,安装好了开发环境,满怀信心的准备将按照教程搭建好的框架在Visual Studio中进行运行。点击运行后,却出现了“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化…

2023年09月CCF-GESP编程能力等级认证Scratch图形化编程四级真题解析

一、单选题(共15题,共30分) 第1题 人们所使用的手机上安装的 App 通常指的是( )。 A:一款操作系统 B:一款应用软件 C:一种通话设备 D:以上都不对 答案:B 第2题 下列流程图的输出结果是?( ) A:9 B:7 C:5 D:11 答案:A 第3题 默认小猫角色,执行下列程序…

【Linux】软件管理yum | 编辑器vim | vim插件安装

目录 1. Linux软件管理yum 1.1 什么是软件包 1.2 查看软件包 1.3 如何安装软件 1.4 如何卸载软件 2. Linux编辑器vim 2.1 vim的基本概念 2.2 vim的基本操作 2.3 vim正常模式命令集 2.4 vim末行模式命令集 2.5 简单vim配置 2.6 插件安装 1. Vim-Plug 3. coc.nvim …

力扣hot100题解(python版44-47题)

44、二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 示例 1: 输入:root [3,1,4,null,2], k 1 输出:…

C++的内联函数

目录 前言 内联函数 为什么声明和定义分离 为什么声明和定义分离后不出错 为什么内联函数不支持声明和定义分离 为什么内联函数支持声明和定义不分离 坚持声明和定义不分离的解决方法 static修饰函数 inline修饰函数 结论 声明和定义不分离的应用场景 前言 在C语言…

Compiling from source on UNIX(cmake doxygen ant maven ccache)

前言 源码链接 cmake-3.18.0 https://cmake.org/files/v3.18/cmake-3.18.0.tar.gzdoxygen-1.10.0 https://www.doxygen.nl/files/doxygen-1.10.0.src.tar.gzapache-ant-1.10.8-bin https://archive.apache.org/dist/ant/binaries/apache-ant-1.10.8-bin.tar.gzapache-maven-3…

tomcat部署和优化(二)----- 轻松搭建博客、状态页优化、虚拟主机配置

一、tomcat 1、自建博客 [rootzzzcentos1 ~]#systemctl stop firewalld [rootzzzcentos1 ~]#setenforce 0 [rootzzzcentos1 ~]#cd /data/ [rootzzzcentos1 data]#rz -E rz waiting to receive. [rootzzzcentos1 data]#ls apache-tomcat-9.0.16 apache-tomcat-9.0…

数据挖掘:航空公司的客户价值分析

需求分析 理解并掌握聚类分析方法,掌握数据的标准化,掌握寻找最佳聚类数,掌握聚类的绘图,掌握聚类分析的应用场景。 系统实现 实验流程分析 借助航空公司数据,对客户进行分类对不同类别的客户进行特征分析&#xf…

对称加密与非对称加密

1、对称加密 对称加密,即采用对称的密码编码技术,他的特点是,加密和解密使用相同的秘钥。 常见的对称加密算法有DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES。 优点:对称加密算法使用起来简单快捷,密钥较短&…

【Python】进阶学习:pandas--如何根据指定条件筛选数据

【Python】进阶学习:pandas–如何根据指定条件筛选数据 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望…

亿道信息轻工业三防EM-T195,零售、制造、仓储一网打尽

厚度仅10.5mm,重量仅0.65千克的EM-T195,其紧凑而纤薄的设计为以往加固型平板带来了全新的轻薄概念。尽管设计时尚、轻薄,但经过军用认证的强固性仍然能够承受所有具有挑战性的环境条件。随身携带无负担的轻便性加上抗震功能使其成为餐厅、酒店…

数据结构——Top-k问题

Top-k问题 方法一:堆排序(升序)(时间复杂度O(N*logN))向上调整建堆(时间复杂度:O(N * logN) )向下调整建堆(时间复杂度:O(N) )堆排序代码 方法二&…

Linux信号【systemV】

目录 前言 正文: 1消息队列 1.1什么是消息队列? 1.2消息队列的数据结构 1.3消息队列的相关接口 1.3.1创建 1.3.2释放 1.3.3发送 1.3.4接收 1.4消息队列补充 2.信号量 2.1什么是信号量 2.2互斥相关概念 2.3信号量的数据结构 2.4…

【JSON2WEB】07 Amis可视化设计器CRUD增删改查

总算到重点中的核心内容,CRUD也就是增删改查,一个设计科学合理的管理信息系统,95%的就是CRUD,达不到这个比例要重新考虑一下你的数据库设计了。 1 新增页面 Step 1 启动amis-editor Setp 2 新增页面 名称和路径随便命名&#xf…

【谈一谈】我们所用的三种工厂模式优缺点

【谈一谈】我们所用的三种工厂模式优缺点 Hello!!大家好啊,好久也没有进行文章的更新了,原因嘛,最近的工作任务量有点大,导致摸鱼充电的时间大量减少,哈哈哈(你别说,这是借口嘛!) 不过,今天是星期六,难的能够在这里分享下最近在工作中,我用到的三种工厂模式(简工抽),有啥区别呢…

在线开源免费问卷调查系统

在线开源免费问卷调查系统 平台简介 本项目旨在提供一个简单易用的问卷调查平台,帮助用户创建、分享问卷,并收集、分析调查数据。我们希望能够为各行各业的调查需求提供一种高效、便捷的解决方案。 项目特点 用户友好:清晰直观的用户界面…

QT6 libModbus 用于ModbusTcp客户端读写服务端

虽然在以前的文章中多次描述过,那么本文使用开源库libModbus,可得到更好的性能,也可移植到各种平台。 性能:读1次和写1次约各用时2ms。 分别创建了读和写各1个连接指针,用于读100个寄存器和写100个寄存器,读写分离。 客户端&am…

5、DVWA代码审计(2)

一、csrf 1、csrf(low) 限制 复现 GET /vulnerabilities/csrf/?password_new123456&password_conf123456&ChangeChange HTTP/1.1 Host: ddd.com Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,…