[첨단 헬로티]
IAR Embedded Workbench의 C-SPY 디버거의 기능 중 하나인 Power Debugging은 디버깅 프로브에 의해 측정되는 전류 소비량과 수행된 소스코드와의 상관관계를 확인 할 수 있는 기능이다. 배터리를 사용하는 소형 IoT 디바이스, 웨어러블 장비 등의 저전력 고효율을 요구하는 디바이스 장비를 개발하는 경우 전류 소비를 최소화 시키는 노력이 필요하다.
하드웨어의 경우 전류 소비율이 적은 파트를 선정하여 사용하면 전류 소비에 최적화된 하드웨어를 구성할 수 있으나 구성된 하드웨어를 소프트웨어에서 제어를 어떻게 하느냐에 따라서 전체의 전류소율은 크게 변할 수 있다. 예를 들어. 사용하지 않는 I/O를 켜 놓거나 사용하지 않는 페리페럴을 동작시키는 경우 불필요한 전류를 소비하게 된다. 이러한 소프트웨어에 의해 불필요한 전류를 소비하는 경우를 확인하고 전류소비에 최적화된 소프트웨어를 위해 실시간으로 전류 소비량과 수행된 코드의 위치를 기록할 수 있는 C-SPY의 파워 디버깅(Power Debugging) 기능이 유용하게 사용된다.
일반적인 전류소모 측정 VS 파워 디버깅
일반적으로 가장 많이 사용되는 보드 전체 또는 보드의 특정 파트의 전류소모를 측정하는 방법은 전류 측정장비(Current meter)를 사용하는 방법이다. 전류측정 장비를 사용하면 다른 어떠한 방법보다 아주 정확한 전류 소비량 측정이 가능하다. 하지만 이러한 방법의 소비전류 측정은 측정된 전류 소비량과 수행된 코드와의 상관관계 확인이 되지 않아 전류소비량이 최소화된 소프트웨어를 작성하는데 큰 도움이 되지 않을 수 있다. 이에 반해 C-SPY의 파워 디버깅 기능은 디버깅 프로브 또는 특정 장비를 이용하여 전류 소모량을 샘플링하는 동시에 MCU의 PC(Program Counter)를 샘플링 한다. 즉, PC 값을 동시에 기록하기에 응용프로그램의 코드 수행에 따른 전류 변화를 알 수 있다. 이는 전류 소모량에 최적화된 소프트웨어 개발에 많은 도움이 될 수 있다. 이번 글에서는 파워 디버깅의 동작과 사용법에 대하여 설명하도록 하겠다.
파워 디버깅 동작
C-SPY 환경에서 파워 디버깅을 사용하기 위해 전류 소비값을 측정 가능한 I-jet / I-jet Trace / J-link / J-link Ultra 등의 디버깅 프로브 장비가 필요하다. 또한 해당 디버깅 프로브의 전원 출력핀을 통해 보드에 전원(5V)공급돼야 하며 디버깅 프로브에 내장된 AD 컨버터(Converter)를 이용해 전류 소비 값을 샘플링 한다. 파워 디버깅 기능을 사용하기 위해 디버깅 프로브와 타깃과의 연결 인터페이스는 SWD를 사용해야 하며 SWO핀이 연결돼야 한다.
[그림 1]의 방법으로는 디버깅 프로브에 의해 전원이 공급돼야 하며 전류 소비량 샘플링 또한 보드 전체의 전류소비량만 측정 가능하다. 만일 보드 전체의 전류 소비량 측정 외 특정 파트에 대한 전류 소비량 측정이나 보드의 전원공급이 디버깅 프로브가 아닌 외부 전원을 사용하는 경우 I-scope라고 하는 별도의 장비를 사용해야 한다.
I-scope 장비는 I-jet / I-jet Trace 장비와 연결할 수 있으며 타깃 보드와 디버깅 프로브 사이에 연결되며 프로브 핀을 이용해 특정 전류소비 측정을 수행한다.
I-scope 장비를 사용하면 최대 전류 1채널과 2채널의 전압을 동시에 측정 가능하다. 전류를 측정하지 않는다면 동시에 최대 3개 채널에서 전압 측정이 가능하다.
C-SPY에서의 파워 디버깅 사용
C-SPY 디버거 환경에서 파워 디버깅을 위해 파워 로그(Power Log), 파워 로그 셋업(Power Log Setup), 타임라인(Timeline) 그리고 함수 프로파일러(Function Profiler)의 디버깅 창이 지원되며 해당 창들은 C-SPY 디버거 환경에서 디버깅 프로브 메뉴에서 실행 할 수 있다.
파워 로그
파워 로그(Power Log) 창에서는 응용 프로그램 동작 중 PC(Program Counter), 전류 소비량과 측정 전압을 기록하는 창이다. 측정 전압 값은 아이-스코프(I-scope)를 이용해 전압 측정을 했을 경우만 기록되며 아이-스코프 장비가 연결되지 않은 경우에는 전압을 측정할 수 없다.
파워 로그 창에 기록된 전류와 전압 샘플링 값은 측정된 위치의 수행된 실행 코드와 상관관계를 가지고 있으며 해당 샘플을 더블클릭하면 연관된 실행 코드 위치를 에디터창에 표시한다.
타임라인
타임라인(Timeline) 창은 응용프로그램의 실행 중 측정되는 값을 시간 경과에 따른 값을 확인 할 수 있도록 그래프화 해 출력하는 창이다. 타임라인 창을 이용하면 응용 프로그램 실행 중 전류 소비의 전반적인 전류소비 양상과 패턴을 한눈에 볼 수 있다. 그래프의 시간 단위 조정이 가능하며 파워 로그 창과 마찬가지로 측정된 샘플을 더블 클릭하면 연관된 실행 코드 위치를 에디터창에 표시한다.
함수 프로파일러
함수의 프로파일링 정보를 확인 할 수 있는 함수 프로파일러(Function Profiler) 창은 응용 프로그램이 실행되는 동안 가장 많이 시간을 소비하고 있는 함수가 어떠한 함수인지 파악하는데 유용하게 사용된다. 이러한 함수 프로파일러 창에 PC(Program Counter) 샘플 카운터 외 전류 소비량의 샘플 데이터 또한 출력할 수 있어사 함수 별 전류 소비율, 최대 전류량, 최소 전류량, 평균 전류량을 확인 할 수 있다.
파워 로그 셋업
파워 로그 셋업(Power Log Setup) 창은 파워 디버깅 사용의 기본 설정을 할 수 있는 창이다. 전류와 전압의 단위 설정, 아이-스코프 장비를 이용 시 연결돼 있는 션트(Shunt) 저장 크기 입력 등의 다양한 연결 정보 설정과 측정되는 전류, 전압 샘플에 따른 액션(Action) 설정이 가능하다.
예를 들어, 기준 전류값을 200mA로 설정 후 파워로그의 액션에 ‘Log All and Halt CPU Above Threshold’를 선택하게 되면 응용 프로그램 동작 중 전류 샘플이 200mA이 넘게 되면 CPU를 멈추게 된다. 해당 기능을 활용하면 특정 전류 소비량을 넘어 초과할 경우 수행되는 소스 코드들을 쉽게 파악할 수 있어서 전류 소비에 최적화된 소스 코드를 만들기 위해 유용하게 사용된다.
맺음말
파워 디버깅을 효과적으로 하기 위한 많은 디버깅 창이 지원되고 있으며 다양하게 활용 될 수 있다. 전류, 전압 측정이 가능한 디버깅 프로브의 측정 성능에 제한이 있어서 커런트 미터(Current Meter)와 오실로스코프(Oscilloscope)처럼 높은 정밀도를 갖고 전류, 전압 값을 측정하지 못하지만 전류 소비와 소스 코드 수행의 상관관계 파악으로 좀 더 빠르고 쉽게 전류 소비에 최적화된 소스 코드를 작성 가능하게 도와준다.
글 / 이현도 IAR Systems 과장
Copyright ⓒ 첨단 & Hellot.net