플밍

아두이노 기초강좌 - 5. 아두이노 메모리의 이해 본문

프로그래밍/아두이노

아두이노 기초강좌 - 5. 아두이노 메모리의 이해

너구리안주 2015. 7. 19. 00:30


본 강좌는 지인의 사이트에서 허락받고 퍼온 강좌입니다.

다른곳으로 불펌하시면 곤란합니다.

그리고 제가 아두이노를 그리 잘 알지는 못합니다.

저한테 물어보시는것도 곤란.... ^^


#ads_1

아두이노 제품군의 스팩을 보면 아래와 같이 나옵니다.

 

 Microcontroller ATmega328

 Operating Voltage 5V

 Input Voltage (recommended) 7-12V

 Input Voltage (limits) 6-20V

 Digital I/O Pins 14 (of which 6 provide PWM output)

 Analog Input Pins 6

 DC Current per I/O Pin 40 mA

 DC Current for 3.3V Pin 50 mA

 Flash Memory 32 KB (ATmega328) of which 0.5 KB used by bootloader

 SRAM 2 KB (ATmega328)

 EEPROM 1 KB (ATmega328)

 Clock Speed 16 MHz

 Length 68.6 mm

 Width 53.4 mm

 Weight 25 g 5V

 

참고로 UNO 스팩입니다

다른건 보면 대충 아실테고 메모리 부분만 보겠습니다.

 

 

Flash 메모리는 프로그램이 들어가는 메모리입니다.

우리가 코드를 작성해 업로드를 하면 이 Flash 메모리에 들어가게 됩니다.

전원이 차단되어도 날아가지 않고 저장되어 있습니다.

Flash 메모리는 프로그램이 저장되는 공간과 부트로더가 저장되는 공간이 나뉘어져 있습니다.

위 스팩에 32KB 라고 되어 있는데 부트로더에 아두이노소스가 내장되어 있어 0.5KB를 빼고 31.5KB를 사용할 수 있겠네요

 

 

SRAM 은 프로그램이 작동중에 만들어지는 변수가 임시로 저장되는 메모리입니다.

코딩할때 이 메모리를 아껴서 잘 사용해야 프로그램이 원활하게 돌아갑니다.

실질적으로 가장 피부에 와닿는 메모리에 해당합니다.

또한 SRAM은 무지 빠릅니다.  PC의 DRAM보다도 빠릅니다.

 

ATmega328에서는 데이타 메모리안에 레지스터 + SRAM으로 이루어져 있습니다.

컴퓨터는 이 레지스터안의 각 비트의 상태를 보고 판단하여 작업을 수행합니다.

우리가 만든 프로그램의 역할중 대부분이 레지스터를 조작하는거라 볼 수 있습니다.

#ads_2

 

 

ATmega328의 데이타 메모리는 아래와 같은 구조로 이루어져 있습니다.

 

 32개 범용 레지스터

 64개 입출력 레지스터

 160개 확장 입출력 레지스터

 2K SRAM

 

이게 데이터 메모리입니다.

AVR 코딩에서는 이 레지스터를 직접 조작해야 합니다.

처음보시는 분은 머리가 빠개질지도 모릅니다 ㅋㅋ

하지만 아두이노에서는 그럴 필요가 없습니다.

레지스터 조작에 관한 대부분의 프로그램이 아두이노 소스에 이미 만들어져 있으며 우린 해당 함수를 불러다가 쓰면 땡입니다.

고로 더 이상의 자세한 설명은 생략합...(어디서 많이 듣던건데..)니다.

관심있으신 분들은 ATmega서적을 참고하시기 바랍니다.

 

 

EEPROM 은 프로그램이 작동중에 데이타를 영구 저장시켜놓을때 사용하는 메모리입니다.

 

ROM : 읽기만 가능하고 쓰기가 불가능한 메모리(공장에서 쓰기가 되어 출시된다)

PROM : CDROM처럼 딱한번 쓰기가 가능한 ROM

EPROM : 자외선으로 기록된 데이타를 삭제할 수 있는 ROM, 20회 전후로 지우고 다시 쓰기가 가능

EEPROM : 높은 전압의 가해 데이타를 삭제할 수 있는 ROM, 10만번정도 지우고 다시 쓰기가 가능

 

 

그럼 Flash 메모리와 EEPROM 의 차이점은 뭘까요?

Flash 메모리는 프로그램 수행중에 저장이 안됩니다.

하지만 EEPROM 은 수행중에도 자유롭게 읽기 쓰기가 가능합니다.

 

속도면에서는 Flash메모리가 훨씬 빠르고 EEPROM 은 느립니다.  그래서 EEPROM에는 프로그램에 필요한 어떤 설정값을 저장하는데 주로 사용합니다.

 

참고로 PC에서는 프로그램과 변수가 동일한 DRAM에 저장됩니다.  이걸 폰 노이만 구조라 합니다

아두이노에서 쓰는 AVR 같은 경우는 위와 같이 프로그램과 변수의 저장위치가 다릅니다.  이런 방식을 하버드 구조라고 부릅니다. 

#ads_3

Comments