임베디드 용어 사전
최적화·저전력

대기 상태

플래시가 CPU보다 느려서 삽입하는 대기 사이클. 클럭만 올리면 성능이 그대로일 수 있는 이유다.

flash wait state. 클럭을 두 배로 올렸는데 왜 두 배 빨라지지 않는가에 대한 답이다.

CPU 80MHz  →  12.5ns 마다 명령을 원한다
플래시      →  읽는 데 30~50ns 가 걸린다
                → 그 사이 CPU 를 세워 둔다 = 대기 상태

클럭을 올릴수록 필요한 대기 사이클이 늘어난다. 데이터시트에 클럭 구간별 설정값 표가 있다.

반드시 지킬 순서

클럭 올리기 전   먼저 대기 상태를 늘린다
클럭 내린 뒤     그 다음에 대기 상태를 줄인다

순서를 바꾸면 플래시에서 잘못된 명령을 읽어 폴트가 난다. 초기화 코드에서 흔한 실수다.

이를 완화하는 장치들

ART/프리페치 버퍼   다음 명령을 미리 읽어 둔다
명령 캐시           반복 실행 구간에서 특히 효과가 크다
RAM 실행           시간이 결정적이어야 하는 함수를 SRAM 에 올린다 (링커로 배치)

마지막 방법은 인터럽트 핸들러나 플래시 쓰기 루틴에서 실제로 쓴다 — 플래시를 쓰는 동안에는 플래시에서 코드를 실행할 수 없기 때문이다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — 최적화 — 크기와 속도를 재고 줄인다