▶ ARM Core
정밀한 코드 수행 시간 측정(Feat. CoreDebug)
좋은아침페스츄리
2024. 3. 25. 18:21
간혹 코드 수행시간을 타이트하게 관리 해야할 경우가 있습니다. 이럴 땐 각 함수별로 혹은 코드 흐름중에 해당 코드 수행시간을 측정할 수 있다면 좀 더 시간관리가 용이할 수 있습니다.
다행히 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에 입력되는 주파수를 안다면 역으로 계산 할 수 있습니다.
<끝>