关键词
嵌入式、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 |
一、同步和异步
在NVM的API中,分为同步和异步调用两类,见五、同步 API 和异步 API.
同步指的是请求之后必须等到响应结果后才能向下继续执行。如:NvM_Init
异步是指当SWC发出请求后,该请求进入NWM或者ECUM队列(NVM_MainFunction.ECUM_MainFunction.),不需要等待请求结果就能继续向下执行、,后续可通过查询状态API获取执行结果。
1.1 NvM_WriteBlock
如上图所示,当SWC请求写block后,该NVRAM block 控制权交由NVM模块。该请求进入job队列,该NVRAM block 状态变为PENDING状态,直到该请求在队列中执行完成(失败或成功)。通过NvM_GetErrorStatus可以轮询得到执行状态,返回NVM_REQ_OK则表示执行完成并且成功。当然,也可以通过end job 回调获取状态,只需要开启下面的选项:
1.2 Cancellation of a Multi Block Request
如下图所示,在EcuM 请求write_ALL后,NVRAM block 控制权交由NVM模块,请求进入job 队列。当
cancelwrite 请求发起后,NVM 会将在队列中被pending 的block 操作完成,但是队列中的下一个block则不会处理,被终止掉。如果配置了NvMMultiBlockCallback
则会在终止writeall后产生回调,可以在回调中查询状态。
二、扫描顺序/优先级方案
在异步队列处理请求中,也有优先级的划分。如果在配置中没有开启
NvMJobPrioritization,进入请求队列中的请求就会按照FCFS(First come first served) 的顺序处理。
在执行write_block 的时候,即使选择了immediate ,一旦没有选择NvMJobPrioritization = true,实际上也是排队进行的。如果想要实现尽快写入block,则需要在NvMJobPrioritization = true的同时,配置NvMBlockJobPriority = 0,(0-255,0 (immediate priority) until 255 (lowest priority))。
一旦开启了NvMJobPrioritization = true,就会有两个队列来处理请求。其中一条队列用于处理immediate write jobs,另一个队列用于处理其他job(including immediate read/erase jobs).队列大小在NvMSizeImmediateJobQueue和NvMSizeStandardJobQueue中配置。
注意
- 如果block 在队列处于 pending状态,这个时候再对此ID BLOCK 请求,则会报NVM_REQ_PENDING DET 错误。
- 当immediate job 打断 write_all/read_all 的时候,immediate job 执行完成后会由NVM 模块恢复被打断的队列。处理immediate job ,write_all/read_all 不会被其他请求打断。
- 对同一个block 的请求不能同时排队,例如如果对一个Block 的read 请求已经进入队列,那么对这个block 的erase 则不能进入队列。
- 只有high priority (0)可以通过API NvM_EraseNvBlock 擦除。
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<