AutoSAR配置与实践(实践篇)13.1 如何添加一个NVM BLOCK
- 如何添加一个NVM BLOCK (PIM类型)
- 一、PIM(PerInstanceMemory)简介
- 二、PIM添加步骤
- 2.1 总体思路
- 2.2 DEV工程步骤
- 2.3 CFG工程步骤
如何添加一个NVM BLOCK (PIM类型)
->返回总目录<-
一、PIM(PerInstanceMemory)简介
-
NvM提供了NvM_ReadPRAMBlock/NvM_WritePRAMBlock一对API可以对这个固定地址(永久地址)的RAM块进行读写操作。配置这样的地址,我们称之为PerInstanceMemory(PIM),它存在于RTE中,SWC可以通过Rte_Pim接口访问。
-
与Nv Block Descriptor类型的差异在于PIM类型适用于单个SWC访问,而Descriptor类型一般是多个SWC共同访问一个Block。两种类型的优劣势在之前有介绍,不清楚的可以回头看看7.5章节的介绍。
-
如果用户在某些情况下还是想使用临时地址用来作NvM请求,仍旧可以通过NvM_ReadBlock/NvM_WriteBlock接口来实现。
二、PIM添加步骤
2.1 总体思路
使用方SWC:
App_Swc 即用户模块。需要新建SWC、Runnable、PIM存储区及NVM ports(Client类型)。同时将ports通过access point关联到Runnable的以便使用。
提供方BSW模块:
NVM标准模块。当App_Swc创建ServiceNeed之后,NVM模块自动生成Ports(Service类型)并映射。
2.2 DEV工程步骤
- 新建C/S接口
NVM_swc中新建一个C/S类型接口,同时在接口中定义函数原型
具体NVM函数解释:
Erase: 擦除接口
GetErrorStatus: 获取NVM错误状态接口
InvalidateNvBlock: 读写失败时,使NVMBLock无效
NvM_ReadBlock: 读Block
NvM_WriteBlock: 写Block
NvM_SetRamBlockStatus: 设置Block标志,以便ShutDown阶段通过Writeall写入。
NvM_RestoreBlockDefaults: 把ROM默认数据拷贝到RAM
2.新建SWC(App_Swc) ,在SWC内部创建Service Ports(实例化C/S接口)
3.新建标定参数,这个主要是定义数据的初值
4.在ServiceNeed中创建NvMBlockNeeds,Block属性和port属性
Default Value:即第3步定义的初值
5.定义Addressing Method
这就是一个分区字段,生成代码后,可以根据用户需求,将字段定义在普通RAM或者RRAM(休眠唤醒不掉电)。若配置成RRAM可以优化启动时间,有兴趣的可以查看实践篇的NVM 时间优化。
6.创建一个PIM类型的存储区(PIM)
Data Type: PIM的数据类型,一般为Array数组,定义存储长度
Addressing Method: 存储策略,链接哪个字段
7.在SWC内部创建runnable,并在其中添加AccessPoint, 包括读取、写入和获取错误状态接口
8.保存DEV工程
2.3 CFG工程步骤
1.DEV工程保存后在Cfg工程下点击同步数据
2.修改Fee下的写入参数
3.修改NVM模块的写入参数
- 配置长度等信息
- 注意RAM、ROM block是从Develop自动同步的, 不用做修改。
若名称出现”To be defined by RTE”, 点击Cfg生成代码后即可加载为正常的名称