#include <stdio.h> |
xp=8; 처럼 xp에 8이라는 값을 대입하라는 말은 xp는 주소이고 8은 정수이다. 하지만 주소도 정수로 취급하기 때문에(양의 정수-signed int) 값이 대입된다. 그래서 8의 앞에 캐스팅으로 (int*)을 붙여주면 되는것이다.
우리가 흔히 쓰는 CPU와 메모리는 폰 노이만 구조이다
메모리의 영역에는
1)code/text 영역
2)data 영역
3)bss 영역
4)heap 영역
5)stack 영역
data 와 bss 를 합쳐서 전역변수 라고 한다. 우리가 쓰는 지역변수 들은 stack 영역에 저장이 된다.
1)의 코드영역을 빼고 나머지는 Data 를 저장하는 공간이다.
우리가 쓰는 ATmega128은 하바드 구조인데
CPU와 데이터메모리와 코드메모리 의 3부분으로 되어있다. CPU에서 코드 부분과 데이터 부분을 동시에 접근할 수 있다. 버스가 많아지기 때문에 구조가 복잡해 지고 에러 발생률이 높다.
ATmega128은 메모리에 CPU의 레지스터가 들어있으므로 메모리의 주소를 통해서 CPU를 제어할 수 있다.
ATmega 명령어중에 DDRA이 있는데 이것은
헤더파일에 #difine DDRA *((volatile unsigned char *)0x3A)=0xFF; 이런 형식으로 저장되어 있기 때문에 DDRA를 사용하면 같은 효과가 나게 되는것이다.
????.C 인 소스파일을 컴파일 하게되면 전처리과정의 ????.i 와 전처리 다음의 과정인 컴파일과정에서 ????.s(????.asm) 파일이 생기고 다시 어셈블리 과정을 통해 ????.o(????.obj) 파일이 생기고 이 .o 나 .obj 파일을 링킹하여 실행파일 이 만들어 지는것이다. 여기서 .i 와 .s(.asm) .o(.obj) 이런 파일들을 중간 파일이라고 하며
리눅스 에서는
gcc -v --save-temps -o ex01 ex01.c 로 컴파일 하여 중간 파일 들을 확인 할 수 있다.
비주얼 C의
cl 로는 전처리 과정의 .i 파일은 옵션으로 /P 를 사용하면되고, .asm 파일은 옵션에서 /FA를 사용하면 파일이 생성되게 된다.
.obj 파일은 그냥 생성됨.
ATmega 에서 PORTA의 주소값이 3B인데 1B로 되어있다 +20 이 기본으로 계산되기 때문에 3B 가 되는것이다
+20은 노말모드의 하한선인데 +20 을 지우게 되면 103호환모드로 바꿀수 가 있다.
'보고서 > 10월 업무일지' 카테고리의 다른 글
10월 20일 업무일지 (0) | 2010.10.20 |
---|---|
10월 20일 ATMEGA (0) | 2010.10.20 |
10월 18일 업무일지 (0) | 2010.10.18 |
10월 14일 업무일지 (0) | 2010.10.14 |
10월 13일 업무일지 (0) | 2010.10.13 |