[CP_AUTOSAR]_分层软件架构_接口之内存模块的交互介绍


  在前面 关于接口的一些说明,点击跳转)中,简要介绍了CP_AUTOSAR分层软件接口常用规范的一些说明,本文以内存服务中的软件模块为对象,介绍软件层之间的通信交互。
  关于内存服务中的软件模块,先抛出以下几个问题:
  1、内存服务中的软件模块,各自的特征以及彼此之间的差异是什么?
  2、分层的软件架构中,是如何通信交互的?
  3、软件接口是什么样的?
  4、如何实现抽象层是最有效率的?

1、Memory service modules 特征及差异

  不同的服务模块(即内存管理器)都是从非易失性存储抽象而来,但硬件特性会对管理器的设计、访问是如何实现的产生影响;
  NV(non-volatile)内存硬件的不同,决定了内存服务软件模式的使用约束;
  下表列出了内存服务软件模块以及相应的NV内存特性:

模块 使用案例及特征 NV特性 硬件案例
NVM 1、软件模块中数据存储(比如错误信息,特殊的配置信息,状态信息以及诊断数据);
2、支持同步读写(BSW和SWC);
3、ECU上电时读取,在下电时写入,也支持正常运行期间的突然读/写;
4、数据大小约占几KB;
1、直接(通过内存映射)和间接(通过SPI总线)访问NV内存;
2、串行访问(在同一个HW部分,同时读写可能无效);
1、Internal data flash;        
2、External eeprom /data flash;         
BndM 1、存储车辆指定数据;
2、通过诊断方式写入;
3、支持SWCs同步读取;
4、直接访问指针;
5、数据大小KB;
1、需要直接访问(通过指针)NV数据;
2、同步读取NV数据;
1、Internal data flash;
2、Internal code flash;
FOTA 1、存储指定车辆数据和代码;
2、数据大小MB;
3、比如,在几次驾驶循环之后可能会写入新的数据;
1、同时读写(如通过内存抽象) 1、Internal and external code flash

2、Memory 如何通信交互

2.1、Memory通信架构

  以下的案例展示了NVRAM Manager 和 Watchdog Manager是如何在假定的硬件配置中与驱动进行交互的。
  该ECU的硬件包含了一块外部EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器 )和一个通过SPI连接到微控制器的外部看门狗。SPIHandlerDriver驱动控制外设的同时访问,需要分配给watchdog更高优先级的访问权。
  微控制器上有一块内部闪存,用于同步访问外部EE。EEPROM Abstraction 和 Flash EEPROM Emulation具有语义相同的API。
  Memory Abstraction接口可以通过如下方式实现:
  1、基于设备索引(内部/外部),在运行时决定使用哪个闪存设备进行读写操作;
  2、基于时钟索引(比如 > 0x1FF是外部EEPROM),在运行时决定使用哪个闪存设备进行读写操作;
  3、在配置时通过NVRAM Manager中带有功能指针的ROM表,决定使用哪个闪存设备进行读写操作
在这里插入图片描述

2.2、大块的NV数据管理

  BndM(Bulk NV Data Manager,大块非易失性数据存储管理):不经常性写入且尺寸巨大的连续性数据。
  NVM(NVRAM Manager,Non-Volatile Random Access Memory Manager,非易失性存储器管理器):经常性更新且尺寸较小的连续性数据。
  比如,当DCM模块收到$2E服务 UDS中2E服务可以参考该文档,点击跳转 ,需要写入较大的数据时,会通过BndM模块直接驱动flash写入。
在这里插入图片描述

3、Memory 软件接口

  架构图描述:
  NVRAM Manager通过内存抽象接口(Memory Abstraction Interface)访问驱动,通过设备索引来访问不同内存的地址。
  接口描述:
  Memory Abstraction Interface,内存抽象接口有如下接口函数(比如,写函数)

	Std_ReturnType MemIf_Write
	{
		uint8 DeviceIndex,
		uint16 BlockNumber,
		uint8 *DataBufferPtr
	}

  EEPROM Abstraction 和 Flash EEPROM Emulation有如下接口函数(比如,写函数)

	Std_ReturnType Ea_Write
	{
		uint16 BlockNumber,
		uint8 *DataBufferPtr
	}

在这里插入图片描述

4、内存抽象接口的实现

3.1、情况1:只使用了一种NV设备类型

  这种情况是通常使用情况,Memory Abstraction可以使用忽略了设备索引参数的宏定义来实现,以下是写函数的案例:

#define MemIf_Write(DeviceIndex, BlockNumber, DataBufferPtr) \
Ea_Write(BlockNumber, DataBufferPtr)

  结果:NVRAM Manager可以直接访问EEPROM Abstraction或者是Flash Emulation。

3.2、情况2:使用了2种或更多的NV设备

  这种情况下,设备索引参数必须被使用,以确保选择正确的NV设备。可以用过一组函数指针来快速实现,以下是写函数的案例:

  File MemIf.h:

extern const WriteFctPtrType WriteFctPtr[2];

#define MemIf_Write(DeviceIndex, BlockNumber, DataBufferPtr) \
WriteFctPtr[DeviceIndex](BlockNumber, DataBufferPtr)

  File MemIf.c:

#include “Ea.h“ /* for getting the API function addresses */
#include “Fee.h“ /* for getting the API function addresses */
#include “MemIf.h“ /* for getting the WriteFctPtrType */

const WriteFctPtrType WriteFctPtr[2] = {Ea_Write, Fee_Write};

  结果:在实现功能时,无论函数指针表是在NVRAM Manager(非易失性随机存取存储器管理器)内部还是在其他地方,所使用的代码和运行时行为都应该保持一致。

4、结论

  Abstraction Layers可以被高效实现;
  Abstraction Layers是可以被拓展的;
  Memory Abstraction Interface简化了一个或者多个EEPROM 和 Flash设备。

   更多内容可点击返回参考 CP_AUTOSAR_总目录

相关推荐

  1. 软件系统架构演变历史介绍

    2024-07-19 03:54:01       48 阅读
  2. JVM内存分析JVM分区介绍

    2024-07-19 03:54:01       21 阅读
  3. 架构模式——分层架构

    2024-07-19 03:54:01       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 03:54:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 03:54:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 03:54:01       45 阅读
  4. Python语言-面向对象

    2024-07-19 03:54:01       55 阅读

热门阅读

  1. 中西入门哲学史差异记录

    2024-07-19 03:54:01       17 阅读
  2. GitHub敏感信息扫描工具

    2024-07-19 03:54:01       21 阅读
  3. 7大并发容器种类原理解析与应用

    2024-07-19 03:54:01       17 阅读
  4. mstar 开发环境搭建

    2024-07-19 03:54:01       18 阅读
  5. Jupyter Notebook: 是一个强大的交互式计算

    2024-07-19 03:54:01       22 阅读
  6. String、StringBuilder 和 StringBuffer 有什么区别?

    2024-07-19 03:54:01       21 阅读
  7. Windows图形界面(GUI)-DLG-C/C++ - 树形视图(TreeView)

    2024-07-19 03:54:01       23 阅读
  8. 正则表达式

    2024-07-19 03:54:01       20 阅读
  9. 网络同步学习(状态同步,帧同步)

    2024-07-19 03:54:01       20 阅读
  10. RNN模型

    2024-07-19 03:54:01       18 阅读