관리 메뉴

Leo's Garage

NvM ReadAll과 WriteAll의 수행 순서 본문

자동차 및 자동차 SW/AUTOSAR

NvM ReadAll과 WriteAll의 수행 순서

LeoBehindK 2023. 12. 23. 10:54
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
반응형
Comments