2011년4월19일..CPU와 메모리간의 데이터전송, 주소값연산, 함수의 특징/원형, DK-128 AVR MCU Board
1. CPU와 메모리간의 데이터전송
type | name | address | 크기 |
char * | c | 0 | 4 |
short * | s | 4 | 4 |
int * | i | 8 | 4 |
변수 c, s, i는 모두 포인터 변수로 크기가 4Byte이다.
포인터변수의 크기는 다음과 같이,
H/W적인 CPU와 메모리의 어드레스 버스의 크기로 정해진다. 어드레스가 255까지 있다면 버스의 크기는 8bit면 충분하고,
포인터의 크기는 1Byte가 될 것이다. 16bit주소이면 2Byte면 충분하다.
<8bit CPU에 8bit Address Bus의 크기를 갖는 경우>
CPU의 레지스터에 00001010이 출력되면 납떔된 와이어를 타고 0은 0V, 1은 5V신호로 전달되고 메모리는 그 전압을 다시 00001010으로 인식한다. 0/1 (CPU) –> 0V / 5V –> 0/1 (메모리)
<CPU가 하는 일>
:10번지에 100을 넣어라.
ⓐ주소 보냄 (CPU)
ⓑ주소를 받음(메모리)
ⓒ10번지를 선택 (메모리관리자)
ⓓ100을 전송(CPU)
ⓔ100을 수신(메모리)
ⓕ100을 저장(메모리관리자)
<결과>
10번지에는,
0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 |
이 들어간다.
★8bit, 16bit, 32bit CPU,메모리가 있고 크기가 가변되는 메모리도 있다.
2.주소값 연산
type | name | 초기값 |
char * | c | 100 |
short * | s | 100 |
int * | i | 100 |
c + 1 –> 101, c + 5 –> 100 + 5 * 1 = 105
s + 1 –> 102, s + 6 –> 100 + 6 * 2 = 112
i + 1 –> 104, i + 7 –> 100 + 7 * 4 = 128
↑
가리키는 곳의 크기
포인터변수가 가리키는 변수의 크기 즉, 포인터변수의 자료형과 변수의 크기를 같게 한 상태에서,
포인터변수를 증감하면 변수의 크기만큼 곱해진다.
실제 메모리는 최소단위크기가 char형과 같은 1Byte라는 것을 알 수 있다.
결론: 정수연산 ≠ 주소연산
3.함수
C프로그램은 함수들의 집합으로 구성된다. 함수란 특정작업을 수행하는 독립적인 프로그램이다.
C프로그램을 여러 개의 함수로 나누어 작성하는 이유는 복잡한 프로그램을 여러 개의 독립된 부분으로 나누어 작성함으로써 다음과 같은 장점이 있다.
ⓐ프로그램 작성의 난이도를 낮출 수 있다.
ⓑ하나의 큰 프로그램을 여러 사람이 나누어 작업할 수 있다.
ⓒprintf() 함수처럼 자주 사용되는 코드를 한번 작성하여 필요할 때마다 반복적으로 사용할 수 있다.
ⓓ한 번 오류가 검증된 함수는 다시 오류 검사를 할 필요가 없다.
★
(자리 예약…)
4.함수의 원형(예제6-1)
(설명 ㅠㅠ)
5.test.c
(설명 ㅠㅠ)
6.DK-128
(설명과 도식 ㅠㅠ)
(사진 RS232C커넥터등등)
7.ATmega128
(설명과 도식 ㅠㅠ)
8.개발환경
(컴파일러 다운로드)
(컴파일러 설치)
(컴파일러 설정 및 프로젝트폴더 생성)
(컴파일과 컴파일 결과물 지우기)
(다시 컴파일)
(다운로드)
(정리 좀 해야됨;)
#첨부
'내장형하드웨어 > 일일보고서' 카테고리의 다른 글
2011년4월21일..make, Makefile, path, deamon, symbol link, mfile(Win-AVR), AVR-gcc 자료형, LED응용제어 (0) | 2011.04.22 |
---|---|
2011년4월20일..분할컴파일, ATmega128복습, DK-128회로도, I/O포트로 LED제어 (0) | 2011.04.21 |
2011년4월15일..마인드스톰 자유과제 발표 (2) | 2011.04.19 |
2011년4월18일..포인터복습, 포인터변수의 자료형, 잘못된 자료형을 가리키는 포인터 변수 (0) | 2011.04.19 |
2011년4월15일..포인터복습, 정수와 실수의 바이트 순서(Big/little Endian) (0) | 2011.04.18 |