Microcontroller Abstraction Layer. 하드웨어 의존성을 이 층 아래로 전부 몰아넣는 것이 AUTOSAR 이식성의 전부다.
HAL과 무엇이 다른가
| 벤더 HAL | MCAL | |
|---|---|---|
| 누가 정하나 | 칩 회사가 편의로 제공 | AUTOSAR 규격이 함수명·인자·에러코드까지 규정 |
| 벤더가 바뀌면 | 이름과 시그니처가 다 다르다 | 같은 이름으로 호출된다 |
| 목적 | 개발 편의 | 교체 가능성 |
즉 MCAL은 "쉽게 쓰라고" 있는 층이 아니라 "바꿔 끼울 수 있게" 있는 층이다.
코드로 보면
/* 베어메탈 — 칩마다 레지스터 이름·비트 위치가 다르다 */
PTD->PSOR = (1u << 15);
/* MCAL — 채널 이름은 설정에서 나온다 */
Dio_WriteChannel(DioConf_DioChannel_LED_STATUS, STD_HIGH);
모듈 구성
Dio(디지털 입출력) · Port(핀 설정) · Adc · Pwm · Spi · Can · Fls(플래시) ·
Mcu(클럭·리셋) · Wdg(워치독) 처럼 주변장치별로 나뉜다.
칩 회사가 자사 MCU용 MCAL을 제공하며, NXP는 이를 RTD라는 이름으로 무료 배포한다.
면접에서
"MCAL이 뭔가요"에는 "하드웨어 의존 코드를 격리하는 층이고, 인터페이스가 표준이라 MCU를 바꿔도 위층이 안 바뀐다" 까지 말하면 충분하다.