티스토리 뷰

embedded

Arduino - Memory and PROGMEM, F() macro

주먹불끈 2018. 9. 28. 20:17

개요

 

- Arduino 메모리와 PROGMEM, F() macro 와의 상관관계를 알아본다.

 

참고링크

- 아두이노 메모리: http://playground.arduino.cc/Learning/Memory

- PROGMEM and F() macro: https://www.arduino.cc/reference/en/language/variables/utilities/progmem/

- F() macro QnA: https://forum.arduino.cc/index.php?topic=110307.0

 

 

아두이노의 메모리

 

아두이노 보드의 MCU (예를 들어 ATmega168) 에는 종류의 메모리가 있다.

 

1) Flash memory: 프로그램 (=아두이노 스케치) 저장되는 . 아두이노 IDE 업로드할때 쓰여진다. 무리하게 비유하면 하드디스크

2) SRAM (static random access memory): 실제로 프로그램이 올라가고 변수가 변경되는 . 무리하게 비유하면

- DRAM (Dynamic Random Access Memory): 전원이 공급되는 동안 주기적으로  내용을 갱신해줘야 한다.

- SDRAM (Synchronous Dynamic Random Access Memory): 동기화된 DRAM. 제어장치 입력과 Clock pulse 동시에 일어남

- SRAM: DRAM 달리 전원이 공급되는 내용이 보존된다 = 주기적 갱신 불필요

3) EEPROM: 프로그래머가 쓰고 지울수 있으며, 전원공급이 중단되어도 보존된다.

- 설정값등을 저장해두면 좋겠지?

 

 

메모리 각각의 칩셋별 용량은 아래와 같다.

Flash memory > SRAM > EEPROM 순서로 용량이 크다. Flash memory 용량이 상대적으로 훨씬 크다.

* 참고로 아두이노 우노의 칩셋은 ATMega328 (메모리 용량은 ATMega328P 동일)

 


 

SRAM 작고, Flash Memory 많이 크다

 

SRAM

 

char message[] = "I support the Cape Wind project.";

 

라고 코딩한다면, 스케치 업로드시에 Flash Memory 저장되고,

실행시에는 SRAM 저장된다. 아두이노 우노라면 1.6% SRAM 잡아먹는 것이다.

 

 

PROGMEM, 그리고 F() macro

 

SRAM 저장하지 않고, 훨씬 용량이 Flash memory 저장하는 방법이 있다.

 

1) PROGMEM keyword 쓰면 된다.

- 링크: https://www.arduino.cc/reference/en/language/variables/utilities/progmem/

- 자세한 사용법은 생략 (조금 복잡해져서 쓸것 같음)

 

2) F() macro

- 아두이노 IDE 1.0 이후에서는 F() macro 있다. (2018-09-28 시점 최신버전은 v1.8.5)

- string SRAM 아닌 Flash memory 저장한다.


Serial.print(F("I support the Cape Wind project."));


반응형
반응형
잡학툰 뱃지
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함