스마트 컨트롤러 - 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(번지)

 

iPNum을 가리킨다!

 

*iP = 100;

*2000 = 100; -> 2000을 상수로 생각함으로 주소임을 표시해 주어야 한다.

 

이것을 바탕으로! 주소 상수로 변수를 초기화 시키는 작업을 하겠다.

 

변수를 초기화 하는 방법은 총 3가지가 된다.

 

1. 변수에 직접 초기화한다.

ex) iNum=100;

 

2. 포인터로 초기화한다.

ex) *iP = 200;

 

3.주소값으로 변수를 찾아간 초기화 한다.

 

7

! *12FF28 = 200; 는 오류를 일으킨다. 좌항을 상수로 인식하기 때문이다. 해당 *CPU가 이항연산자로(곱하기) 인식하기 때문에 포인터 연산자로 인식하게 만들어주어야 한다.

 

그러므로 compiler12FF28주소 상수로 만들어 주는 작업이 필요하다.

 

우선 괄호를 쳐서 상수로 취급되고 있는 주소를 묶어준다.

ex) (12FF28) = 200;

 

 

casting으로 선언된 변수와의 형을 맞춰 준다.

ex) ((int *)12FF28) = 200;

 

*넣어 주어 포인터 선언을 한다.

ex) *((int *)12FF28) = 200;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#4. #define의 활용

 

#define은 자주 쓰는 입력들을 미리 선언해 놓고 간단한 명령어를 통해 출력하는 전처리 언어이다.

 

전처리 언어는 컴파일 시 적용되기 때문에 프로그램이 구동되는 것에는 영향을 미치지 않는다.

 

p/559 예제

 


 

#define을 통해서 변수가 원하는 값을 표현해 주고 있음을 볼 수 있다!

 

 

 

/* Visual Studio에서 compiler*.i 파일을 생성하는 옵션 설정

 

*/











반응형
Posted by newind2000