fix: BLE TX 먹통 해결 및 메모리 안전성 개선
- binary_tx_handler를 dr_binary_tx_safe로 전체 교체 (APP_ERROR_CHECK 제거) - data_tx_handler APP_ERROR_CHECK → DBG_PRINTF 교체 - memset/memcpy 하드코딩 크기를 define 상수로 교체 (버퍼 오버런 수정) - SERIAL_NO_LENGTH, HW_NO_LENGTH, PASSKEY_LENGTH를 main.h로 통합 - 미사용 HW 드라이버/EEPROM 코드 삭제, TWI를 i2c_manager.c로 통합 - EEPROM → FDS 전환, 코드 리뷰 현황 문서 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,342 @@
|
||||
# VB0HW0100 — Firmware Dev. 버전 개발 사양서
|
||||
|
||||
## 1. 시스템 개요
|
||||
|
||||
### 1-1. 보드 기능
|
||||
|
||||
초음파 방광 모니터링을 위한 웨어러블 디바이스.
|
||||
6채널 Piezo 트랜스듀서를 순차 구동하여 A-mode 초음파 측정을 수행하고, BLE를 통해 데이터를 전송한다.
|
||||
Dev. 버전은 모든 명령이 앱에서 내려지도록 개발.
|
||||
|
||||
### 1-2. 기능 블록 구분
|
||||
|
||||
| 블록 | 명칭 | 주요 IC | 역할 |
|
||||
|------|------|---------|------|
|
||||
| 제어부 | Control | nRF52840 (U26) | MCU, BLE, 전체 제어 |
|
||||
| | | W25Q32 (U16) | Flash Memory (데이터 저장) |
|
||||
| | | ICM-42670 (U10) | IMU 센서 (6축) |
|
||||
| TX | Transmit | MD1822 (U27) | MOSFET Driver |
|
||||
| | | TC7920 (U30) | MOSFET (고전압 스위칭) |
|
||||
| | | MAX14778 (U31) | 8채널 MUX (채널 선택) |
|
||||
| | | Misc | TMP235 (U22) | 온도 센서 |
|
||||
| RX | Receive | MD0100 (U34) | T/R 스위치 (수신 보호) |
|
||||
| | | OPA2836 (U2) | 2단 수신 증폭기 |
|
||||
| | | ADL5513 (U23) | 로그 디텍터 (AGC) |
|
||||
| | | ADC121S051 (U37) | 12비트 SPI ADC |
|
||||
| 전원 | Power | MIC5528 (U5) | LDO → +3.3V_M (제어부) |
|
||||
| | | MIC5528 (U42) | LDO → +3.3V_PZT_TX (TX) |
|
||||
| | | MIC5528 (U41) | LDO → +3.3V_PZT_RX (RX) |
|
||||
| | | LT3463 (U32) | DC-DC → ±25V (펄서 전원) |
|
||||
| | | MCP1804 (U33) | LDO → +10V |
|
||||
| | | LM27762 (U38) | Charge Pump → ±2.75V (Op-Amp 전원) |
|
||||
| | | MCP73838 (U3) | 배터리 충전 IC |
|
||||
|
||||
### 1-3. 신호 흐름
|
||||
|
||||
```
|
||||
[TX 경로]
|
||||
nRF52840 → MD1822 (Driver) → TC7920 (MOSFET) → MAX14778 (MUX) → Piezo (6ch 중 1개)
|
||||
|
||||
[RX 경로]
|
||||
Piezo (6ch 중 1개) → MAX14778 (MUX) → MD0100 (T/R 보호) → OPA2836 (2단 증폭) → ADL5513 (로그 디텍터) → ADC121S051 → nRF52840
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 전원 시퀀싱
|
||||
|
||||
### 2-1. 전원 도메인
|
||||
|
||||
| 도메인 | 전원넷 | LDO | Enable 신호 | 공급 대상 |
|
||||
|--------|--------|-----|-------------|-----------|
|
||||
| 제어부 | +3.3V_M | U5 (MIC5528) | PWR_MCU_EN | nRF52840, W25Q32, ICM-42670 |
|
||||
| TX | +3.3V_PZT_TX | U42 (MIC5528) | PZT_PWR_EN | 펄서 관련 회로 (MD1822, TC7920 등) |
|
||||
| RX | +3.3V_PZT_RX | U41 (MIC5528) | PZT_PWR_EN | 수신 회로 (OPA2836, ADC121S051 등) |
|
||||
|
||||
- TX와 RX는 **동일한 PZT_PWR_EN** 신호로 동시에 ON/OFF
|
||||
|
||||
### 2-2. 전원 켜기 (Power ON)
|
||||
|
||||
1. 사용자가 **SW2**를 누름
|
||||
2. PWR_MCU_EN = **High** → U5 활성화 → +3.3V_M 출력
|
||||
3. nRF52840 부팅 시작
|
||||
4. MCU가 SW2 눌림 상태를 확인하며 **2초간** 유지 여부 판단
|
||||
5. 조건 충족 시 MCU가 **PWR_HOLD = High** 출력 → 자기유지 (Self-Latch)
|
||||
6. 이후 SW2를 놓아도 전원 유지됨
|
||||
|
||||
### 2-3. 전원 끄기 (Power OFF)
|
||||
|
||||
1. MCU는 **BUTTON_CHECK** 핀으로 SW2 상태를 상시 감시
|
||||
2. SW2가 **3초간** 눌림 유지 감지
|
||||
3. MCU가 **PWR_HOLD = Low** 출력
|
||||
4. U5 이네이블 해제 → +3.3V_M 차단 → 전체 전원 OFF
|
||||
|
||||
### 2-4. 동작 모드
|
||||
|
||||
| 모드 | 제어부 (+3.3V_M) | TX (+3.3V_PZT_TX) | RX (+3.3V_PZT_RX) | 설명 |
|
||||
|------|:-:|:-:|:-:|------|
|
||||
| **Sleep Mode** | ON | OFF | OFF | 모든 IC 저전력 모드 동작, MCU BLE 유지, 명령 대기 |
|
||||
| **Active Mode** | ON | ON | ON | 초음파 측정 가능 상태 |
|
||||
|
||||
- Sleep → Active: MCU가 **PZT_PWR_EN = High**
|
||||
- Active → Sleep: MCU가 **PZT_PWR_EN = Low**
|
||||
- 기본 상태는 항상 **Sleep Mode**
|
||||
- W25Q32와 ICM-42670는 초기설정을 **Deep Power-Down** 모드로 세팅
|
||||
- 모든 측정 후에는 항상 **Sleep Mode**로 복귀
|
||||
---
|
||||
|
||||
## 3. 측정 명령
|
||||
|
||||
### 3-1. 측정 명령 종류
|
||||
|
||||
| 측정 명령 | 측정 대상 | 필요 모드 | 비고 |
|
||||
|-----------|-----------|:-:|------|
|
||||
| 배터리 전압 측정 | ADC_BAT | Sleep | +3.3V_M 도메인, Active 전환 불필요 |
|
||||
| IMU 측정 | ICM-42670 (I2C) | Sleep | +3.3V_M 도메인, Active 전환 불필요 |
|
||||
| 온도 측정 | TMP235 (ADC_TEMP) | **Active** | TX/RX 전원 필요 |
|
||||
| 초음파 측정 | Piezo 6ch | **Active** | TX/RX 전원 필요 |
|
||||
| 모두 측정 | 전체 | **Active** | TX/RX 전원 필요 |
|
||||
|
||||
-
|
||||
|
||||
### 3-2. 명령별 동작 흐름
|
||||
|
||||
**Sleep Mode에서 처리 (Active 전환 불필요)**
|
||||
|
||||
```
|
||||
배터리 측정 명령 → 동작모드 전환 → ADC_BAT 읽기 → BLE 전송 → Deep Power-Down 모드 전환
|
||||
IMU 측정 명령 → 동작모드 전환 → I2C로 ICM-42670 읽기 → BLE 전송 → Deep Power-Down 모드 또는 필요 모드 전환
|
||||
```
|
||||
|
||||
**Active Mode 필요**
|
||||
|
||||
```
|
||||
온도 측정 명령 → Active 진입 → ADC_TEMP 읽기 → BLE 전송 → Sleep 복귀
|
||||
초음파 측정 명령 → Active 진입 → 6ch 스캔 → BLE 전송 → Sleep 복귀
|
||||
모두 측정 명령 → Active 진입 → 배터리 + IMU + 온도 + 초음파 → BLE 전송 → Sleep 복귀
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Piezo 초음파 측정
|
||||
|
||||
### 4-1. 측정 파라미터
|
||||
|
||||
| 파라미터 | 범위 | 설명 |
|
||||
|----------|------|------|
|
||||
| Frequency | 1.8 / 1.9 / 2.0 / 2.1 / 2.2 MHz | 송신 펄스 주파수 |
|
||||
| Cycle | 3 ~ 7 | 송신 펄스 사이클 수 |
|
||||
| 평균화 수 (Avg) | 1 ~ 10 | 채널당 반복 측정 횟수 |
|
||||
| 측정 Channel 개수 (N) | 1 ~ 6 | 측정 대상 채널 수 |
|
||||
| 대기 시간 (Delay) | 0~30 (default: 10) | TX 펄수 출력 후 ADC 시작 시까지 대기 시간 (μs) |
|
||||
| 측정 샘플 수 (Num_samples) | 80 ~ 140 | 측정 ADC 샘플 개수 |
|
||||
|
||||
### 4-2. 채널 정의
|
||||
|
||||
- 총 **6채널**: CH0, CH1, CH2, CH3, CH4, CH5
|
||||
- Channel 개수 = N이면 **CH0 ~ CH(N-1)** 을 순차 측정
|
||||
- 예: N=4 → CH0, CH1, CH2, CH3만 측정
|
||||
|
||||
### 4-3. 평균화 동작
|
||||
|
||||
각 채널별로 평균화 수(Avg)만큼 반복 측정한 후, 평균값을 해당 채널의 최종 측정값으로 사용한다.
|
||||
|
||||
예: Avg=5, N=3인 경우
|
||||
|
||||
```
|
||||
CH0: 측정①②③④⑤ → 평균 → CH0 최종값
|
||||
CH1: 측정①②③④⑤ → 평균 → CH1 최종값
|
||||
CH2: 측정①②③④⑤ → 평균 → CH2 최종값
|
||||
```
|
||||
|
||||
### 4-4. TX 송신 절차
|
||||
|
||||
1. **MAX14778 (MUX)** 채널 선택 (해당 Piezo 연결)
|
||||
2. **1.3ms 대기** (MAX14778 채널 스위칭 안정화 시간)
|
||||
3. **PZT_PE = High** (펄서 활성화)
|
||||
4. **MD1822**에 설정된 Frequency / Cycle로 펄스 신호 입력
|
||||
5. **TC7920 (MOSFET)** 이 ±25V 펄스를 Piezo에 인가
|
||||
|
||||
| 관련 핀/넷 | 연결 |
|
||||
|------------|------|
|
||||
| PZT_CH_SEL0 | U26.A20 → U31 (MUX 채널 선택 비트 0) |
|
||||
| PZT_CH_SEL1 | U26.B11 → U31 (MUX 채널 선택 비트 1) |
|
||||
| PZT_EN_MUXA | U26.AC17 → U31 (MUX A 활성화) |
|
||||
| PZT_EN_MUXB | U26.AC19 → U31 (MUX B 활성화) |
|
||||
| PZT_PE | U26.AC21 → U27.15 (펄서 이네이블) |
|
||||
| PZT_P_PULSE | U26.P23 → R30 (48.7Ω) → U27 (양의 펄스) |
|
||||
| PZT_N_PULSE | U26.R24 → R40 (48.7Ω) → U27 (음의 펄스) |
|
||||
| PZT_DMP | U26.AD22 → R12 (48.7Ω) → U27 (댐핑 제어) |
|
||||
|
||||
### 4-5. RX 수신 절차
|
||||
|
||||
1. TX 펄스 출력 후 약 **10μs 대기** (근거리 잔향 회피)
|
||||
2. 에코 신호 경로:
|
||||
Piezo → MAX14778 (MUX) → MD0100 (T/R 보호) → OPA2836 (2단 증폭, 총 ~40dB) → ADL5513 (로그 디텍터)
|
||||
3. **ADC121S051**에서 약 **300μs 동안** ADC 값 연속 수집
|
||||
4. MCU가 SPI를 통해 ADC 데이터 읽기
|
||||
|
||||
| 관련 핀/넷 | 연결 |
|
||||
|------------|------|
|
||||
| \PZT_SPI_CS | U26.AC15 → U37 (ADC 칩셀렉트) |
|
||||
| SPI_SCK | U26.AC9 (Flash와 공유) |
|
||||
| SPI_MISO | U26.AD10 (Flash와 공유) |
|
||||
|
||||
### 4-6. 단일 측정 타이밍
|
||||
|
||||
```
|
||||
|←── TX ──→|← 10μs →|←─────── 300μs RX 수집 ───────→|
|
||||
펄스 출력 대기 ADC121S051 연속 샘플링
|
||||
```
|
||||
|
||||
### 4-7. 전체 스캔 시퀀스 (예: Avg=5, N=3)
|
||||
|
||||
```
|
||||
측정 명령 수신
|
||||
│
|
||||
▼
|
||||
Active Mode 진입 (PZT_PWR_EN = High)
|
||||
│
|
||||
├─ CH0 선택 (MUX → A0) → 1.3ms 대기
|
||||
│ ├─ 1회: TX → 10μs → 300μs RX
|
||||
│ ├─ 2회: TX → 10μs → 300μs RX
|
||||
│ ├─ 3회: TX → 10μs → 300μs RX
|
||||
│ ├─ 4회: TX → 10μs → 300μs RX
|
||||
│ └─ 5회: TX → 10μs → 300μs RX
|
||||
│ → CH0 평균값 산출
|
||||
│
|
||||
├─ CH1 선택 (MUX → A1) → 1.3ms 대기
|
||||
│ └─ 5회 반복 → CH1 평균값 산출
|
||||
│
|
||||
├─ CH2 선택 (MUX → A2) → 1.3ms 대기
|
||||
│ └─ 5회 반복 → CH2 평균값 산출
|
||||
│
|
||||
▼
|
||||
BLE 전송
|
||||
│
|
||||
▼
|
||||
Sleep Mode 복귀 (PZT_PWR_EN = Low)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 참고 사항
|
||||
|
||||
### 5-1. 배터리 전압 측정
|
||||
|
||||
- R28 (806kΩ) / R29 (2MΩ) 분압 → ADC_BAT
|
||||
- 분압비: 2M / (806k + 2M) ≈ 0.713
|
||||
- nRF52840 내장 ADC로 읽기
|
||||
|
||||
### 5-2. 충전 / 동작 상태 표시 LED
|
||||
|
||||
| LED | 색상 | 연결 네트 | 상태 | 표시 |
|
||||
|-----|------|------|------|------|
|
||||
| LED1 | 오렌지 | U3.STAT1 | 충전중 | 상시 점등 |
|
||||
| LED2 | 블루 | U3.STAT2 | 충전 완료 | 상시 점등 |
|
||||
| LED3 | 초록 | LED_BLE | BLE Advertising | 1초 간격 점멸 |
|
||||
| LED3 | 초록 | LED_BLE | BLE 연결 후, Piezo 초음파 측정 후 복부 부착으로 감지된 경우 | 소등 |
|
||||
| LED3 | 초록 | LED_BLE | Piezo 초음파 측정 후 탈착으로 감지된 경우 | 점등 1초 소등 3초 반복 |
|
||||
| LED4 | 오렌지 | FUNCTION_LED | 기기 정렬모드에서 방광위치를 탐지하지 못하고 있을 경우 | 1초 간격 점멸 |
|
||||
| LED3 | 초록 | LED_BLE | 기기 정렬모드에서 방광위치를 탐지하고 있을 경우 | 점등 3초 소등 1초 반복 |
|
||||
|
||||
- 기기 정렬 모드 : 빠른 주기로 초음파 측정
|
||||
- 복부 부착, 탈착, 방광위치 탐지 유무는 앱에서 판단, LED 동작 모드 명령 송신
|
||||
|
||||
### 5-3. 펄서 고전압 전원
|
||||
|
||||
| 전원 | 생성 IC | 전압 | 용도 |
|
||||
|------|---------|------|------|
|
||||
| PZT_+25V | LT3463 (U32) | +25V | 양의 펄스 전압 |
|
||||
| PZT_-25V | LT3463 (U32) | -25V | 음의 펄스 전압 |
|
||||
| PZT_+10V | MCP1804 (U33) | +10V | MD1822 공급 전원 |
|
||||
|
||||
### 5-4. 수신부 아날로그 전원
|
||||
|
||||
| 전원 | 생성 IC | 전압 | 용도 |
|
||||
|------|---------|------|------|
|
||||
| +2.75V_CP | LM27762 (U38) | +2.75V | OPA2836 양전원 |
|
||||
| -2.75V_CP | LM27762 (U38) | -2.75V | OPA2836 음전원 |
|
||||
|
||||
### 5-5. DFU 관련 주의사항
|
||||
|
||||
- nRF52840 DFU(Device Firmware Update) 부트로더에서 **P0.25를 사용하지 않도록** 수정 필요
|
||||
- 기본 DFU 부트로더가 P0.25를 버튼 입력 등으로 사용할 수 있으므로, 커스텀 DFU 빌드 시 해당 핀 설정을 제거 또는 변경할 것
|
||||
|
||||
### 5-6. MAX14778 채널 스위칭 지연
|
||||
|
||||
- MAX14778 채널 전환 후 신호 경로가 안정되기까지 **1.3ms delay** 필요
|
||||
- MUX_SelectChannel() 호출 후 반드시 1.3ms 대기 후 TX 펄스를 출력할 것
|
||||
- 동일 채널 내 반복 측정 시에는 추가 delay 불필요 (채널 전환 시에만 적용)
|
||||
|
||||
---
|
||||
|
||||
## 6. 전력 절감 방안
|
||||
|
||||
### 6-1. Sleep Mode 소비 전류 줄이기
|
||||
|
||||
Sleep Mode에서 +3.3V_M에 상시 전원을 받는 IC는 3개이며, 각각에 대해 저전력 제어가 가능하다.
|
||||
|
||||
**nRF52840 (MCU)**
|
||||
|
||||
- BLE 연결 유지를 위해 System ON 슬립 상태를 사용
|
||||
- 사용하지 않는 peripheral 클럭을 모두 비활성화
|
||||
- RAM 리텐션 영역을 최소한으로 설정
|
||||
- 위 조치를 통해 수 μA 수준까지 소비 전류 절감 가능
|
||||
|
||||
**W25Q32 (Flash Memory)**
|
||||
|
||||
- 대기 상태에서도 수 μA 소모
|
||||
- 측정/저장 시에만 깨우고, 평소에는 **Deep Power-Down** 모드 사용
|
||||
- Deep Power-Down 진입: SPI로 0xB9 커맨드 전송 → 소비 전류 약 1μA 이하
|
||||
- 복귀: 0xAB 커맨드 전송 후 수 μs 대기
|
||||
- \SPI_CS_FLASH를 High로 유지하는 것만으로는 불충분하며, 명시적으로 커맨드를 전송해야 함
|
||||
|
||||
| 상태 | 소비 전류 (대략) | 진입 방법 |
|
||||
|------|:-:|------|
|
||||
| Normal Standby | ~수 μA | 기본 상태 |
|
||||
| Deep Power-Down | ~1μA 이하 | SPI 커맨드 0xB9 |
|
||||
|
||||
**ICM-42670 (IMU Sensor)**
|
||||
|
||||
- IMU를 상시 켜둘 필요 없음
|
||||
- 측정 명령이 올 때만 Wake → 측정 → 다시 Sleep 시키는 방식 사용
|
||||
- I2C로 슬립 모드 진입 또는 ODR(Output Data Rate)을 최소로 설정
|
||||
|
||||
| 상태 | 소비 전류 (대략) | 비고 |
|
||||
|------|:-:|------|
|
||||
| Full Rate 동작 | ~수백 μA | 가속도 + 자이로 활성 |
|
||||
| Low Power / Sleep | ~수 μA 이하 | 측정 시에만 Wake |
|
||||
|
||||
### 6-2. Active Mode 체류 시간 최소화
|
||||
|
||||
Active Mode에서는 TX/RX LDO(U42, U41)뿐 아니라 LT3463(±25V), MCP1804(+10V), LM27762(±2.75V) 등 고전압/아날로그 전원이 모두 켜지므로 소비 전류가 크게 증가한다. 따라서 Active Mode 체류 시간을 최소화하는 것이 전력 절감에 가장 효과적이다.
|
||||
|
||||
**원칙: 측정 직전에 Active 진입, 측정 직후 즉시 Sleep 복귀**
|
||||
|
||||
**전원 안정화 시간 관리**
|
||||
|
||||
- PZT_PWR_EN = High 후 LDO/DC-DC 출력이 안정될 때까지 대기 필요
|
||||
- 이 안정화 시간을 실측하여 필요 최소한으로 설정
|
||||
- 불필요하게 긴 마진을 두지 않도록 주의
|
||||
|
||||
**스캔 시간 분석**
|
||||
|
||||
| 항목 | 시간 |
|
||||
|------|------|
|
||||
| MUX 채널 스위칭 안정화 | 1.3ms (채널 전환 시 1회) |
|
||||
| 1회 측정 (TX + 10μs 대기 + 300μs RX) | ~310μs |
|
||||
| 1채널 (Avg=5) | 1.3ms + 5 × 310μs ≈ 2.85ms |
|
||||
| 6채널 전체 (Avg=5, N=6) | 6 × 2.85ms ≈ 17.1ms |
|
||||
|
||||
- 6채널 전체 스캔 자체는 약 17ms 이내로 완료 가능
|
||||
- 전원 안정화 대기 시간이 오히려 더 큰 비중을 차지할 수 있음
|
||||
- 채널 전환 → TX → RX를 타이트하게 구성하여 불필요한 간격 제거
|
||||
|
||||
**측정 파라미터에 의한 시간 절감**
|
||||
|
||||
| 파라미터 조절 | 효과 |
|
||||
|--------------|------|
|
||||
| Channel 개수 줄이기 | 측정 채널 수에 비례하여 Active 시간 단축 |
|
||||
| 평균화 수 줄이기 | 반복 횟수에 비례하여 Active 시간 단축 |
|
||||
| 간헐 측정 (측정 주기 늘리기) | Active 진입 빈도 자체를 줄임 |
|
||||
+37662
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,473 @@
|
||||
# VesiScan-Basic 코드 리뷰 현황 보고서
|
||||
|
||||
작성일: 2026-03-16
|
||||
대상: VesiScan BASIC 펌웨어 전체 (nRF52840 + S140 SoftDevice)
|
||||
기준 문서: CODE_REVIEW.pdf (2026-03-15)
|
||||
현재 빌드: DEBUG_MINIMAL_BOOT=1, BLE_DEV_MODE=1
|
||||
|
||||
## 목차
|
||||
|
||||
1. 삭제 대상: 미사용 하드웨어 드라이버
|
||||
2. 삭제 대상: 미사용 코드
|
||||
3. DEBUG_MINIMAL_BOOT 조건부 컴파일 정리
|
||||
4. Keil 프로젝트 파일 정리
|
||||
5. 버그 및 오류 수정
|
||||
6. 저전력 최적화
|
||||
7. 코드 품질 개선
|
||||
8. 작업 우선순위 요약
|
||||
|
||||
---
|
||||
|
||||
## 1. 삭제 대상: 미사용 하드웨어 드라이버
|
||||
|
||||
### 1.1 회로 기반 분석
|
||||
|
||||
변경 없음. VB0HW0100 회로 기준 IC 목록은 CODE_REVIEW.pdf 1.1절과 동일.
|
||||
|
||||
### 1.2 회로에 없는 IC의 드라이버 (삭제 대상)
|
||||
|
||||
| 파일 | IC/기능 | 판정 | 현재 상태 |
|
||||
|------|--------|------|----------|
|
||||
| ad5272_i2c.c/h | AD5272 디지털 포텐시오미터 | 삭제 | **완료** |
|
||||
| ada2200_spi.c/h | ADA2200 동기 복조기 | 삭제 | **완료** |
|
||||
| mcp4725_i2c.c/h | MCP4725 DAC | 삭제 | **완료** |
|
||||
| mcp4725_adc.c/h | MCP4725 ADC 피드백 | 삭제 | **완료** |
|
||||
| ir_i2c.c/h | IR LED 센서 (0x50~0x57) | 삭제 | **완료** |
|
||||
| LED_Parse.c/h | LED ROM 파싱 | 삭제 | **완료** |
|
||||
|
||||
### 1.3 기능적으로 미사용인 드라이버 (삭제 대상)
|
||||
|
||||
| 파일 | 기능 | 판정 | 현재 상태 |
|
||||
|------|------|------|----------|
|
||||
| measurements.c/h | 레거시 측정 루프 | 삭제 | **완료** |
|
||||
| measurements_20.c/h | 20-샘플 측정 변형 | 삭제 | **완료** |
|
||||
| meas_pd_imm.c/h | 즉시 PD 측정 | 삭제 | **완료** |
|
||||
| meas_pd_buff.c/h | 버퍼드 PD 측정 | 삭제 | **완료** |
|
||||
| meas_pd_voltage_simple.c/h | 단순 전압 측정 | 삭제 | **완료** |
|
||||
| meas_pd_voltage_half.c/h | 반파 전압 측정 | 삭제 | **완료** |
|
||||
| meas_pd_voltage_full.c/h | 전파 전압 측정 | 삭제 | **완료** |
|
||||
| meas_pd_voltage_custom.c/h | 커스텀 전압 측정 | 삭제 | **완료** |
|
||||
| full_agc.c/h | 자동 이득 제어 | 삭제 | **완료** |
|
||||
| debuf_print.h | 오타 파일 | 삭제 | **완료** |
|
||||
|
||||
### 1.4 삭제 시 의존성 영향
|
||||
|
||||
cmd_parse.h에서 제거할 include 목록:
|
||||
|
||||
| include | 현재 상태 |
|
||||
|---------|----------|
|
||||
| #include "ir_i2c.h" | **완료** (제거됨) |
|
||||
| #include "ad5272_i2c.h" | **완료** (제거됨) |
|
||||
| #include "ada2200_spi.h" | **완료** (제거됨) |
|
||||
| #include "mcp4725_i2c.h" | **완료** (제거됨) |
|
||||
| #include "measurements.h" | **완료** (제거됨) |
|
||||
| #include "meas_pd_voltage_simple.h" | **완료** (제거됨) |
|
||||
| #include "meas_pd_voltage_half.h" | **완료** (제거됨) |
|
||||
| #include "meas_pd_voltage_full.h" | **완료** (제거됨) |
|
||||
| #include "full_agc.h" | **완료** (제거됨) |
|
||||
| #include "meas_pd_imm.h" | **완료** (제거됨) |
|
||||
|
||||
### 1.5 cat_interface.c (EEPROM 드라이버) 삭제 분석
|
||||
|
||||
#### 1.5.1 결론: EEPROM 삭제 완료, TWI는 i2c_manager.c로 통합
|
||||
|
||||
현재 상태: **완료** - jhChun 26.03.16
|
||||
|
||||
cat_interface.c 삭제(EEPROM/AES 코드 전체 삭제). TWI 인스턴스(m_twi) 및 초기화/해제 함수는 i2c_manager.c로 통합.
|
||||
|
||||
|
||||
#### 1.5.2 cat_interface.c가 제공하는 것
|
||||
|
||||
| 기능 | 판정 | 현재 상태 |
|
||||
|------|------|----------|
|
||||
| m_eeprom TWI 인스턴스 | i2c_manager.c로 이동, m_twi로 리네이밍 | **완료** |
|
||||
| eeprom_initialize() / uninitialize() | i2c_manager.c로 이동, twi_initialize/uninitialize로 리네이밍 (static) | **완료** |
|
||||
| eeprom_read/write_byte/word/page/bytes | 삭제 | **완료** |
|
||||
| eeprom_read/write_uint16_array | 삭제 | **완료** |
|
||||
| eeprom_read/write_uint32 | 삭제 | **완료** |
|
||||
| eeprom_write_encrypted() / read_decrypted() | 삭제 | **완료** |
|
||||
| encrypt_data() / decrypt_data() | 삭제 | **완료** |
|
||||
| aes_key[16], aes_iv[16] | 삭제 | **완료** |
|
||||
|
||||
#### 1.5.3 권장 작업
|
||||
|
||||
| # | 작업 | 현재 상태 |
|
||||
|---|------|----------|
|
||||
| 1 | TWI 인스턴스/init/uninit → i2c_manager.c로 통합 | **완료** |
|
||||
| 2 | m_eeprom → m_twi 리네이밍 | **완료** |
|
||||
| 3 | EEPROM read/write 전체 삭제, AES 전체 삭제 | **완료** |
|
||||
| 4 | cmd_parse.c EEPROM 호출 -> FDS 전환 | **완료** |
|
||||
| 5 | main.c 버튼 롱프레스 리셋: EEPROM -> FDS | **완료** |
|
||||
| 6 | power_control.c: cat_interface.h include 제거 | **완료** |
|
||||
|
||||
#### 1.5.4 cmd_parse.c EEPROM -> FDS 전환 목록
|
||||
|
||||
| EEPROM 호출 | 위치 | FDS 대체 방법 | 현재 상태 |
|
||||
|------------|------|------------|----------|
|
||||
| eeprom_init_values_read() | cmd_parse.c | 삭제 (FDS config_load 대체) | **완료** |
|
||||
| eeprom_write_byte(0x0070, m_pd_adc_cnt) | cmd_parse.c | m_config.pd_adc_cnt = val; config_save(); | **완료** |
|
||||
| eeprom_write_word(0x0080, m_pd_delay_us) | cmd_parse.c | m_config.pd_delay_us = val; config_save(); | **완료** |
|
||||
| eeprom_write_byte(0x0060, bond_data_delete) | cmd_parse.c | m_config.bond_data_delete = val; config_save(); | **완료** |
|
||||
| eeprom_write_byte(0x0065, m_reset_status) | cmd_parse.c | m_config.reset_status = val; config_save(); | **완료** |
|
||||
| eeprom_write_encrypted(0x0020, passkey, 6) | cmd_parse.c | memcpy(m_config.static_passkey, val, 6); config_save(); | **완료** |
|
||||
| eeprom_read_decrypted(0x0020, passkey, 6) | cmd_parse.c | memcpy(buf, m_config.static_passkey, 6); | **완료** |
|
||||
| eeprom_write_uint32(0x0090, m_life_cycle) | cmd_parse.c | m_config.life_cycle = val; config_save(); (FDS 필드 추가 완료) | **완료** |
|
||||
| eeprom_read_uint32(0x0090, &m_life_cycle) | cmd_parse.c | m_life_cycle = m_config.life_cycle; | **완료** |
|
||||
| eeprom_write/read_uint16_array(0x0480, ...) | cmd_parse.c | AGC gain — HW 제거됨, 명령 비활성화 | **완료** |
|
||||
|
||||
---
|
||||
|
||||
## 2. 삭제 대상: 미사용 코드
|
||||
|
||||
### 2.1 AES 암호화 (cat_interface.c)
|
||||
|
||||
판정 변경: 전체 삭제
|
||||
|
||||
| 항목 | 위치 | 판정 | 현재 상태 |
|
||||
|------|------|------|----------|
|
||||
| aes_key[16] 하드코딩 | cat_interface.c | 삭제 | **완료** |
|
||||
| aes_iv[16] (고정 IV = 0) | cat_interface.c | 삭제 | **완료** |
|
||||
| encrypt_data() | cat_interface.c | 삭제 | **완료** |
|
||||
| decrypt_data() | cat_interface.c | 삭제 | **완료** |
|
||||
| eeprom_write_encrypted() | cat_interface.c | 삭제 | **완료** |
|
||||
| eeprom_read_decrypted() | cat_interface.c | 삭제 | **완료** |
|
||||
|
||||
### 2.2 Serial Number / Passkey / HW Version 중복 선언 분석
|
||||
|
||||
| 데이터 | 전역 변수 (런타임) | FDS (내장 Flash) | EEPROM (외부, 제거됨) | 현재 상태 |
|
||||
|--------|----------------|----------------|-------------------|----------|
|
||||
| Serial Number | SERIAL_NO[12] | m_config.serial_no[12] | ~~addr 0x0030~~ | **EEPROM 경로 삭제 완료** |
|
||||
| Passkey | m_static_passkey[6] | m_config.static_passkey[6] | ~~addr 0x0020~~ | **EEPROM 경로 삭제 완료** |
|
||||
| HW Version | HW_NO[12] | m_config.hw_no[12] | ~~addr 0x0010~~ | **HW_NO 미삭제** |
|
||||
|
||||
권장 작업 현황:
|
||||
|
||||
| # | 작업 | 현재 상태 |
|
||||
|---|------|----------|
|
||||
| 1 | EEPROM 경로 삭제 -> eeprom_init_values_read() 삭제 | **완료** |
|
||||
| 2 | HW_NO[12] 삭제 -> m_config.hw_no 직접 사용 | **미완료** |
|
||||
| 3 | SERIAL_NO, m_static_passkey 유지 (BLE 스택 필요) | 해당없음 |
|
||||
| 4 | 데이터 흐름 단순화: FDS -> 전역변수 -> BLE 스택 | **미완료** |
|
||||
|
||||
### 2.3 미사용 전역 변수
|
||||
|
||||
| 변수 | 위치 | 판정 | 현재 상태 |
|
||||
|------|------|------|----------|
|
||||
| roles_str[] | main.c:189 | 삭제 | **미완료** |
|
||||
| m_encrypted_text[16] | main.c:194 | 삭제 | **미완료** |
|
||||
| m_encrypted_text2[16] | main.c:195 | 삭제 | **미완료** |
|
||||
| m_decrypted_text[16] | main.c:196 | 삭제 | **미완료** |
|
||||
| DEVICE_NAME | cmd_parse.c | 삭제 | 확인 필요 |
|
||||
| HW_NO[12] | cmd_parse.c | 삭제 | **미완료** |
|
||||
| AES_KEY_SIZE | main.c:154 | 삭제 | **미완료** |
|
||||
| AES_BLOCK_SIZE | main.c:155 | 삭제 | **미완료** |
|
||||
| suppress_unused_warnings() | main.c:239 | 삭제 | **미완료** |
|
||||
| c_addr[6] | main.c:187 | 삭제 | **미완료** |
|
||||
| led_pd_dac_v[LED_NUM] | 참조 다수 | 삭제 | 확인 필요 |
|
||||
|
||||
### 2.4 주석 처리된 코드
|
||||
|
||||
| 위치 | 내용 | 판정 | 현재 상태 |
|
||||
|------|------|------|----------|
|
||||
| main_timer.c:37-88 | FEATURE_DETAIL_VALUE_FULL 주석 블록 | 삭제 | **미완료** |
|
||||
| cmd_parse.c:282-317 | serial_to_passkey_hash, test_eeprom_page_rw | 삭제 | **미완료** |
|
||||
| cmd_parse.c:87-88 | pd_adc_half/full_a_start extern | 삭제 | 확인 필요 |
|
||||
| battery_saadc.c:22 | //#include "fstorage.h" | 삭제 | **미완료** |
|
||||
|
||||
---
|
||||
|
||||
## 3. DEBUG_MINIMAL_BOOT 조건부 컴파일 정리
|
||||
|
||||
현재 DEBUG_MINIMAL_BOOT=1로 MINIMAL 모드만 사용. Full boot 경로는 실행되지 않음.
|
||||
|
||||
### 3.1 제거 대상 #if 블록
|
||||
|
||||
| 파일 | 블록 | 판정 | 현재 상태 |
|
||||
|------|------|------|----------|
|
||||
| main.c:280-281 | #if !DEBUG_MINIMAL_BOOT full_gpio_init() | 삭제 (함수 전체) | **미완료** |
|
||||
| main.c:354-355 | #if !DEBUG_MINIMAL_BOOT load_eeprom_config() | 삭제 (함수 전체, EEPROM 제거 완료) | **완료** (함수 삭제됨) |
|
||||
| main.c:1437-1439 | Full boot 경로 (ada2200_init, mcp4725_init 등) | 삭제 | **미완료** |
|
||||
| main.c GPIO init 분기 | GPIO init 분기 | MINIMAL 코드만 유지 | **미완료** |
|
||||
| power_control.c | Full boot power sequence | 삭제 (minimal 경로만 유지) | **미완료** |
|
||||
|
||||
### 3.3 DEBUG_MINIMAL_BOOT 제거 시 함께 정리
|
||||
|
||||
| 항목 | 현재 상태 |
|
||||
|------|----------|
|
||||
| #define DEBUG_MINIMAL_BOOT 1 삭제 (main.c:96) | **미완료** (여전히 활성) |
|
||||
| 모든 #if 조건 제거, MINIMAL 코드만 유지 | **미완료** |
|
||||
| BLE_DEV_MODE define 유지 | 해당없음 |
|
||||
|
||||
---
|
||||
|
||||
## 4. Keil 프로젝트 파일 정리
|
||||
|
||||
### 4.1 삭제할 소스 참조 (uvprojx)
|
||||
|
||||
현재 상태: **정리 불필요**
|
||||
|
||||
ble_app_bladder_patch_s140.uvprojx 확인 결과, 아래 삭제 대상 파일들은 이미 프로젝트에 등록되어 있지 않음:
|
||||
|
||||
- ad5272_i2c.c, ada2200_spi.c, mcp4725_i2c.c, mcp4725_adc.c
|
||||
- ir_i2c.c, LED_Parse.c, measurements.c, measurements_20.c
|
||||
- full_agc.c, meas_pd_voltage_custom.c, cat_interface.c
|
||||
|
||||
uvprojx 수정 작업 없음.
|
||||
|
||||
---
|
||||
|
||||
## 5. 버그 및 오류 수정
|
||||
|
||||
### 5.1 심각도 높음 (HIGH)
|
||||
|
||||
#### B1: BLE TX 큐 풀 시 APP_ERROR_CHECK로 인한 시스템 먹통 현상
|
||||
|
||||
파일: main.c (구 binary_tx_handler)
|
||||
|
||||
현재 상태: **완료**
|
||||
|
||||
- `binary_tx_handler()` 함수 본체 삭제
|
||||
- 모든 호출처를 `dr_binary_tx_safe()`로 교체 완료
|
||||
- cmd_parse.c (22곳 + 함수 포인터 1곳)
|
||||
- battery_saadc.c (2곳)
|
||||
- app_raw.c (2곳)
|
||||
- tmp235_q1.c (1곳)
|
||||
- parser.c (17곳)
|
||||
- main.h 선언 제거, dr_util.c/dr_adc121s051.c의 옛날 extern 선언 제거
|
||||
- `dr_binary_tx_safe()`는 NRF_ERROR_RESOURCES 시 최대 100회 재시도 후 패킷 드롭, 연결 에러 시 graceful 리턴
|
||||
- `data_tx_handler()`의 APP_ERROR_CHECK도 DBG_PRINTF로 교체 — 예상치 못한 에러 시에도 패킷 드롭 후 정상 동작 유지
|
||||
|
||||
#### B2: nrf_delay_ms(10) 블로킹 대기 (BLE TX)
|
||||
|
||||
파일: main.c:1221-1228
|
||||
|
||||
현재 상태: **완료**
|
||||
|
||||
조건문 로직이 정상 수정됨. NRF_ERROR_RESOURCES가 아닌 경우에만 delay 실행.
|
||||
|
||||
#### B3: extern + 초기화 동시 사용
|
||||
|
||||
파일: cmd_parse.c
|
||||
|
||||
현재 상태: **완료**
|
||||
|
||||
`extern int8_t pd_adc_counts[4] = {8, 16, 24, 32};` 선언이 제거됨.
|
||||
|
||||
#### B4: memset/memcpy 버퍼 크기 불일치 및 매직 넘버
|
||||
|
||||
파일: main.c config_apply_to_globals()
|
||||
|
||||
현재 상태: **완료**
|
||||
|
||||
- memset 오버런 수정: 하드코딩 `16` → `sizeof(SERIAL_NO)`, `PASSKEY_LENGTH` 사용
|
||||
- memcpy 매직 넘버 수정: 하드코딩 `12` → `sizeof(m_config.hw_no)`, `sizeof(m_config.serial_no)`, `sizeof(SERIAL_NO)` 등으로 교체
|
||||
- m_static_passkey memset/memcpy: `PASSKEY_LENGTH` define 활용
|
||||
|
||||
스택/힙 오버플로우로 인한 메모리 손상 가능성이 있는 심각한 버그.
|
||||
|
||||
### 5.2 심각도 중간 (MEDIUM)
|
||||
|
||||
#### B6: battery_event_handler에서 floating-point 연산
|
||||
|
||||
파일: battery_saadc.c:167
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
여전히 부동소수점 연산 사용 중:
|
||||
```c
|
||||
batt_lvl_in_milli_volt_1 = (batt_lvl_in_milli_volt_0) *1.42;
|
||||
```
|
||||
|
||||
수정 필요:
|
||||
```c
|
||||
batt_lvl_in_milli_volt_1 = (batt_lvl_in_milli_volt_0 * 142) / 100;
|
||||
```
|
||||
|
||||
#### B7: main_timer 단발 모드 문제
|
||||
|
||||
현재 상태: **해당없음** (의도적 설계로 판단)
|
||||
|
||||
#### B8: processing_start_tick 미사용
|
||||
|
||||
파일: cmd_parse.c:57
|
||||
|
||||
현재 상태: **완료** (해결됨)
|
||||
|
||||
변수가 5초 타임아웃 추적에 활용되고 있음:
|
||||
- cmd_parse.c:483에서 초기값 확인
|
||||
- cmd_parse.c:489에서 5초 경과 비교
|
||||
|
||||
#### B9: config_load() goto 기반 흐름
|
||||
|
||||
파일: fstorage.c:157-261
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
`goto cfg_load_start` 패턴이 여전히 존재. 3개의 goto 문과 2개의 레이블로 복잡한 흐름 유지 중. FDS 초기화 실패 시 무한 루프 가능성 여전.
|
||||
|
||||
### 5.3 심각도 낮음 (LOW)
|
||||
|
||||
#### B11: debuf_print.h 파일명 오타
|
||||
|
||||
현재 상태: **완료** (파일 삭제)
|
||||
|
||||
#### B12: 함수 중복 선언
|
||||
|
||||
파일: main.h:44-54
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
static 함수 프로토타입 6개가 헤더에 여전히 선언됨:
|
||||
- advertising_start (FEATURE_SECURE_CONNECTION 내)
|
||||
- t_power_off_timeout_handler
|
||||
- power_control_handler
|
||||
- main_s
|
||||
- PM_s
|
||||
- main_routine_handler
|
||||
|
||||
#### B13: LED_ALLOFF, PD_ALLOFF 매크로 정의 위치
|
||||
|
||||
현재 상태: 확인 필요
|
||||
|
||||
---
|
||||
|
||||
## 6. 저전력 최적화
|
||||
|
||||
### 6.1 현재 전력 구조 분석
|
||||
|
||||
변경 없음. CODE_REVIEW.pdf 6.1절과 동일.
|
||||
|
||||
### 6.2 개선 항목
|
||||
|
||||
#### P1: UART 비활성화 (가장 큰 절약 -- 예상 ~1mA 절감)
|
||||
|
||||
파일: main.c:1427
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
`uart_init()`이 무조건 호출됨. `#if BLE_DEV_MODE` 조건으로 감싸져 있지 않음.
|
||||
|
||||
수정 필요:
|
||||
```c
|
||||
#if BLE_DEV_MODE
|
||||
uart_init();
|
||||
#endif
|
||||
```
|
||||
|
||||
#### P2: SEGGER RTT 비활성화 (프로덕션)
|
||||
|
||||
파일: debug_print.h
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
`ENABLE_PRINTF`가 `1`로 하드코딩되어 있음. `BLE_DEV_MODE`와 연동되지 않음.
|
||||
|
||||
수정 필요:
|
||||
```c
|
||||
#if BLE_DEV_MODE
|
||||
#define ENABLE_PRINTF 1
|
||||
#else
|
||||
#define ENABLE_PRINTF 0
|
||||
#endif
|
||||
```
|
||||
|
||||
#### P3: 배터리 타이머 주기 최적화
|
||||
|
||||
파일: battery_saadc.c:48
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
`BATTERY_LOOP_INTERVAL = 5000ms` 고정. 동적 조절 로직 없음.
|
||||
|
||||
#### P4: IMU 타이머 조건부 시작
|
||||
|
||||
파일: main.c BLE 이벤트 핸들러
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
BLE_GAP_EVT_CONNECTED/DISCONNECTED 핸들러에 IMU 타이머 start/stop 로직 없음. BLE 미연결 시에도 IMU를 읽을 수 있는 상태.
|
||||
|
||||
#### P5: main_loop() 타이머 폴링 효율화
|
||||
|
||||
현재 상태: **미완료**
|
||||
|
||||
플래그 기반 폴링 패턴 그대로 유지 중.
|
||||
|
||||
#### P6: NRF_LOG 비활성화 고려
|
||||
|
||||
현재 상태: **미완료** (확인 필요)
|
||||
|
||||
### 6.3 예상 절감 효과
|
||||
|
||||
| 최적화 | 예상 절감 | 난이도 | 현재 상태 |
|
||||
|--------|----------|--------|----------|
|
||||
| P1: UART 비활성화 | ~1mA | 쉬움 | **미완료** |
|
||||
| P2: RTT 비활성화 | ~0.1-0.5mA | 쉬움 | **미완료** |
|
||||
| P4: IMU 타이머 조건부 시작 | ~41uA (미연결 시) | 쉬움 | **미완료** |
|
||||
| P3: 배터리 타이머 동적 | ~5uA | 보통 | **미완료** |
|
||||
| P5-A: 단발->직접호출 | 응답 개선 | 쉬움 | **미완료** |
|
||||
| P5-B: app_scheduler | 코드 품질 + 확장성 | 보통 | **미완료** |
|
||||
| P5-C: IMU FIFO+인터럽트 | 연속측정 시 ~50uA | 어려움 | **미완료** |
|
||||
| P6: NRF_LOG 비활성화 | ~10uA | 쉬움 | **미완료** |
|
||||
|
||||
---
|
||||
|
||||
## 7. 코드 품질 개선
|
||||
|
||||
### 7.1 구조 개선
|
||||
|
||||
| # | 항목 | 현재 상태 |
|
||||
|---|------|----------|
|
||||
| Q1 | main.h에서 static 함수 선언 제거 | **미완료** (6개 잔존) |
|
||||
| Q2 | cat_interface.c -> i2c_manager.c로 TWI 통합 | **완료** |
|
||||
| Q3 | extern 변수 과다 사용 | **미완료** (30개 이상) |
|
||||
| Q4 | main_timer.c main_loop() 플래그 기반 폴링 | **미완료** |
|
||||
| Q5 | 매직 넘버 제거 | **미완료** |
|
||||
|
||||
### 7.2 코딩 스타일
|
||||
|
||||
변경 없음. CODE_REVIEW.pdf 7.2절과 동일.
|
||||
|
||||
---
|
||||
|
||||
## 8. 작업 우선순위 요약
|
||||
|
||||
### 즉시 수정 (안전/안정성)
|
||||
|
||||
| # | 항목 | 심각도 | 현재 상태 |
|
||||
|---|------|--------|----------|
|
||||
| 1 | B4: memset/memcpy 버퍼 크기 불일치 및 매직 넘버 | CRITICAL | **완료** |
|
||||
| 2 | B1: BLE TX 큐 풀 시 시스템 먹통 (binary_tx_handler → dr_binary_tx_safe 교체) | HIGH | **완료** |
|
||||
| 3 | B2: BLE TX 에러 핸들링 로직 반전 | HIGH | **완료** |
|
||||
| 4 | B3: extern + 초기화 동시 사용 | HIGH | **완료** |
|
||||
|
||||
### 1차 정리 (미사용 코드/EEPROM 삭제)
|
||||
|
||||
| # | 항목 | 현재 상태 |
|
||||
|---|------|----------|
|
||||
| 5 | 미사용 HW 드라이버 삭제 (1.2절) | **완료** |
|
||||
| 6 | cat_interface.c EEPROM 기능 삭제 + TWI를 i2c_manager.c로 통합 (1.5절) | **완료** |
|
||||
| 7 | cmd_parse.c EEPROM 호출 -> FDS 전환 (1.5.4절) | **완료** |
|
||||
| 8 | 미사용 전역변수 + HW_NO 삭제 (2.2-2.3절) | **미완료** |
|
||||
| 9 | DEBUG_MINIMAL_BOOT 조건 제거 (3절) | **미완료** |
|
||||
| 10 | Keil uvprojx 소스 참조 제거 (4절) | 확인 필요 |
|
||||
| 11 | 주석 처리된 코드 삭제 (2.4절) | **미완료** |
|
||||
|
||||
### 2차 정리 (저전력 최적화)
|
||||
|
||||
| # | 항목 | 예상 절감 | 현재 상태 |
|
||||
|---|------|----------|----------|
|
||||
| 12 | P1: UART 비활성화 | ~1mA | **미완료** |
|
||||
| 13 | P2: RTT 비활성화 | ~0.1-0.5mA | **미완료** |
|
||||
| 14 | P4: IMU 타이머 BLE 연결 시에만 동작 | ~41uA | **미완료** |
|
||||
| 15 | P5-A: main_loop 단발 이벤트 직접 호출로 전환 | 응답 개선 | **미완료** |
|
||||
| 16 | P5-B: app_scheduler 도입 (선택) | 코드 품질 | **미완료** |
|
||||
| 17 | P3: 배터리 타이머 동적 조절 | ~5uA | **미완료** |
|
||||
|
||||
### 3차 정리 (코드 품질)
|
||||
|
||||
| # | 항목 | 현재 상태 |
|
||||
|---|------|----------|
|
||||
| 18 | Q1: main.h static 함수 제거 | **미완료** |
|
||||
| 19 | Q5: 매직 넘버 define화 | **미완료** |
|
||||
| 20 | B9: config_load() goto 제거 | **미완료** |
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user