홈으로 돌아가기

MCU용 Proxy MCAL: 코드 이식성

Proxy MCAL은 마이크로컨트롤러 주변 장치에 대한 통합 API를 제공하며, 벤더 HAL에 대한 바인딩을 통해 구현됩니다. MCU 변경 시 펌웨어 이식성을 보장합니다. 완전성과 테스트 가능성에 중점을 둔 STM32, NRF, AT32 예제.

Proxy MCAL: 재작성 없이 펌웨어 마이그레이션
Advertisement 728x90

## Proxy MCAL: 마이크로컨트롤러를 위한 범용 추상화 레이어

Proxy MCAL은 애플리케이션을 특정 벤더의 HAL에 종속되는 문제를 해결합니다. 펌웨어를 새로운 마이크로컨트롤러로 이전할 때 표준 HAL은 GPIO, SPI, UART 및 기타 주변 장치 드라이버를 완전히 다시 작성해야 합니다. Proxy MCAL은 각 MCU 패밀리에 대한 바인딩 함수를 통해 구현된 단일 API를 제공하여 애플리케이션 로직을 다시 작성하지 않고 코드 이식성을 유지합니다.

개발자들은 칩 단종, 공급 부족, 제재 또는 Bluetooth 5.3 같은 새로운 요구사항으로 인해 마이그레이션을 겪습니다. Proxy MCAL은 ISO-26262를 준수하는 모듈성(추상 아키텍처, 구성 가능성, 테스트 가능성)을 보장합니다.

Proxy MCAL 요구사항

Proxy MCAL은 중급/고급 개발자를 위한 엄격한 기준을 충족해야 합니다:

Google AdInline article slot
  • 완전성: 모든 주변 장치(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의 경우:

Google AdInline article slot
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 단순성과 느슨한 결합으로 스파게티 코드 위험 최소화.

Google AdInline article slot

주요 포인트

  • Proxy MCAL은 애플리케이션을 벤더 HAL로부터 분리하여 새로운 MCU로의 이전을 간소화합니다.
  • 단일 API와 바인딩으로 완전성과 이식성을 보장합니다.
  • ISO-26262 준수: 모듈성, 테스트 가능성, 구성 가능성.
  • 런타임 검증을 위한 CLI와 모듈 테스트 지원.
  • 애플리케이션 재작성 없이 16+ MCU 패밀리에 확장 가능.

— Editorial Team

Advertisement 728x90

다음 읽기