간혹 코드 수행시간을 타이트하게 관리 해야할 경우가 있습니다. 이럴 땐 각 함수별로 혹은 코드 흐름중에 해당 코드 수행시간을 측정할 수 있다면 좀 더 시간관리가 용이할 수 있습니다.
다행히 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에 입력되는 주파수를 안다면 역으로 계산 할 수 있습니다.
<끝>
'▶ ARM Core' 카테고리의 다른 글
ARM Cortex-M4 어셈블리 명령어 (0) | 2024.04.15 |
---|---|
Exception entry and return : EXC_RETURN (0) | 2023.11.17 |
DSB, ISB, DMB Barrier 명령어들 (0) | 2023.11.17 |
IRQ Handler table을 RAM에 올리기 (0) | 2023.11.17 |
[AN5557] STM32H7 dual-core architecture - Peripherals allocation (0) | 2023.11.17 |