반응형
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 |
댓글