본문 바로가기
임베디드 관련 정리

임베디드 3-Layer 아키텍처 정리

by minhyeok.lee 2025. 5. 24.
반응형

3-Layer 아키텍처 (Application, Middleware, Hardware)


🧱 전체 구조 개요

+--------------------------+
|     Application Layer    | ← 로봇 로직, 상태 판단
+--------------------------+
|     Middleware Layer     | ← 입력 처리, 출력 제어
+--------------------------+
| Hardware Abstraction Layer (HAL) | ← GPIO, PWM, UART 등

1️⃣ Layer 1: Hardware Abstraction Layer (HAL)

💡 하드웨어 의존적인 모든 코드

구성 요소 예시 설명
MotorController PWM 신호로 모터 제어 (__HAL_TIM_SET_COMPARE)
LedController GPIO 또는 PWM 제어
BuzzerController 일정 주기/강도로 부저 울림 제어
AdcReader, UartHandler 센서/통신 등 하드웨어 직접 접근
class MotorController {
  void set(int16_t leftRpm, int16_t rightRpm);
};

🔧 STM32 HAL/LL 드라이버와 밀접하게 연결됨


2️⃣ Layer 2: Middleware Layer

💡 하드웨어 제어를 묶어 역할별로 추상화

클래스 설명
InputManager 입력 역할 통합 (버튼, 센서 등)
OutputManager 출력 역할 통합 (LED, 부저, 모터 등)
AppContext 공유 데이터 컨테이너 (시간, 밝기 등)
class OutputManager {
  MotorController& getMotor();
  LedController& getStatusLed();
  BuzzerController& getStatusBuzzer();
  void update(AppContext& ctx);
};

📌 역할 중심으로 묶고, 상위 계층에 의존하지 않도록 설계


3️⃣ Layer 3: Application/Logic Layer

💡 입력/출력의 관계를 정의하는 로직 계층

구성 요소 설명
LogicController 입력 기반 상태 분석, 동작 결정
Botbox 전체 로봇 상태 관리, 싱글톤 객체
BotboxState / Action 상태 저장 및 출력 명령 데이터
class LogicController {
  void handleLogic();
};

📌 이 계층에서는 절대 HAL을 직접 호출하지 않음.


🧠 각 계층 역할 요약

계층 역할 특징
HAL Layer 하드웨어 직접 제어 타이머, GPIO, ADC 등 STM32 HAL 기반
Middleware 하드웨어 제어 로직 통합 및 추상화 역할별 추상화, 상위에 독립적
Application 로봇 전체 로직 결정 및 상태 추적 로직 중심, 중간 레이어만 호출

🧩 예시 흐름 (로봇 움직임)

// main loop
AppContext ctx;
ctx.nowTickTime = HAL_GetTick();

robot.input().update();
robot.logic().update();
robot.logic().handleLogic();
robot.output().update(ctx); // 주기적 PWM/GPIO 상태 갱신

✅ 장점

  • 역할 명확화: 각 계층의 책임이 구분되어 유지보수 용이
  • 테스트 용이: 하위 계층 mocking 후 상위 로직 테스트 가능
  • 이식성 강화: HAL만 교체하면 다른 MCU로도 이식 가능
  • 의존성 최소화: DIP 원칙을 적용하기 쉬움

❌ 안티패턴 경고

잘못된 설계 문제점
상위 레이어에서 HAL 직접 호출 DIP 위반, 테스트 어려움
Input/OutputManager가 서로 참조 순환 참조 및 구조적 복잡도 증가
상태 값이 여러 클래스에 흩어짐 추적과 관리가 어려워지고 버그 발생 위험 증가

 

반응형

'임베디드 관련 정리' 카테고리의 다른 글

모듈형 아키텍처 정리  (0) 2025.05.28
행동 기반 아키텍처 정리  (0) 2025.05.26
Functional Safety  (0) 2025.05.23
[UWB] TWR vs DS-TWR vs TDOA vs PDOA  (0) 2025.04.19
비휘발성 메모리 총 정리  (0) 2025.04.18

댓글