티스토리 뷰

728x90
반응형

최근에 NvM WriteAll 시에 Garbage Collection 상황에서 특정 Block이 저장되지 않는 이슈가 있었다. 

이를 해결하기 위해 코드를 분석하던 중 알아낸 사실에 대해 공유하고자 한다.

 

기본적으로 내가 사용 중인 AUTOSAR 구현체는 Vector사의 Microsar이다. 

따라서 그 외에 업체에서 제공하는 AUTOSAR 구현체가 동일한 형태로 구현되어 있는지는 알지 못한다.

우선 NvM ReadAll의 경우에는 Microsar에서 Dflash에 있는 데이터를 일대일 대응되는 NvM Rte Ram 변수로 가지고 올 때 NvM Index가 작은 쪽에서 큰 쪽으로 순차적으로 가져온다.

그런데 NvM WriteAll의 경우에는 물론 이 경우에는 MultiBlock job을 수행하면서 setRamBlockStatus가 True인 Block들에 대해서만 Ram에서 Dflash로 쓰기를 시도하기는 하지만 Index가 큰 쪽에서 작은 쪽으로 순차적으로 저장한다.

가령 특정 제어기의 경우에는 Fast IG 상황을 요구받을 때가 있다. 

이럴 경우 NvM WriteAll에 주어지는 시간이 아주 제한적일 수 있다. 

이때 Garbage Collection 상황이 걸리게 된다면, index가 낮은 블럭의 경우 저장이 보장받지 못할 수 있다. 

따라서 NvM 블럭에 대한 정책을 구성할 때는 shutdown에 저장을 해야만 하는지를 고려해야 하고 run time에 저장이 가능하거나 1DC 중 한 번만 저장하면 되는 블럭의 경우에는 최대한 run time 저장에 배치하는 것도 고려해야 한다. 

 

게다가 multiblock으로 저장되는 블럭의 job의 우선순위는 일반적으로 WriteBlock에 비해 낮다. (Microsar에서는 그렇다.)

 

728x90
반응형
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함