정밀한 코드 수행 시간 측정(Feat. CoreDebug)

간혹 코드 수행시간을 타이트하게 관리 해야할 경우가 있습니다. 이럴 땐 각 함수별로 혹은 코드 흐름중에 해당 코드 수행시간을 측정할 수 있다면 좀 더 시간관리가 용이할 수 있습니다.

 

다행히 Arm cotex-m3, m4 에서는 CoreDebug라는 register를 통해 CPU cycle을 측정 해 볼 수 있습니다. 

uint32_t cycles = 0;

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

// 수행코드 삽입

cycles = DWT->CYCCNT;

 

물론 수행코드 사이에 interrupt가 발생하게되면 오차가 발생할 수 있습니다.

cycles는 Core clock cycle이므로 core에 입력되는 주파수를 안다면 역으로 계산 할 수 있습니다.

 

<끝>