ATMEL사의 ATMEGA
메모리 제조회사 ATMEL은
CPU를 만들게되는데
ARM사에서 설계도를 사와서
AVR시리즈
AT91시리즈
등을 만든다
AVR시리즈중에 ' MAGA '라는 놈이 있는데
제조회사 이름을 따서 ATMega128
ATMega128A
ATMega128L 로 나뉜다.
'A'는 5v 전력으로 작동되고
'L'은 3.3v 전력으로 작동된다
현재 128은 단종되었고, 요새는 ATMega2560을 쓴다
이는 8bit CPU로써 8개의 BUS를 필요로 한다.
하지만, 설계를 조작하면 16개의 BUS까지 사용가능.
- ATMEGA128A 의 Data sheet
메모리의 종류는 크게
RAM(Random Access Memory) 과 ROM(Read Only Memory)이 있다.
ROM은 전력공급을 중단해도 자료가 손실되지 않는다.
RAM은 반대로 전력이 끊기면 자료가 손실된다.
요즘은 RAM과 ROM의 기능을 함께 가지는 장치를
개발중에도 있음
'EEP(Electronic Eraser Program)ROM' 이란게 있는데 너무 비쌈
이를 절충해서 나온게 플래시(Flash)
RAM에도 SRAM(Static RAM), DRAM(Dynamic RAM)이 있다.
SRAM(static RAM) |
DRAM(Dynamic RAM) |
전원이 공급되는 동안은 내용이 유지됨 소비전력이 크다 DRAM보다 비싸고 구조가 복잡하다 주로 CPU의 캐시메모리로 사용된다. |
전원이 공급되는 중에도 일정시간이 지나면 데이터휘발 Refresh(충전)이 필요함 SRAM보다 소비전력이 작다 SRAM보다 구조가 간단하고 저렴하다. 주로 PC의 주기억장치로 사용된다. |
SDRAM은 DRAM의 Refresh를 보완해
SRAM과 유사한 동작을 하는 저가형 RAM이다.
범용 마이크로프로세서를 구성하는 요소에는 명령세트, 레지스터, 메모리공간 등이 있는데
여기서 명령세트에는 RISC 와 CISC가 있다.
RISC(reduced instruction set compute)
CPU의 명령어 갯수를 줄여 구조를 간단하게 만드는 방식
적은수의 명령어들로 명령어를 집함한다
복잡한 연산도 적은수의 명령어를 조합해 수행한다
슈퍼컴퓨터에 내장되는 칩에 사용된다
SISC(complex instruction set computer)
복잡한 명령어들의 집합을 가진다
명령어를 해석하는데 오래걸린다
주로 개인용 PC에 내장되는 Intel 칩에 사용된다
구조체의 메모리할당
- 구조체의 메모리 할당
#include <stdio.h> |
주석에 달아놓은 숫자는 각 Type의 범위를 써놓은 것이다.
예를들어 int 는 4, char는 1
계산을 해보면 struct smart 의 sizeof() 는 '22'가 되어야 정상이다.
그런데 struct smart의 크기가 '28'이 나온 이유는 무엇일까
#include <stdio.h> |
int A;
int B;
까지 선언했을때 sizeof()를 했을때 '8'이 나오는 것은 맞는데
char C; 를 선언하고 sizeof()를 출력했을때에는 '9'가 나와야 하는데
'12'라는 결과가 출력됬다.
그 이유는 32bit CPU기준으로 모두 구조체의 변수가 4byte씩 할당되기 때문이다.
char C;
라고 선언한 순간부터 4byte가 더 할당된다.
하지만 ' char C '가 4byte라는 얘기가 아니다.
할당된 범위가 4byte이고 위 그림처럼
' char C '는 그 4byte공간 안에서 1byte만 차지하고 있다.
전체 소스의 그림을 그리면 다음과 같다.
위 그림에서 char E 다음의 short F 에 주목할 필요있다
4byte가 할당된 세번째 칸에 자리하고 있는 char E 다음에
1byte의 여유공간이 남아있는데, 여기에는 범위가 2byte인 short 타입이 들어갈 수가 없다.
그래서 새로운 4byte를 할당해서 short F를 넣어준다.
그리고 남는 1byte는 버려진다.
그리고 char I 가 선언되고 4byte가 새로이 할당 되엇고
short J 가 선언되었는데 4byte 의 3번째와 4번째자리에 들어갔다
short J 는 할당된 4byte의 중간에 걸칠 수 없기 때문
이런 방식의 구조로 인해 struct smart 의 크기는 ' 28byte '를 가지는데
결국 버려지는 메모리가 많아지고
그만큼 비효율 적이 되버린다.
이를 보완하기 위해 다음과같은 구문을 입력한다.
#include <stdio.h> |
' # '을 쓴다는건 전처리언어로 쓰인다는 말이다.
위 그림에서 보였던 것 처럼 '4byte'씩 말고 ' 1byte '씩 할당해라.. 라는 말을
컴파일러에게 미리 경고를 해두는 구문이다.
하지만 이는 1byte 씩 할당을 일일히 하다보니 속도가
저하될 수 밖에 없는 단점이 있다.
그러므로 구조체의 소스코드를 짜는 경우에는
되도록 Type이 같은 멤버변수를 묶어서 여러개의 구조체를 만들던가
그것도 아니면 아래와 같이
#include <stdio.h> |
메모리 손실없이 위와 같은 방법으로
계산적인 할당을 하는것이 좋다.
많이놓침
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
20140414 업무일지 김재성 출석번호 7 (18) | 2014.04.14 |
---|---|
2014년 4월 11일 업무일지 -김용우 [출석번호 6번] (32) | 2014.04.11 |
2014.04.10 -업무일지 출석번호 5번 김상엽 (16) | 2014.04.11 |
AVR STUDIO4 다운 로드 링크 및 다운로드 방법 (1) | 2014.04.10 |
2014년 04월 08일 업무일지 고한솔 [출석번호 2번] (17) | 2014.04.08 |
저희 과정 선배님께서 올린 좋은글퍼왔습니다. (3) | 2014.04.07 |
04.07 업무일지 고윤석 출석번호 1번 (14) | 2014.04.07 |
2014년 4월 4일 업무일지 허수웅[출석번호 22번] (12) | 2014.04.05 |