AUTOSAR 공부

전지현·2025년 1월 14일

자동차

목록 보기
11/11

AUTOSAR란 자동차 업계에서 사용되는 표준화 된 SW 아키텍쳐.

AUTOSAR는 단순히 구조만 표준화한 게 아니라
SW 개발하는 일련의 절차를 표준화하였고
그 절차에 따라 SW를 개발해야 한다.

AUTOSAR 개발 시 별도의 툴 사용이 필수인데
크게 Authoring Tool, BSW Configuration Tool 이라는 두 종류의 툴이 필요.

  • Authoring Tool: SWC, Port, Port의 연결 등을 설계하는 툴
  • BSW Configuration Tool: BSW 영역 설계 툴


AUTOSAR Software Architecture

Application SW (ASW) :
OEM or 부품사 고유의 핵심 기능을 구현하는 부분
(각 제어기의 고유한 기능을 개발하는 영역, BSW에 표준화되어 있는 기능들 활용)
(SWC 단위로 개발한다. 마치 C언어 개발할 때 모듈별로 별도의 .c파일에 저장하는 것처럼)


Basic SW (BSW) :
여러 제어기들이 공통적으로 사용하는 기능을 표준화
(CAN통신, OS 등 제어기들이 공통으로 사용하는 것들을 라이브러리화? 해놓음. ASW에서 이걸 가져다가 쓰기만 하면 됨.)


Runtime Environment (RTE) :
ASW와 BSW를 연결하기 위한 영역
(서로 다른 SWC를 연결시키거나, ASW가 BSW를 활용할 때 RTE를 통해서, 거쳐서 사용하게 된다)
RTE 코드는 사람이 직접 구현하는게 아니라 보통 Tool에서 Code Generation (코드 자동 생성)으로 RTE 코드를 생성해 제공한다.


AUTOSAR 전체가 MCU 위에서 실행된다!

(MCU에 AUTOSAR SW 전체가 다운로드 되서 실행된다.)



Runnable: SWC 내부 함수
Port: 외부와 소통하기 위한 인터페이스
Connector: Port끼리 서로 연결

Appliction Layer SW 설계 단계

  1. SWC를 설계한다. (Arxml 형태로 만들어진다) - 설정하면 그에 맞게 툴이 Arxml을 자동으로 생성해준다.
  2. 생성된 Arxml을 툴에 있는 Code Generation 기능을 통해 C코드로 바꾼다! (내가 하는게 아니라 툴이 자동으로 생성해준다)
    2-1. 각각의 SWC는 하나의 .c파일, 하나의 .h 헤더파일을 갖게 된다.
  3. 툴을 사용해 runnable을 생성하고 Code Generation을 하면 속이 비어 있는 함수가 선언된다.
    3-1. 함수의 내부 코드는 개발자가 작성하는 것!
    3-2. 만약 새로운 함수를 추가해야 한다면 다시 설정에서 runnable을 추가하고(새로운 함수가 추가된 Arxml 파일 생성) 재code genration을 하면 새로운 함수가 생성되어 있다. 그럼 그 안에 기능을 작성하면 된다.
  4. port와 connector를 생성하면 code generation을 통해 RTE 헤더파일이 생성되고 API (#define RTE_XX)가 생성된다.
    4-1. BSW/RTE에 대한 설계도 완료되고 최종적으로 code generation을 해야 RTE 코드가 생성되고 제대로 RTE 매크로를 사용할 수 있다.

위 내용 Summary

  1. SWC 생성 (러너블도 설계 - 여기서 해야지 C코드에 생성됨. 함수 선언도 그냥 C코드에 나중에 추가하는게 아니라 설계할 때 생성해놓고 arxml 파일 생성시 arxml 파일 안에 러너블 내용이 있어야 함)
  2. Port 생성
  3. 상호작용이 필요한 다른 SWC 또는 BSW 영역을 포트를 통해서 서로 연결
  4. 1~3번의 결과물로 arxml 파일이 생성됨. 생성된 arxml 파일을 인풋으로 Code Generation 툴에 넣으면 C코드가 생성이 됨.
  5. 이제 생성된 러너블 내부를 개발자가 구현하면 됨. 이때 RTE API 활용
    (RTE Port를 활용하여 RTE_Read, RTE_Write 등 다른 SWC로부터 정보를 전송하고 받아서 사용할 수 있음)




ASW 내에 SWC를 호출하는 건 개발자가 작성하는 부분이 아니다.
main에서 호출하는 것이 아니라 SWC 내에 Runnable을 구성해서 각각의 기능들만 개발자가 구현해놓으면 Runnable을 실행시키는 Trigger는 RTE 코드와 BSW단의 OS가 담당한다.

이러한 각 Runnable이 실행될 조건을 Event라고 한다. (runnable 호출 조건)
ex) Init - MCU Startup 초반에 1번 호출, Timing - 일정한 주기로 계속 반복 실행

Autosar OS는 Task를 기반으로 동작하고
OS 모듈에 Task를 만들고 Task랑 runnable의 Event를 매핑해주는 작업을 해야 한다. (Task 매핑 작업)

  1. Runnable 생성
  2. Event 셋팅
  3. OS Task 생성 및 기타 설정
  4. Task 매핑

  • Atomic Software Component: 더 이상 분리불가한 최소한의 컴포넌트 (흔히 알고 있는 SWC가 여기에 해당)
  • Composition: 여러 개의 SWC를 담고 있는 쟁반 역할
    (SWC는 반드시 Composition 위에 있어야 한다!)
  • 반드시 1개의 Root Composition은 존재해야 하고 이외는 옵션 (안써도 상관없다.) - 개발자 가독성을 위한 것이지 코드에는 영향을 미치지 X.
  • RootSWComposition (=Top-Level Composition)
    - 이 위에 SWC를 올려놓지 않으면 코드에 반영이 되지 않는다.


Port

  1. 포트 설계하기 (포트 종류, 포트에서 사용할 데이터 이름, 사이즈 갯수 등)
  2. port를 추가한 SWC를 Composition 위에 올려놓기
  3. Composition 상에서 포트 연결하기

  • Sw Component -> Root composition 위에 올려놓고 쓰기
  • Runnable 생성 & Event 셋팅 & OS Task와 매핑해서 쓰기
  • 외부와 소통하려면 Port를 만들어서 연결하기
    -> 포트를 만들어서 Code Generation하면 RTE API가 생성된다.

  • SWC Type: (그냥 원래 알고 있었던) Component 그 자체
  • SWC Prototype: SWC를 Component 위에 올려놓은 상태

0개의 댓글