## Proxy MCAL: 마이크로컨트롤러를 위한 범용 추상화 레이어
Proxy MCAL은 애플리케이션을 특정 벤더의 HAL에 종속되는 문제를 해결합니다. 펌웨어를 새로운 마이크로컨트롤러로 이전할 때 표준 HAL은 GPIO, SPI, UART 및 기타 주변 장치 드라이버를 완전히 다시 작성해야 합니다. Proxy MCAL은 각 MCU 패밀리에 대한 바인딩 함수를 통해 구현된 단일 API를 제공하여 애플리케이션 로직을 다시 작성하지 않고 코드 이식성을 유지합니다.
개발자들은 칩 단종, 공급 부족, 제재 또는 Bluetooth 5.3 같은 새로운 요구사항으로 인해 마이그레이션을 겪습니다. Proxy MCAL은 ISO-26262를 준수하는 모듈성(추상 아키텍처, 구성 가능성, 테스트 가능성)을 보장합니다.
Proxy MCAL 요구사항
Proxy MCAL은 중급/고급 개발자를 위한 엄격한 기준을 충족해야 합니다:
- 완전성: 모든 주변 장치(CLOCK, GPIO, I2C, SPI, UART, ADC, DMA)에 대한 getter/setter. 사용되지 않는 함수는 weak로 지정되어 링커가 제거합니다.
- 합의성: 팀이 동의한 공통 API.
- 단순성: 프로토타입 45~55줄, 직관적인 인터페이스, 모듈 테스트 grep으로 문서화.
- 확장성: 컴포넌트의 다중 인스턴스 지원.
- 다양성: ASIC 드라이버, 프로토콜, RTOS 지원.
- 이식성: 빈 weak 스텁으로 PC에서 빌드 가능.
- CLI 접근: 런타임에 UART를 통한 함수 검증.
- 테스트 가능성: 모듈 테스트를 문서로 사용.
- 구성 가능성: 구조체 배열 형태의 별도 구성 파일.
바인딩 함수 예시
단일 API gpio_logic_level_set(Pad_t pad, GpioLogicLevel_t logic_level)은 다르게 구현됩니다:
STM32의 경우:
bool gpio_logic_level_set(Pad_t pad, GpioLogicLevel_t logic_level) {
HAL_GPIO_WritePin(Port2PortPtr(pad.port), 1 << pad.pin, (GPIO_PinState)logic_level);
return true;
}
NRF5340의 경우:
bool gpio_logic_level_set(Pad_t Pad, GpioLogicLevel_t logic_level) {
bool res = false;
res = gpio_is_valid_pad(Pad);
if(res) {
nrf_gpio_pin_write((uint32_t)Pad.byte, (uint32_t)logic_level);
}
return res;
}
Artery AT32 (ISR-safe)의 경우:
bool gpio_logic_level_set(Pad_t Pad, GpioLogicLevel_t logic_level) {
Pad_t pad = {0};
(void)pad;
pad.byte = pad_num;
gpio_type* GPIOx = Port2PortPtr(Pad.port);
if(GPIOx) {
switch((uint8_t)logic_level) {
case GPIO_LVL_HI: {
GPIOx->scr = 1 << Pad.pin;
} break;
case GPIO_LVL_LOW: {
GPIOx->clr = 1 << Pad.pin;
} break;
}
}
return true;
}
프로토타입은 고정이고, 바디는 벤더 HAL이나 레지스터에 맞게 조정됩니다.
구현 이점
- 이식성: Proxy MCAL 애플리케이션은 바인딩을 통해 모든 MCU에서 컴파일됩니다.
- 테스트: 통합 모듈 테스트로 모든 HAL 검증.
- CLI 인터페이스: 주변 장치 중앙 관리.
- ASIC 드라이버: 모든 플랫폼에서 SPI/I2C 장치에 범용 적용.
단점 및 완화 방안
오버헤드 — 호출당 10~20 사이클. 해결: 인라인 함수. API 단순성과 느슨한 결합으로 스파게티 코드 위험 최소화.
주요 포인트
- Proxy MCAL은 애플리케이션을 벤더 HAL로부터 분리하여 새로운 MCU로의 이전을 간소화합니다.
- 단일 API와 바인딩으로 완전성과 이식성을 보장합니다.
- ISO-26262 준수: 모듈성, 테스트 가능성, 구성 가능성.
- 런타임 검증을 위한 CLI와 모듈 테스트 지원.
- 애플리케이션 재작성 없이 16+ MCU 패밀리에 확장 가능.
— Editorial Team
아직 댓글이 없습니다.