flash wait state. 클럭을 두 배로 올렸는데 왜 두 배 빨라지지 않는가에 대한 답이다.
CPU 80MHz → 12.5ns 마다 명령을 원한다
플래시 → 읽는 데 30~50ns 가 걸린다
→ 그 사이 CPU 를 세워 둔다 = 대기 상태
클럭을 올릴수록 필요한 대기 사이클이 늘어난다. 데이터시트에 클럭 구간별 설정값 표가 있다.
반드시 지킬 순서
클럭 올리기 전 먼저 대기 상태를 늘린다
클럭 내린 뒤 그 다음에 대기 상태를 줄인다
순서를 바꾸면 플래시에서 잘못된 명령을 읽어 폴트가 난다. 초기화 코드에서 흔한 실수다.
이를 완화하는 장치들
ART/프리페치 버퍼 다음 명령을 미리 읽어 둔다
명령 캐시 반복 실행 구간에서 특히 효과가 크다
RAM 실행 시간이 결정적이어야 하는 함수를 SRAM 에 올린다 (링커로 배치)
마지막 방법은 인터럽트 핸들러나 플래시 쓰기 루틴에서 실제로 쓴다 — 플래시를 쓰는 동안에는 플래시에서 코드를 실행할 수 없기 때문이다.