[AutoSar]BSW_Memory_Stack_006 NVM 的常用实现方式 (Per_instance/NVBlockSwComponent)

目录

  • 关键词
  • 平台说明
  • 一、定义及说明
    • 1.1 per_instance memories(PIM)
    • 1.2 Service NvBlockNeeds (SN)
    • 1.3 NVBlockSwComponent
    • 1.4 NvblockDescriptor
  • 二、NVM 的常用现方式
    • 2.1 不使用PIM 不经过RTE 访问NV block
      • 2.1.1 描述
      • 2.1.2 实现
    • 2.2 使用PIM 且经过RTE 访问NV block
      • 2.1 描述
      • 2.2.2 实现
        • 2.2.2.1 需求
        • 2.2.2.2 developer中创建SWC
        • 2.2.2.3 SWC 实现
        • 2.2.2.4 创建PIM
        • 2.2.2.5 创建server needs 并添加server port 映射
        • 2.2.2.6 保存后同步到 davinci cfg 并mapping
        • 2.2.2.7 选择memory block 对应的fee 或者EA
        • 2.2.2.8 server mapping
        • 2.2.2.9 F7 F8 生成 代码
      • 2.2.3 code
        • 2.2.3.1 NvM_Cfg.c
        • 2.2.3.2 Rte.c
        • 2.2.3.3 CtApDemo_1.c
        • 2.2.3.4 CtApDemo_1.h
    • 2.3 使用NvBlockSwComponentType

  

关键词

嵌入式、C语言、autosar、OS、BSW

平台说明

项目Value
OSautosar OS
autosar厂商vector , EB
芯片厂商TI 英飞凌
编程语言C,C++
编译器HighTec (GCC)
autosar版本4.3.1

在这里插入图片描述
  
  
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  
  

缩写描述
EEPROMElectrically Erasable Programmable read only memory
NVMNVRAM Manager
MEMIFMemory Abstraction Interface
EAEEPROM Abstraction
EEPinternal/external EEPROM DRIVER
FEEFlash EEPROM Emulation
FLSinternal/external Flash Driver
FCFSFirst come first served

一、定义及说明

1.1 per_instance memories(PIM)

在这里插入图片描述

   定义在ASWC中,理解为专属于这个ASWC 的RAM block ,属于RAM。在生成代码中为

     (NvM_RamAddressType)&Rte_CpDemo_1_PIM_seatposition /*  NvMRamBlockDataAddress  */ 

1.2 Service NvBlockNeeds (SN)

在这里插入图片描述

   Service NvBlockNeeds 可以存在于ASWC或者NVBlockSwComponent。
可以理解为一个标准NVRAM block 加上 在ASWC层级上 对BSW 的需求。
其中:
默认值会生成
在这里插入图片描述
在这里插入图片描述
   配置同步到 Davinci cfg中则生成一个相应的NV block,如下图所示:blcok name = swc名+SN名。

在这里插入图片描述

1.3 NVBlockSwComponent

   如下图所示,通过davinci developer 创建component。

在这里插入图片描述
   NVBlockSwComponent 存在的目的有以下原因:

  • 1.其他ASWC可以通过NV port 将RAM数据集中传到此component 集中处理,类似于COM模块。
  • 2.为NVRAM 的fan_in 和fan_out 提供缓存。
       Fan_in /Fan_out 是指 多个ASWC对同一个NVblock 的读写。例如一个nvblock 为结构体,结构体中有三个元素,ASWC1 对元素1写,同时ASWC2对元素2/元素3写。
  • 3.可以使多个ASWC 访问同一个NV block。
  • 4.可以防止RTE 的并发访问。

1.4 NvblockDescriptor

在这里插入图片描述

   存在于NVBlockSwComponent中,可以理解为一个完整的NVblock,和NV block 是1:1 的映射关系,包含了RAM mirror和默认 ROM 数据,其中还包含一个nv needs。

   配置同步到 Davinci cfg中则生成一个相应的NV block,如下图所示:blcok name = component名+descriptor名。
在这里插入图片描述

   可以在下图中选择写入的触发方式:轮询或者事件触发。

二、NVM 的常用现方式

   在autosar标准中,NvM模块没有指定它的用户实际如何访问RAM block。如何实现数据的准确性,实时性和完整性是用户自己的职责。

2.1 不使用PIM 不经过RTE 访问NV block

2.1.1 描述

   最简单粗暴的一种方式,在davinci cfg中的NVM 和FEE 手动配置NV block ,ASWC 直接通过NvM_Write/ReadBlock API进行访问。
   这种方式需要用户自行判定当前block 是否pending或者有错误。
   在标准中对这种方式强调过:无法在多个ASWC 中访问同一个NV block,但是实际上可以强制实现,只需要包含头文件到相应SWC,把NVRAM 当成一个全局变量使用。但是不建议这么玩,因为没有经过RTE,无法保护其并发访问时的数据没错误。

2.1.2 实现

   参考[AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试

2.2 使用PIM 且经过RTE 访问NV block

2.1 描述

在这里插入图片描述

   如上图所示,与2.1 相比,多了一个PIM(Per_instance) 。ASWC 对nvblock 的操作都是通过Rte_Pim API 来实现的,如Rte_Pim_writeblock。
   RTE不能保证访问每实例内存的数据一致性。APP 端负责访问数据的一致性。为了数据一致性。
   APP不应该在调用NvM_ReadBlock / NvM_WriteBlock之后立即访问NV数据,应该直到它被通知(通过JobFinished回调)作业成功。
   perinstancemmemory在RTE中被分配为RAM块,只能由该SW-C访问。因此,相同的数据不能在两个或多个SW-C之间共享。在这个用例中,“访问NVRAM块”不应该在多核环境中使用。

2.2.2 实现

2.2.2.1 需求

   创建一个ASWC = CtApDemo_1,一个10ms 的runnable操作一个PIM_seatposition 的PIM 和NvBlockNeed_seat_position 的needs。

2.2.2.2 developer中创建SWC

在这里插入图片描述

2.2.2.3 SWC 实现

在这里插入图片描述

2.2.2.4 创建PIM

在这里插入图片描述

2.2.2.5 创建server needs 并添加server port 映射

在这里插入图片描述
在这里插入图片描述

2.2.2.6 保存后同步到 davinci cfg 并mapping

   在davinci cfg 较老版本中,需要手动进行memory mapping。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
   而在较新版的软件中直接配置自动同步就行,如下图所示:
在这里插入图片描述

2.2.2.7 选择memory block 对应的fee 或者EA

   一般这儿会出现unuser 的block,需要手动解决链接到FEE。
在这里插入图片描述

2.2.2.8 server mapping

在这里插入图片描述

2.2.2.9 F7 F8 生成 代码

包括 RTE OS FEE NVM

2.2.3 code

2.2.3.1 NvM_Cfg.c

在这里插入图片描述

2.2.3.2 Rte.c

默认值
在这里插入图片描述

2.2.3.3 CtApDemo_1.c

在这里插入图片描述
在这里插入图片描述

2.2.3.4 CtApDemo_1.h

在这里插入图片描述
nvblock ID 定义如下
在这里插入图片描述

2.3 使用NvBlockSwComponentType

待更新。。

  
  
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js笔记(学习存档)

JS的调用方式与执行顺序 使用方式 HTML页面中的任意位置加上<script type"module"></script>标签即可。 常见使用方式有以下几种&#xff1a; 直接在<script type"module"></script>标签内写JS代码。直接引入文件&#xff1a;…

java数据结构与算法刷题-----LeetCode367. 有效的完全平方数

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 自实现Math.sqrt()函数&#xff1a;牛顿迭代法 自实现Math.sqrt(…

【QT+QGIS跨平台编译】076:【libdxfrw跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、libdxfrw介绍二、QGIS下载三、文件分析四、pro文件五、编译实践一、libdxfrw介绍 libdxfrw是一个用于读取和写入DXF(Drawing Exchange Format)文件的开源C++库。DXF是一种由AutoCAD开发的文件格式,用于存储CAD(计算机辅助设计)图形数据,它…

预定义详解

学习流程 ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————…

Sql优化篇-干货总结大全

前言 我们经常会听到Sql优化的一个概念&#xff0c;但其实sql优化不一定就是说sql语句写的有问题&#xff0c;它可能是因为cpu资源爆满&#xff0c;或者内存空间不足&#xff0c;它也会导致sql执行卡顿&#xff1b;或者说表设计层面&#xff0c;过滤条件没有加索引之类的 等等…

Java之final、常量的详细总结

final final关键字是最终的意思&#xff0c;可以修饰类、方法、变量修饰类&#xff1a;该类被称为最终类&#xff0c;特点是不能被继承 //final修饰的类&#xff0c;类不能再被继承了 final class A{} class B extends A{}//会报错 修饰方法&#xff1a;该方法被称为最终方法&…

linux学习:shell脚本

目录 要求 注意 变量 变量的定义和赋值 变量的引用 变量的种类 设置环境变量 特殊符号 引号 竖杠&#xff08;管道&#xff09; 和大于小于号&#xff08;重定向&#xff09; 字符串处理 测试语句 脚本语法 判断 循环 函数 trap 前提 要把 Shell 命令放到一…

从0到1搭建文档库——sphinx + git + read the docs

sphinx git read the docs 目录 一、sphinx 1 sphinx的安装 2 本地构建文件框架 1&#xff09;创建基本框架&#xff08;生成index.rst &#xff1b;conf.py&#xff09; conf.py默认内容 index.rst默认内容 2&#xff09;生成页面&#xff08;Windows系统下&#xf…

windows一键休眠,一键唤醒

1.使windows睡眠不可用&#xff0c;cmd以管理员身份运行&#xff1a; powercfg.exe /hibernate off 2.桌面创建快捷键 Rundll32.exe Powrprof.dll,SetSuspendState Sleep

零信任安全模型:构建未来数字世界的安全基石

在数字化转型的浪潮中&#xff0c;云原生技术已成为推动企业创新和灵活性的关键力量&#x1f4a1;。然而&#xff0c;随着技术的进步和应用的广泛&#xff0c;网络安全威胁也日益严峻&#x1f513;&#xff0c;传统的网络安全模型已经难以应对复杂多变的网络环境。在这样的背景…

一个浮动绝对居中的tailwindcss

今天改进图片组件&#xff0c;遇到个SVG绝对居中的问题。想起之前大概是通过top left来实现&#xff0c;由于组件的宽高需要动态输入。不能定死宽高&#xff0c;于是想起来问GPT。刚开始老是给一些很菜的代码&#xff0c;不是我想要的 气不打一处来&#xff0c;索性给他限死框框…

积木报表Excel数据量大导出慢导不出问题、大量数据导不出问题优化方案和分析解决思路(优化前一万多导出失败,优化后支持百万级跨库表导出)

文章目录 积木报表Excel数据量大导出慢导不出问题、大量数据导不出问题优化方案和分析解决思路&#xff08;优化前一万多导出失败&#xff0c;优化后支持百万级跨库表导出&#xff09;优化结果需求背景和解决方案的思考解决方案流程描述&#xff1a;关键代码引入easy excel新建…