Instrumentation Trace Macrocell. 거의 멈추지 않는 로그 경로다.
ITM_SendChar('A'); /* 몇 사이클이면 끝난다 */
UART printf 와 비교하면 차이가 분명하다.
UART printf 포맷팅 + 전송. 수백 µs ~ 수 ms. 타이밍을 망가뜨린다
ITM 레지스터에 쓰기만. 하드웨어가 밖으로 내보낸다
채널이 32개다
용도별로 나눠 쓰면 수신 측에서 분리해 볼 수 있다.
채널 0 일반 로그
채널 1 상태 전이 이벤트
채널 2 주기 마커
제약
- SWO 핀이 배선돼 있어야 한다. 양산 기판에서 빠져 있는 경우가 많다
- 디버거가 SWO 를 지원해야 하고, 속도(트레이스 클럭)를 맞춰야 한다
- 데이터가 몰리면 버퍼가 넘쳐 유실된다 — 유실 사실 자체를 알려 주는 플래그가 있다
- Cortex-M0/M0+ 에는 ITM 이 없다. 이 경우 RTT 를 쓴다