본문 바로가기
자동차 임베디드 SW/Adaptive Autosar

Adaptive Autosar Persistency 개요(NVM)

by 존버매니아.임베디드 개발자 2024. 7. 11.
반응형

▶ Data를 NVM에 저장/로드 기능을 제공하는 Adaptive Autosar 모듈이 Persistency(Per)이다.

★ 주요 개념 정리

- Per에서 데이터를 저장/로드 하는 것은 별도의 파일을 저장하고, 파일의 내용을 읽어오는 개념으로 이해하면 된다.

 

- C언어에서 file 저장을 위해 fopen, fwrite등의 함수를 사용하거나

   혹은 파이썬에서 파일 읽기,저장을 위해 open, writeline 함수 등을 사용하는거랑 비슷한 개념으로 이해하면 쉽다.

 

- 참고로 per에서 관리하는 파일들은 Process 단위로 Exclusive 하다. Process A에서 저장하고 사용하는 Text 파일을 Process B 에서 직접 읽고 저장하는게 안된다는 소리다.

 

- Per에서 Nvm에 파일을 저장하고, Load할 때 사용하는 인터페이스는 크게 2가지로 분류된다.

Key-Value Storage , File Stoarge 

정확한 설명은 아니지만

File Storage는 txt파일 저장할 때 사용되는 거라고 생각하면 쉽다.

 

Key Value Stoarge는 json 파일을 저장하는 개념으로 이해하면 쉽다.

 

둘 다 파일을 저장하고 읽어오는 것인데, Key-Value Stoarge는 해당 파일 내부에 저장(관리) 되는 데이터들의 양식이

Key : Value 라는 특별한 형태로 관리된다는 차이점이 있을 뿐이다.

 

- Per 사용을 위해서는 우선 Interface를 만들고 , 해당 Interface를 사용해서 SWC에 Port Prototype을 추가하고,

Interface를 바탕으로 Deployment를 셋팅한 후, 사용하려는 Process의 포트랑 연결해주면 된다.

 (오토사CP에서 Port Interface를 만들어서 SWC에 Port Prototype으로 연결해서 쓰는거랑 유사하다고 이해하면 된다.)

 

- 인터페이스의 이름은 정확히 말하면 PersistencyFileStorageInterface , PersistencyKeyValueStorageInterface 이다.

편의상 File Interface, Key Interface라고 지칭하겠다.

 

▶ PersistencyFileStorageInterface 를 정의

해당 인터페이스 내부에서 사용될 개별 파일들을 추가해야 한다.

"File Interface 하나 = 폴더 하나" 를 의미한다고 이해하면되고,

  File Interface 안에 추가하는 File들은 해당 폴더에서 사용될 파일 1개를 의미한다고 생각하면 된다.

 

즉, 포트를 하나 만들면 그게 곧 폴더를 하나 만드는거라고 생각하면 되고, 해당 port 안에 들어있는 추가되는 Element 들이 각각의 파일을 의미한다고 생각하면 된다.

 

예를 들어, 내가 구현하려는 코드에서 TestFolder 라는 폴더를 하나 만들고 그 안에 Text1.txt , Text2.txt 라는 이름의 파일을 만들어서 거기에 이런저런 데이터를 저장해서 쓰고 싶다면

 

File Interface 하나를 만들고, 해당 인터페이스 안에 2개의 파일을 추가한 뒤, 해당 인터페이스를 사용해서 SWC에 포트 프로토타입 만들어서 사용하면 된다.

 

Key Interface 정의

Key Interface를 정의할 때, 해당 인터페이스 내부에서 사용될 " Key: Value" 셋트들을 추가해야한다.

 

Key Interface 하나 = Key:value 값들이 저장될 json 파일 하나

라고 이해하면 되고.

 

해당 json 파일 내부에 여러가지 Key:value Set들이 셋팅되는것이다.

 

예를 들어 내가

전화번호부.json 이라는 json 파일 하나를 만든 후, 그 안에

김철수:010-1234-5678

김영희:010-1111-2222

 

라고 데이터를 추가하고 싶다면.

 

Key Interface를 하나 만든 후, 그 안에 Key:Value Pair 2개를 추가해서 사용하면 되는 것이다.

 

아래 그림으로 보면 이해하기 좀 더 쉽다.


 

위 그림에는 File 을 위한 2개의 인터페이스 (2개의 포트) , Key 를 위한 2개의 인터페이스(2개의 포트)

총 4개의 포트가 정의돼있다고 생각하면 된다.

 

이 때, File Storage C, File Storage D 는 각각이 별도의 폴더라고 생각하면 되고.

해당 폴더안에 서로 다른 파일 3개가 들어있다고 생각하면 된다.

 

반면 Key-Value Storage A, B 는 2개의 Json 파일이 존재하고.

해당 Json 파일안에 Key-value 셋트가3개씩 정의돼있다고 생각하면 된다.


이 외에도 CRC , M of N (n개 데이터 중복저장해서 그 중에 n개 이상이 같으면 그걸 정상으로 판단) 

이런 알고리즘을 통해 Data Corruption 감지 기능.

 

Redundant 기능

 

Crypto를 활용한 데이터 암복호화 이런 기능등을 추가로 제공한다.


위와 같이 셋팅한 후, 실제 코드에서는 아래와 같은 PER 에서 제공해주는 API 들을 활용하여 파일을 읽고 쓰게 된다.

반응형