스마트 컨트롤러 - ATmega12A 소개, 주소상수를 활용한 초기화, #define
#1&2 ATmega128A 지급 및 부품 설명
PCB 8개, 전원 공급기 및 전선을 받음.
오실레이터에 주파수를 의미하는 숫자는 표시된 만큼은 정확하다.
ex)16.000=>16.000Mhz
//SMD(Small Mounded Device)
//왠만하면 손으로 MCU를 만지는 것을 삼간다. 정전기로 인해 회로가 파괴될 수 있다.
ATmega126A Datasheet.
www.atmel.com에 접속한다.
ATmega126A 데이트 시트를 다운 받는다.
/*RISC(Reduced Instruction Set Computer) & CISC(Complex Instcution Set Computer)
RISC방법은 메뉴얼화된 명령어를 사용하여 구동시키는 것이고 CISC방법은 세부적인 명령어를 통해 구동시키는 것이다.*/
#3. Pointer - 주소상수 입력을 통한 초기화
학습목표
지난 시간(2/26)에 입력하였던 코드를 불러온다.
// 0012FF28
int Num=50;
int *ip = &Num;
Num <- iP
50(값) 2000(번지)
iP는 Num을 가리킨다!
*iP = 100;
*2000 = 100; -> 2000을 상수로 생각함으로 주소임을 표시해 주어야 한다.
이것을 바탕으로! 주소 상수로 변수를 초기화 시키는 작업을 하겠다.
변수를 초기화 하는 방법은 총 3가지가 된다.
1. 변수에 직접 초기화한다.
ex) iNum=100;
2. 포인터로 초기화한다.
ex) *iP = 200;
3.주소값으로 변수를 찾아간 초기화 한다.
7
! *12FF28 = 200; 는 오류를 일으킨다. 좌항을 상수로 인식하기 때문이다. 해당 *는 CPU가 이항연산자로(곱하기) 인식하기 때문에 포인터 연산자로 인식하게 만들어주어야 한다.
그러므로 compiler가 12FF28을 주소 상수로 만들어 주는 작업이 필요하다.
우선 괄호를 쳐서 상수로 취급되고 있는 주소를 묶어준다.
ex) (12FF28) = 200;
casting으로 선언된 변수와의 형을 맞춰 준다.
ex) ((int *)12FF28) = 200;
*넣어 주어 포인터 선언을 한다.
ex) *((int *)12FF28) = 200;
#4. #define의 활용
#define은 자주 쓰는 입력들을 미리 선언해 놓고 간단한 명령어를 통해 출력하는 전처리 언어이다.
전처리 언어는 컴파일 시 적용되기 때문에 프로그램이 구동되는 것에는 영향을 미치지 않는다.
p/559 예제
#define을 통해서 변수가 원하는 값을 표현해 주고 있음을 볼 수 있다!
/* Visual Studio에서 compiler로 *.i 파일을 생성하는 옵션 설정
*/
'Busan IT > 스마트 컨트롤러' 카테고리의 다른 글
매크로 함수 (0) | 2015.03.07 |
---|---|
ATmega128A의 메모리 구조(I/O 레지스터) 헤더파일 생성 및 #if (0) | 2015.03.05 |
발광다이오드에 불 켜기 (0) | 2015.03.04 |
ATmega128A Datasheet(특징 및 메모리)와 WinAVR설치 (1) | 2015.03.03 |
Atmega 128A데이터 시트와 AVR Studio 세팅 (0) | 2015.03.02 |