-
20140414 (ATMega128 내부, 메모리 방식 폰노이만 하바드, 연결리스트, 동적할당)부산IT학원/스마트컨트롤러 2014. 4. 14. 17:53
41일차
---------------------------------
ATMega128 Microcontroller 내부
---------------------------------
-
0 전기가 들어가지 않으면 프로그램 다운로드.
1 전기가 들어가면 내부에 프로그램 실행.
- XTAL1, 2
크리스탈(은색 칩), 일정 주파수 발생
- 캐패시터
AC(교류)는 통과 DC(직류)는 막는다.
단위 F
- Register
Intel 에서는 c로 Reg 조작 불가능
ATMega 에서는 C로 Reg 조작 가능.
- 주소는 64Kbyte를 사용하지만
한 주소당 크기는 2byte 이다
그래서 128Kbyte.
- 메모리 구조 방식 2가지
폰노이만 단순 느림
하바드 복잡 빠름
- Code 영역은 Flash Memory에 저장됨.
- Memory map
ATMega128 은 CPU의 Reg 영역이 메모리 영역과 마찬가지로 주소값을 가지고 있기에
C언어로 기계어처럼 세밀한 조작이 가능해 진다.
Reg 영역은 어제 봤던 Regster Summary를 참고하여
각각 세밀하게 조작이 가능하다.
- C
----------------------
연 결 리 스 트
----------------------
- 연결리스트 자료구조라고 데이터 자료들을 관리하는 구조 중에 한가지, 기초이다.
ex) 소스
#include <stdio.h>
struct _smart
{
int iNum;
struct _smart *self;
};int main()
{
struct _smart a = {1, 0};
struct _smart b = {2, 0};
struct _smart c = {3, 0};
struct _smart d = {4, 0};
struct _smart * p;a.self = &b;
b.self = &c;
c.self = &d;
p = &a;while(0 != p)
{
printf("%d -> ", p->iNum);
p = p->self;
}printf("NULL \n");
return 0;
}위의 방법과 같이 사용하는데
이런식으로 가리키게 된다.
- 동적할당
heap 영역은 OS에서 할당해 주기 때문에
OS가 없으면 동적할당 해줄 프로그램이 있는게 아니면 동적할당 못함.
heap 영역에 메모리를 할당해 주는 함수
void * malloc(size_t size);
함수 성공시 할당된 메모리, 실패시 NULL
할당된 메모리를 다시 푸는? 함수
void free(void * ptr);
ex) 소스
#include <stdio.h>
int main()
{
int * p;p = (int *)malloc(4);
*p = 100;
printf("%d \n", *p);
free(p);
return 0;
}이런식으로 heap 영역에 메모리를 할당 받을 수 있게 된다.
원하는 크기만큼 size에 넣으면 된다.
주의해야 할 점이. free() 함수를 호출해 주지 않으면
heap 영역 할당받은 메모리가 없어지지 않았으므로
컴퓨터가 종료할 때까지 계속해서 남아있게 된다.
그러다 메모리가 바닥나는 오류가 발생할 수도 있으니
항상 free로 해제 시켜 줘야한다.
'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글
20140416 (LED 실습, #if #ifdef #ifndef #endif #else, 분할 컴파일) (0) 2014.04.16 20140415 (define, 연결리스트 링크드리스트) (0) 2014.04.15 20140411 (용어, Register Summary, volatile, 구조체 복사, 공용체) (0) 2014.04.11 20140410 (프로그램 실행 구조, AvrStudio4 실행, 구조체 포인터, typedef struct) (0) 2014.04.10 20140409 (CPU, Microcontroller, RAM, ROM, RISC, CISC, 구조체, #pragma pack) (2) 2014.04.09