Autosar存储入门系列03_NVM状态机及读写存储调用逻辑

news2024/11/16 9:45:24

本文框架

  • 0.前言
  • 1. NVM状态机介绍
  • 2. NVM读/写基本逻辑
    • 2.1 NVM读操作
    • 2.2 NVM写操作
      • 2.2.1 实时写
      • 2.2.2 下电写
    • 2.3 NVM写入注意事项

0.前言

本系列是Autosar存储入门系列,希望能从学习者的角度把存储相关的知识点梳理一遍,这个过程中如果大家觉得有讲得不对或者不够清晰的地方,还请一定指出来,一起探讨,加深学习。

另外根据本人多年的开发经验,做了一些AutosarMCAL配置,通信,诊断,模式管理等实战总结,如果您有需求可以参见AutoSar 实战进阶系列专栏,快速链接:AutoSar实战进阶系列导读

本篇介绍一下Autosar中NVM状态机及读写调用逻辑,基本框架如下:
在这里插入图片描述

1. NVM状态机介绍

在NvM模块中,通过异步请求接口NvM_GetErrorStatus()获取Block的状态,可能状态如下:

NVM_REQ_OK:表明对应的异步请求操作成功完成,该状态对应的编号为0,为NvM的初始状态;

NVM_REQ_NOT_OK:表明上一次的异步读写请求操作未成功完成;

NVM_REQ_PENDING:表明当前异步请求读写操作正在进行中;

NVM_REQ_INTEGRITY_FAILED:表明最后一个次的异步请求NvM_ReadBlock或NvM_Read All结果的数据完整性失败,如在NvM_ReadBlock的情况下,RAM块的内容已更改,但已变为无效;

NVM_REQ_BLOCK_SKIPPED:在执行NvM_ReadAll或NvM_WriteAll期间跳过了引用的块,如全部Block都被NvM_ReadAll或NvM_WriteAll期间操作完成则该状态会被设置为NVM_REQ_OK状态;

NVM_REQ_NV_INVALIDATED:需要操作的对应Block是无效的;

NVM_REQ_CANCELED:通过调用NvM_CancelWriteAll取消了多块的请求NvM_WriteAll,或者通过调用NvM_CancelJobs取消了任何单个块作业请求(NvM_ReadBlock、NvM_WriteBlock、NvM_EraseNvBlock、NvM_InvalidateNvBlock和NvM_RestoreBlockDefaults)。

NVM_REQ_RESTORED_FROM_ROM:The referenced NV block had the default values copied to the RAM image.

以上状态的NvM操作过程中都可能会遇到,在一般正常的写操作请求中会遇到最多的状态就是:NVM_REQ_PENDING,NVM_REQ_OK及NVM_REQ_NOT_OK。

2. NVM读/写基本逻辑

接下来,进一步看一下NVM读及写的基本逻辑。

2.1 NVM读操作

在AUTOSAR中有不同的策略来将RAM Block恢复到ECU上次休眠前保存的结果:
1)可以使用NvM_ReadBlock/NvM_ReadPRAMBlock在Rte_Init()期间逐个显式读取单个Block;
2)另一种更好的方法是使用单个NvM请求NvM_ReadAll读取所有Block的结果,在NvM_ReadAll期间要读取的任何块都必须具有显式同步或具有永久RAM块。

一般项目开发中会在EcuM_StartupTwo()期间调用NvM_ReadAll接口实现NvM数据读取。

2.2 NVM写操作

在NVM写操作中按根据存储数据写入时机的不同可分为实时写及下电写,例如对于某些重要的数据,发现其发送改变如一些2E相关的DID存储,但对于一些下线相关的参数可能只需要在下电前存一次即可就没必要实时写,下电前存一次即可。

2.2.1 实时写

在SWC实际运行中,通过调用NvM_WriteBlock()来对单个Block执行写操作,对应的时序操作如下:
在这里插入图片描述
需要注意的是,虽然是实时写,但对于NvM的操作仍然是异步的,需要在NvM_MainFunction()中周期性的去判断Block状态是否为Pending,如选择了CRC校验的话NVM还会根据当前CRC与Block中的CRC值对比是否有变化,如CRC不同并对并执行对应的操作。

在NvM_MainFunction()中会继续调用MemIf及底层接口对Block进行操作,例如当选Fls做模拟EEPROM时的调度逻辑。
在这里插入图片描述

2.2.2 下电写

在NvM的Block属性配置中,有一个WriteAll的选项,该选项配置与否意味着该Block在NvM_WriteAll()接口调用时是否写该Block。
在这里插入图片描述
一般NvM_WriteAll()接口是在下电前,在BswM执行下电逻辑的时候,调用NvM_WriteAll进行所有数据的下电存储,存储完成后ECU进入Shutdown或Sleep状态。
在这里插入图片描述

2.3 NVM写入注意事项

如有不同SWC操作同一Block进行存储的情况,需要注意在Block操作前需要调用NvM_GetErrorStatus()判断接口状态,如Block为Pending状态时不能直接写,否则程序会出问题(进Det等导致程序跑飞)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go 第三方库引起的线上问题、如何在线线上环境进行调试定位问题以及golang开发中各种问题精华整理总结

Go 第三方库引起的线上问题、如何在线线上环境进行调试定位问题以及golang开发中各种问题精华整理总结。 01 前言 在使用 Go 语言进行 Web 开发时,我们往往会选择一些优秀的库来简化 HTTP 请求的处理。其中,go-resty 是一个被广泛使用的 HTTP 客户端。…

还在为Compose组件管理苦恼?Jetpack Compose的版本控制清单(BOM)扫除你的苦恼

还在为Compose组件管理苦恼?Jetpack Compose的版本控制清单(BOM)扫除你的苦恼 Jetpack Compose通过简化和提高效率,彻底改革了Android UI开发。其中一个有助于此的功能是Jetpack Compose版本控制清单(BOM)…

vue2 组件组成部分,组件通信,进阶语法

一、学习目标 1.组件的三大组成部分(结构/样式/逻辑) ​ scoped解决样式冲突/data是一个函数 2.组件通信 组件通信语法父传子子传父非父子通信(扩展) 4.进阶语法 v-model原理v-model应用于组件sync修饰符ref和$refs$nextTic…

3、当今的企业架构分析

3、当今的企业架构分析 3、分库分表水平拆分(MySQL集群) 因为一个数据库装不下了,需要分库分表,读写分离,主从复制,主节点M与从节点s组成了一个数据库的集群,组成了一个小的单元,前端…

Axure RP软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Axure RP是Axure公司开发的一款原型设计工具,广泛应用于产品设计和UI/UX设计领域。以下是Axure RP软件的主要特点和功能: 原型设计:Axure RP提供了丰富的界面元素和交互元素,用户…

django的简易的图书管理系统jsp书店进销存源代码MySQL

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 django的简易的图书管理系统 系统有1权限&#xff1a…

使用WebDriver采样器将JMeter与Selenium集成

第一步: 在JMeter中添加Selenium / WebDriver插件 第二步: 创建一条测试计划–添加线程组 添加配置元素 - jpgc - WebDriver Sampler 添加配置元素 - jpgc - Chrome Driver Config 并且添加监听器查看结果树 第三步: 下载 chromedriver…

时序预测 | MATLAB实现Attention-GRU时间序列预测(注意力机制融合门控循环单元,TPA-GRU)

时序预测 | MATLAB实现Attention-GRU时间序列预测----注意力机制融合门控循环单元,即TPA-GRU,时间注意力机制结合门控循环单元 目录 时序预测 | MATLAB实现Attention-GRU时间序列预测----注意力机制融合门控循环单元,即TPA-GRU,时…

煤矿皮带运输智能监控算法 opencv

煤矿皮带运输智能监控算法通过opencvpython深度学习算法网络模型,煤矿皮带运输智能监控算法实时监测皮带运输过程中的各种异常情况,如跑偏、撕裂、堆料异常等,一旦检测到异常情况,立即发出告警并采取相应的措施,以保障…

搭建开发环境-WSL+Ubuntu(一键搭建开发环境)

概述 所谓工欲善其事必先利其器,搭环境往往是开发过程中卡出很多初学者的拦路虎。 对于很多老鸟来说,很多东西都已经习惯成自然,也就没有刻意和初学者说。但对于很多初学者,却是受益良多。 这个系列,先从操作系统开始…

MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)

目录 概述 约束演示 表格创建 验证 图形化界面约束 外键约束 概念 语法 外键删除/更新行为 总结 概述 概念:约束是作用于表中字段上的规则,用于限制存储在表中数据。目的:保证数据库中数据的正确、有效性和完整性。分类&#xff1…

有哪些常人不知道的赚钱方法?

在目前互联网时期,如果说还有什么挣钱方法让别人不知道,那一定是赚大钱或者违法乱纪的挣钱渠道。但是对于普通人而言,确实是有一些挣钱的方法不被其了解,我这里就介绍几个,供大家一起探讨。 第一个:知识变…

TCP/IP五层模型、封装和分用

1.网络通信基础2.协议分层OSI七层协议模型TCP/IP五层/四层协议模型【重点】 3. 封装&分用 1.网络通信基础 IP地址:表示计算机的位置,分源IP和目标IP;举个例子:买快递,商家从上海发货,上海就是源IP&…

爱奇艺数据湖实战 - 基于数据湖的日志平台架构演进

01 背景 为了满足公司内日志实时查询分析的需求,爱奇艺大数据团队自研了Venus日志服务平台,负责爱奇艺各服务日志的采集、存储、处理、分析等场景。早期采用基于ElasticSearch的存储分析架构,随着数据规模的不断扩大,出现了成本高…

C语言基础之——指针(上)

前言:小伙伴们又见面啦!本期内容,博主将展开讲解有关C语言中指针的上半部分基础知识,一起学习起来叭!!! 目录 一.什么是指针 二.指针类型 1.指针的解引用 2.指针-整数 三.野指针 1.野指针…

Day46|动态规划part08:139.单词拆分、多重背包理论基础、背包问题总结

139. 单词拆分 leetcode链接:力扣题目链接 视频链接:你的背包如何装满?| LeetCode:139.单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意:不要…

【Linux】目录结构、路径

目录 1. 目录结构 1.1 基本概念 1.2 具体的目录结构 2. 路径 2.1 绝对路径和相对路径 2.2 特殊路径符 1. 目录结构 1.1 基本概念 Linux的目录结构是一个树形结构。 Windows系统可以拥有多个盘符,如 C盘、D盘、E盘。Linux没有盘符这个概念,只有一…

树莓派自带的GPIO串口输出及输出乱码问题解决方案

可以使用树莓派的UART0进行串口输出,具体连接方法如图所示: 连接后可以使用如下代码发送串口数据: import serial import time# 串口初始化 ser serial.Serial(/dev/serial0, 9600, timeout1) # /dev/serial0 是树莓派上默认的串口设备# 发…

图书馆项目Java阅览室管理系统jsp源代码MySQL

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 图书馆项目 系统有1权限:管理员 用所技术…

Scikit-Learn中的特征选择和特征提取详解

概要 机器学习在现代技术中扮演着越来越重要的角色。不论是在商业界还是科学领域,机器学习都被广泛地应用。在机器学习的过程中,我们需要从原始数据中提取出有用的特征,以便训练出好的模型。但是,如何选择最佳的特征是一个关键问…