目录
- 关键词
- 平台说明
- 一、定义及说明
- 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 |
---|---|
OS | autosar OS |
autosar厂商 | vector , EB |
芯片厂商 | TI 英飞凌 |
编程语言 | C,C++ |
编译器 | HighTec (GCC) |
autosar版本 | 4.3.1 |
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
缩写 | 描述 |
---|---|
EEPROM | Electrically Erasable Programmable read only memory |
NVM | NVRAM Manager |
MEMIF | Memory Abstraction Interface |
EA | EEPROM Abstraction |
EEP | internal/external EEPROM DRIVER |
FEE | Flash EEPROM Emulation |
FLS | internal/external Flash Driver |
FCFS | First 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
待更新。。
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<