메모리 계층: 빠를수록 작고 비싸다
레지스터, 캐시, SRAM, Flash, 외부 메모리. 각 계층의 속도와 용량 차이를 알면 변수를 어디에 둘지가 보입니다.
| 계층 | 용량 | 접근 시간 | 특징 |
|---|---|---|---|
| 레지스터 | 수십 바이트 | 0클럭 | CPU 안 |
| 캐시 / TCM | 수~수십 KB | 1클럭 | M7 등 고성능 코어 |
| SRAM | 수십~수백 KB | 1~2클럭 | 변수, 스택 |
| 내부 Flash | 수백 KB~수 MB | 대기 상태 있음 | 코드, 상수, 전원 꺼져도 유지 |
| 외부 메모리 | MB~GB | 수십 클럭 이상 | SDRAM, QSPI Flash |
임베디드에서 기억할 것
- Flash는 읽기는 되지만 쓰기가 느리고 횟수 제한이 있습니다. 설정값 저장은 별도 설계가 필요합니다.
- SRAM은 전원이 꺼지면 사라집니다. 그래서 부팅 때 초기값을 Flash에서 복사해 옵니다.
- 캐시가 있으면 DMA와 충돌할 수 있습니다. Cortex-M7에서 DMA로 받은 데이터가 안 보인다면 캐시 무효화를 의심합니다.
빠른 코드를 위한 배치
제어 루프처럼 시간이 중요한 함수는 RAM이나 TCM에 올려 실행하고, 자주 쓰는 변수는 지역 변수로 받아 레지스터에서 계산되게 합니다. 링커 스크립트에서 섹션을 지정하면 함수 단위로 위치를 정할 수 있습니다.