임베디드 용어 사전
관측·테스트

DWT

Cortex-M의 관측 유닛. 사이클 카운터로 코드 실행 시간을 정확히 재고 워치포인트도 제공한다.

Data Watchpoint and Trace. 외부 장비 없이 시간을 재는 가장 정확한 자다.

CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT = 0;
DWT->CTRL  |= DWT_CTRL_CYCCNTENA_Msk;

uint32_t t0 = DWT->CYCCNT;
do_work();
uint32_t cycles = DWT->CYCCNT - t0;      /* 80MHz 면 1사이클 = 12.5ns */

무엇에 쓰나

함수 실행 시간 측정        평균이 아니라 최댓값을 기록하는 것이 중요하다
인터럽트 지연 측정         ISR 진입 시점에 카운터를 읽어 비교
프로파일링                주기적으로 PC 를 샘플링해 어디가 느린지 본다
워치포인트                같은 유닛이 제공한다

주의

  • 카운터는 32비트라 80MHz 에서 약 53초에 한 바퀴 돈다. 뺄셈으로 쓰면 한 주기 안에서는 정확하다
  • 측정 코드 자체가 몇 사이클을 쓴다 — 짧은 구간을 잴 때는 그 오버헤드를 빼야 한다
  • 디버거 연결 여부에 따라 동작이 달라질 수 있어 자유 실행 상태에서 실측한다

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 트레이스와 프로파일링 — 멈추지 않고 관찰하기