임베디드 용어 사전
타이머·ADC

SysTick

Cortex-M이 기본으로 제공하는 24비트 다운 카운터. OS 틱과 시간 기준으로 쓰인다.

칩 제조사와 무관하게 모든 Cortex-M 에 있는 타이머라 이식성이 좋다.

SysTick_Config(SystemCoreClock / 1000u);   /* 1ms 마다 인터럽트 */

volatile uint32_t ms_ticks;
void SysTick_Handler(void) { ms_ticks++; }

무엇에 쓰나

  • 시간 기준now_ms() 의 근거
  • RTOS 틱 — 스케줄러가 태스크를 교체하는 주기
  • 간단한 지연 — 다만 바쁜 대기 지연은 되도록 피한다

24비트라는 제약

최대 계수값이 약 1,677만이다. 클럭이 빠르면 한 주기가 짧아 긴 시간을 직접 못 잰다. 긴 시간은 인터럽트 횟수를 세어 확장한다.

시간 비교는 뺄셈으로

if ((uint32_t)(now_ms() - start) >= timeout) { }   /* 오버플로에도 안전 */
if (now_ms() >= start + timeout) { }               /* 오버플로에서 깨진다 */

부호 없는 뺄셈이 순환을 흡수한다. 임베디드 시간 비교의 관용구다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 타이머와 PWM — 시간을 만드는 하드웨어