1

반응형
Posted by newind2000


HY-1602W-204-LCD.pdf


케릭터 LCD 명령어 설명.pdf


20150318.IAB


20150318.IAD


20150318.IMB


20150318.IMD


20150318.PFI


20150318.PO


20150318.PR


20150318.PRI


20150318.PS


20150318.WK3

LCD 기본 프로그래밍

 

학습목표 - LCD 데이터 시트를 보고 기본 세팅을 프로그래밍 할 수 있다.

 

 

E0일 상태에서는 다른 값이 무엇이 들어간다고 해도 아무런 실행이 되지 않기 때문에 DC(DON'T CARE) 상태라고 부른다.

 

Return Home 명령어를 수행하면 커서의 위치는 왼쪽 최상단으로 이동하게 된다.

 

 

 

AVR을 통해 명령어 전송할 때 다음과 같은 내용을 선택해야 한다.

 

1. Instruction(L)/Data register(H) 선택

 

2. Read(H)/Write(L) 선택

 

3. Bus를 통해 명령어 선택

 

4. Enable(H)을 통해 활성화 선택

//DB 명령어에서 가장 앞에 1이 무엇이냐에 따라 명령어가 결정된다.

 

 

 

Entry Mode에서 I(H)increase방식으로 글자를 쓰면 다음 글자가 우측에 씌여 진다.

D(L)decrease방식은 글자의 좌측에 다음 글자가 씌여 진다.

 

Display ON/OFF Control3에서 Dset display로써 1(H)을 넣어야 화면에 글자가 출력된다. 이 때 DB01(H)를 입력하면 커서가 깜빡거린다.

 

Cursor or Display Shift는 커서를 화면에 표시할지 선택하는 명령어이다.

 

 

// A = U 0100 L 0001 -> 65 ASCII code 와 일치한다!

 

 

FND500(7 segment)를 획득하였습니다.



 

 

 

반응형
Posted by newind2000

스마트 컨트롤러 - 변수 공유 및 보완을 위한 명령어/LCD datasheet를 토대로 한 ATmega 기초코딩

 

학습목표

 

명령어 static/extern를 이해할 수 있다.

LCD datasheettimetable을 보고 LCD 작동을 위한 코드를 작성할 수 있다.

 

externstatic의 활용

 

전역변수에 static을 앞에 붙이면 외부파일에서 해당 변수를 사용할 수 없게 되고 전역변수에 extern을 사용하면 해당 함수를 외부파일에서 사용할 수 있게 된다.

 

static은 보완 또는 공유방지 목적으로 사용된다.

 

staticextern이 동시에 사용되는 경우에는 static이 우선적으로 작용한다.

= static > extern




해당 신호를 바탕으로 프로그램을 작성해야 한다.

 

하나씩 분석해 보자!

 

명령어를 실행시키기 위해서는 E를 실행시켜야 한다.

 

 

RSRW를 설정해 놓고 E를 활성화 해야 한다. 구체적인 데이터는 데이터버스를 활용하여 알아낼 수 있다.

 

여기서 enabletrigger로써 데이터 전송에 결정적인 역할을 한다.

 

장치에 대한 프로그램을 driver라고 한다.

우선 초기화를 해보자.

 

함수의 prototype은 헤더파일의 끝에 넣도록 하자. //이유는 다음에 설명

 

금일(3/18)까지 작성한 코드는 다음과 같다.





 

 

반응형

'Busan IT > 스마트 컨트롤러' 카테고리의 다른 글

1  (0) 2015.03.20
LCD 기본 프로그래밍  (0) 2015.03.19
LCD 프로그래밍을 위한 기초 작업  (0) 2015.03.17
포인터의 이해&LCD Datasheet  (1) 2015.03.16
1차원 배열의 입력과 출력  (0) 2015.03.13
Posted by newind2000

LCD 프로그래밍을 위한 기초 작업

 

학습목표

 

- Makefile을 수정하여 c 파일을 추가적으로 컴파일 할 수 있다.

- ATmega I/O 레지스터 on/off를 위한 컴파일을 할 수 있다.

- 명령어 static의 기능을 알 수 있다.

ATmega에서 c파일을 추가 하려고 할 때,

 

makefile에서 SRC를 검색해서 찾은 후 한 칸 띄우고 옆에 추가하고 싶은 c파일을 적어준다.

tab키를 사용하여 #define과 정의항을 띄워준다.

 

//extern "c"C++에서 사용하는 언어이다.

 

static 변수는..

 

1. 지역 변수를 전역 변수화

 

2. 변수의 보안옵션(전역 변수에 static 선언 시 -> 외부 파일에서 접근 불가) //링크를 걸어서 컴파일 할 때 전역변수의 이름이 겹칠 수 있다. 이 때 static선언을 하면 외부 파일에서는 해당하는 변수를 볼 수 없다.

 

3. 함수의 보안옵션

 

필요한 형태로 결과 값을 도출하기 위해서는 ##을 활용하면 인자 사이에 원하는 특정 값을 입력할 수 있다.

 

ex) Add(int A, B) A ## 더하기 ## B

-> A 더하기 B







반응형
Posted by newind2000

스마트 컨트롤러 - 포인터의 이해&LCD Datasheet

 

학습목표

 

포인터 변수의 활용과 문법에 대해 안다.

포인터 변수 대입 시 형일치를 판별할 수 있다.

LCD데이터 시트에서 특징과 핀번호를 알 수 있다.

 

포인터란 주소 값을 저장하기 위해 선언되는 변수를 포인터 변수라고 한다.

 

포인터를 선언할 때 변수형은 포인터(*)로 인해 결정되지만 해당 포인터가 가리키는 형을 따라서 변수형(ex. char, int...)

 

주소를 가리키는 앰퍼센트(&)는 단항 연산자이다. 때문에 앰퍼센트 앞에 항이 와 버리면 비트연산자로써 논리연산을 수행하게 된다.

 

반드시 포인터가 같은 형태를 가리키라는 법칙은 없다(일반적으로는 맞춰 주어야 한다.)

포인터를 사용하여 메모리를 해석하는 방법을 달리할 수 있다.

 

int형의 자료를 넣어 놨을지라도 메모리에 저장되어 있는 값을 포인터를 활용하여 float으로 해석하면 실수 형으로 값을 해석하여 표현하게 된다.

 

포인터를 활용하여 입력된 값들을 해석해보자!

 

포인터의 형 선언 시 아스터리스크(*)를 변수형과 변수명 사이 어느 곳에든 위치 시켜도 되지만 일관성은 유지할 것을 추천한다.

 

포인터의 변수형이 다르더라도 컴파일러는 오류를 내지 않고 경고를 표시만 나타내주며 컴파일을 해준다. 두 가지 변수가 주소를 취급하는 경우에는 오류를 내지 않는다.

 

예를 들어 아래의 코딩은 오류를 내지 않는다.

 

int num1 = s;

double *pnum1 = &num1;

 

// C++은 포인터 형이 다를 경우 컴파일 시켜주지 않는다.

 

포인터의 기능 및 처리절차를 이해해야 포인터와 관련하여 컴파일 시 오류가 나더라도 처리할 수 있다.

 

p/280 - 포인터 연산)

포인터 형은 메모리 공간을 참조하는 기준이 된다.

 

예를 들어,

 

int num;

int * pNum;

pNum = #

 

에서 *에 선언된 int(4byte)는 해당 주소를 가진 변수로 가서 int만큼(4byte)의 데이터를 표시하라는 뜻이다.

 

포인터의 형이 존재하는 이유는 포인터 기반의 메모리 접근기준을 마련하기 위해서이다.

LCD 데이터 시트




- 화살표 표시된 것들은 BUS

- VDD = VCC, VSS = GND

- VR은 가변저항

- LEDA(LED VCC), LEDK(LED GND)

 

핀설명

 

1. GND

2. VCC

3. 0V

4. 5V - data register, 0V - instruction register (프로그래밍을 해야 하는 핀)

5. 5V - Read, 0V - write (프로그래밍을 해야 하는 핀)

//LCM - LCD Module

6. LCD module on/off (프로그래밍을 해야 하는 핀)

7 - 14. BUS

15 - 16. LED 전원

 

전원부(1,2) BUS 그리고 LED 전원에만 선을 연결해 보자!

 

아트메가 연결 핀 약속.

 

PC0 - PA7 -> BUS 7 - 14

PG0 -> RS(4)

PG1 -> R/W(5)

PG2 -> E(6)



반응형
Posted by newind2000

스마트 컨트롤러 - 1차원 배열의 입력과 출력


학습목표

 

C에서 배열이 어떻게 구동하는지 이해할 수 있다.

 

1차원 배열

 

p/257

 

배열에서 3개의 변수를 만들었지만 그 이상의 변수를 초기화하여도 에러가 발생하지 않는다. compiler는 문법적 오류를 검사하기 때문에 경우에 따라서는 문제가 발견되지 않을 수 있다.

 

//visual studio에서는 배열을 생성할 때 사용자가 배열의 범위를 침범하여 코딩하는 경우를 대비하여 배열 사이를 12byte로 띄워놓았다.

 

First In Last Out으로 자료를 넣고 빼는 것이 stack 메모리의 출력 형식이다.

 

QueueFirst In First Out 형식이다. ex) 키보드, 마우스 입력

//순서가 중요시 되는 작업에는 First In First Out형식을 쓴다.

 

Stack구조는 자주 사용하는 것을 다시 쓴다는 규칙을 바탕으로 자주 쓰는 것을 쉽게 꺼내 쓸수 있는 곳에 보관하는 것이다. ->가장 최근에 만든 함수/변수가 가장 먼저 사용될 가능성이 높다!

 

p/259 예제 - 배열의 길이 계산)

 

배열을 만들 때 변수의 개수를 세기 귀찮을 때 개수를 넣지 않아도 compiler에서 자동으로 개수만큼 변수를 생성해준다.

 

초기화시키지 않은 배열의 값에는 0이 들어간다.

 

p/262 예제 - 문자열)

 

 

 

%s 는 시작 문자의 주소점에서 시작해서 0이 나올 때 까지 출력한다.

 

코드를 짜다가 아스키코드의 번호가 필요한 경우가 있다. 이 때 %c‘ ’을 활용하여 아스키 코드를 알아볼 수 있다.

 

p/263 scanf 함수를 이용한 문자열의 입력

 

scanf를 사용하여 문자열을 입력할 때 띄워쓰기를 하게 되면 띄워쓰기 전까지만 출력된다.

 

/* visual studio에서 scanf를 제한하는가?

 

위에 선언된 str변수는 buffer이기 때문에 사용자가 입력하는 내용을 변수의 용량이 넘치더라도 그대로 입력해준다.

 

위의 str변수의 크기를 8로 지정하였는데도 scanf로 인해 그 이상이 입력되는 상황이 발생한다. 때문에 visual studio에서는 scanf를 사용하지 못하게 한다. => scanf는 경계체크를 하지 않는다.

 

 

%s를 사용하지 않고 문자열을 출력하게 코딩할 수 있다.



 

 

반응형
Posted by newind2000

메모리(RAM)의 구조/지역변수&전역변수/AVR makefile

 

학습목표

 

메모리의 구조의 대하여 이해하고 변수생성 시 어느 영역에 저장되는지 안다.

폰 노이만 구조와 하버드 구조의 차이점을 이해한다.

지역변수와 전역변수의 차이와 활용에 대해서 안다.

재귀함수에 대해 안다.

Makefile에 있는 문법에 대해 안다.

 

//Intel이나 ATmega에서 메모리 영역의 사용은 동일하다.

 

명령어들은 메모리의 Code영역에 저장된다.

폰 노이만 방식은 Code영역과 저장용 메모리 영역의 버스를 달리함으로써 속도를 향상 시킨다.

 

전역 변수를 쓰면 함수의 인자가 필요하지 않게 된다.

 

전역변수는 프로그램을 복잡하게 만드는 주범임으로 가능한 한 사용을 최소화해야 한다.

또한 전역변수는 해당 프로그램이 시작될 때부터 종료할 때까지 메모리를 차지하게 된다. 때문에 RAM의 메모리를 지속적으로 사용하게 된다.

 

지역변수를 사용하면 변수의 생성과 소멸에 의해 CPU에 부하가 발생할 수 있지만 이것은 메모리 사용보다는 낮은 우선순위이다.

 

Static 지역변수


 

Static변수는 한 번만 초기화되는 전역변수이다.

 

p/234 예제 static 변수)

 

 

Static 변수도 전역변수의 일종임으로 가능한 한 지역변수를 사용하자!

 

사용해야 하는 우선 순위(왼쪽이 순위 높음)

 

지역변수 - static 지역변수 - 전역변수

 

레지스터 변수

 

레지스터 변수 선언하면 CPU내 레지스터에 저장될 확률이 높아진다. 때문에 빠른 변수의 처리를 원할 경우 register 변수를 선언하면 처리가 빨라질 수도 있다.

 

// register명령어와 비슷한 명령어는 volatile이다. 둘 다 compiler 실행에 간섭한다.

 

전역변수는 register 변수로 선언할 수 없다.

 

p/238 재귀함수

 

재귀함수는 만들지 말아라! 메모리를 많이 사용하기 때문이다.

 

무한 재귀함수의 문제점은 변수를 무한대로 생성하여 메모리를 지속적으로 차지하게 된다. Window운영체제에서는 이러한 프로그램을 강제종료 시키지만 이러한 재귀함수를 제한하지 않은 환경에서는 오작동이 발생할 수 있다.

 

// 지역 변수를 다른 용어로 buffer라고도 부른다.

 

// 할당된 메모리를 넘어가서 다른 영역까지 메모리를 침범하는 경우를 oveflow라고 부른다.

 

// 해킹의 용도로 고의적으로 stack을 넘치게 하여 컴퓨터에 오류를 일으키게 할 수 있다.

 

makefile에 대한 설명

 

line44 MCU = atmega128 //변수타입 없이 선언 되었다. MCU의 값 atmega128

line65 F_CPU = 16000000 //전에 800000이던 것을 수정하였다.

 

line83 SRC = $(TARGET).c //변수를 사용할 때는 $(TARGET)을 사용해해야 한다.

 

#을 넣으면 주석처리 된다.

$(*)을 넣으면 변수처리 된다.











 

반응형
Posted by newind2000

Return의 기능/전역 변수 & 지역 변수/메모리의 영역 구분

 

#1. return의 기능(함수의 종료)

 

학습목표 - 함수의 문법과 사용을 이해하고 return의 기능을 이해한다.

 

어제 배운 것 복습

 

p/214 함수의 유형

 

- 인자와 반환 값의 유무에 따른 4가지 유형

 

- 지역변수란 함수 안에서만 실행되고 해당 함수가 끝나면 같이 사라지는 변수를 말한다.

 

- 함수의 개수를 알아내려면 메인 함수의 둥근 괄호의 개수를 살펴보면 된다.

 

 

p/215 return이 자니는 두 가지 의미 중 한 가지 의미만 살리기

 

1. 함수를 종료한다.

 

2. 값을 반환한다.

 

 

/*나누기에서

 

나누어지는 수 - 피제수

 

나누는 수 - 제수 */

 

 

앞으로 비교연산자 ‘==’를 쓸 때 변수를 오른쪽에 쓴다.

실수를 ‘==’ 대신에 ‘=’를 입력했을 경우 에러가 나게 됨으로 실수를 잡을 수 있다.

 

실습 - return의 함수 종료 기능)

p/216 함수의 정의와 그에 따른 원형의 선언

 

함수는 호출되기 전에 미리 정의되어야 한다. 이 때 지난 시간에 배운 함수의 선언함수의 정의가 나온다.

 

!!! #2. 둘째 시간은 쉬었어요 \(-0-)/

#3. 지역변수와 전역변수

 

학습목표 - 지역변수와 전역변수를 구분하여 사용할 수 있다.

 

 

지역변수는 해당지역을 벗어나면 자동으로 소멸된다.

 

지역변수는 선언된 지역 내에서만 유효하기 때문에 선언된 지역이 다르면 이름이 같아도 문제가 되지 않는다.

 

지역변수의 주기는 여는 괄호로 시작해서 1. 닫는 괄호를 만나거나 2. return을 만나면 끝이난다.

 

같은 이름의 변수가 있으면 가장 가까이 있는 변수에게 명령어의 효력이 발생한다.

 

p/228 지역변수

 

위와 같이 동일한 num변수가 “if문 내에서는 main함수의 num이 가리워진다라고 한다.

 

전역변수(Global Variable)

 

main함수가 전에 선언되는 변수를 전역변수라고 한다.

 

p/230 - 전역변수)

 

전역변수는 기본 0으로 초기화된다!!!!!

전역변수를 초기화하면 해당되는 변수의 크기에 해당되는 메모리는 전부 0으로 채워진다.

 

 

 

 

 

 

#4. 메모리의 영역 구분

 

학습목표 - 메모리의 영역 구분이 어떻게 이루어지는지 이해한다.

 

// 함수는 이름자체가 주소이다.

 

메모리

 

함수들이 있는 영역은 Code영역이다.

 

// Visual Studio에서는 기존 영역과

 

지역변수Stack영역에 있다.

 

전역변수는 BSS영역에 있다.

 

전역변수BSS영역이 있고 Data영역이라고 한다.

 

초기 값을 넣은 변수들은 Data영역에 포함되고 초기 값이 없는 변수들은 BSS영역에 들어간다.

 

 













 

 

 

 

 

 

 

반응형
Posted by newind2000

함수(정의부와 선언부, 함수의 유형)/분할 컴파일/Source Insight

 

#1. 함수의 분할(정의부와 선언부)

 

학습목표 - 함수를 정의부와 선언부로 나누어 코딩할 수 있다.

 

지난 시간에 레지스터/전처리 언어/함수/매크로에 관한 수업을 했다.

 

오늘은 함수에 대해 더 배우고 분할 컴파일에 대해서도 배워본다.

 

//잘게 분산된 일을 합치는 작업을 linker에서 수행한다.

 

실습 - 함수의 분리 저장)

 

Led of/off 함수를 분리하여 저장한 후 실행시켜본다.

 

 

 

실습 - 함수의 정의와 선언)

 

smart는 정의부/main은 선언부

#2. 분할 컴파일과 Source Insight 기본 조작

 

학습목표

 

다수의 분할된 코드를 컴파일하여 실행할 수 있다.

Source Insight의 기본 조작법을 숙지 한다.

 

작업을 조각낸 후 이를 합치는 과정을 link라고 한다. 팀 프로젝트에서 조각난 작업을 합치기 전 단계의 작업 결과물은 obj 파일들이 된다.

 

형성된 obj파일들이 제대로 되었는지 확인해 봐야 한다. 이를 테스트하는 것을 컴파일(compile)만 수행한다고 한다. 이 때 명령어는 “cl /c *.c"이다. //*는 파일명

 

이와 같이 작성된 코드를 따로 따로 컴파일하는 것을 분할 컴파일이라고 한다.

 

소스가 많아질 경우 수 많은 코드를 제어하는 것이 힘들어진다. 이때 우리는 도구를 사용한다! -> Source Insight

 

Source Insight 실행 후!

Project -> New Project Settings

소스가 있는 폴더를 지정




원하는 소스파일을 더블클릭하여 창에 올려준다.

줄번호를 표시해 주거나 글자 크기 등을 조절해주기 위해 option -> document option

 

옵션 설정 후 적용하기 위해서는 위의 창에서 'yes'를 입력해 주어야 한다.







Ctrl + Shift + f(찾기 단축기) //범위 지정된 단어가 바로 찾아진다.

 

Case Sensitive - 대소문자 구분

 

Project Wide - 모든 프로젝트에서 단어 찾기

 


위에 버튼을 통해 찾은 단어를 자유롭게 이동가능.

 

메모장에 사용자가 코딩 시 필요로 하는 기능 등을 추가해준 것이 Source Insight이다. 프로그램 작성 및 수정에는 도움이 되지만 자체 컴파일 기능은 없다.

#3. 분할 컴파일

 

학습목표 - 분할 컴파일을 활용하여 팀별 코딩을 할 수 있다.

 

팀으로 코딩해보자!

 

 

#4. 함수(함수의 유형)

 

학습목표 - 인자와 반환 값의 유무에 따른 함수의 형태를 구분하고 활용할 수 있다.

 

AVR로 가서!

Source Insight에서 창 내에 있는 변수들은 색깔로 표시된다.

 

수정하게 되면 노란색으로 변한다.

 

저장되면 채도가 낮은 연두색으로 바뀐다.

 

//수업 중에 언급하지 않으면 코딩은 메모장에서 한다!

 

분할 컴파일은 잘 정리해 놓자!

 

p/212 예제

 

함수 값에 인자/인수를 넣을 때 만들어준 함수의 형식에 맞게 넣어주어야 한다.

 

함수 속에서만 생성되었다가 함수가 끝나면 사라지는 변수를 지역변수라고 한다.

 

함수의 가장 복잡한 형태가 반환 값도 있고 인자도 있는 4번 형태이다.

 

인수가 없는 경우에는 void를 생략해도 된다. 하지만 컴파일러에 따라 꼼꼼하게 볼 수도 있으니 void를 넣어주는 습관을 기르자.

 

p/214 예제

 

 

 

반응형
Posted by newind2000

매크로 함수

 

#1. 매크로 함수

 

학습목표 - 매크로 함수의 정의와 사용문법을 이해한다.

 

#ifndef ~ #endif //만약 정의 되지 않았다면

 

#ifdef의 부정형임으로 설명 없이 넘어간다!

 

#if#ifdef의 차이

 

#if는 참/거짓을 따져 경우에 따라 입력한 명령어를 수행하게 만드는 명령어이다.

 

#ifdef는 다음 항으로 넣어주는 변수가 정의 되었는지 안되어 있는지 확인 후 경우에 따라 입력한 명령어를 수행하게 만드는 명령어이다.

 

헤더 파일을 만들 때 #if#endif1:1로 대응되는지 확인하기 위해서 주석으로 표시해 주어야 한다.

 

 

! 전처리 문의 중복처리를 막기 위한 코드이다. 원래 전처리 언어의 중복 사용을 권장하지 않지만 위의 코드는 동일 전처리 언어가 두 번 이상 선언 되었을 시 한번만 처리해 주는 코드임으로 유용하다.

 

가장 먼저 선언 되었을 시 #define으로 인하여 header파일이 실행된다.(#define으로 헤더파일이 실행되는 것에 관해서는 더 자세히 알아봐야 하지만 해당 코드로 인해 실행은 되기 때문에 그렇다고 유추할 수 밖에...) 다시 한번 헤더파일이 실행 됐을 경우 #ifndef으로 인해(이미 헤더파일이 실행 되었음으로) 아래의 명령어들은 실행되지 않음으로 억번을 넣더라도 한번만 실행된다는 사실! //실행되지 않는 경우라도 문법에 맞게 입력해주지 않으면 에러가 날 수 있다는 사실!

 

 

 

 

 

 

 

 

#2. 매크로 함수 실습

 

학습목표 - 수업시간의 배운 매크로함수의 정의를 실습에 적용하여 사용할 수 있다.

 

// 사용자가 코딩한 코드를 세미콜론(;)으로만 명령을 나눈다. 때문에 사용자의 가독성을 위해 엔터를 임의적으로 삽입하여도 무관하다.

 

매크로 함수 //함수처럼 생긴 매크로

 

전처리 언어의 일부이다.

 

#define SQUARE(X) X*X -> X가 들어간 곳을 X*X로 바꿔준다.



 

! 매크로 사용 시 원하는 값이 나오지 않을 경우 전처리 언어를 생성 후(cl /P *.c) 안에 내용을 살펴보면 된다. //*는 코딩파일 이름

 

p/561 - 563 까지의 잘못된 매크로의 예를 읽어 보고 이해하자!

 

// 연산의 순서에 대해 자신이 없을 때는 괄호를 사용하여 먼저 연산처리를 해주면 된다.

 

 

#3. 매크로 함수의 사용

 

학습목표 - 수업시간의 배운 매크로함수의 정의를 실습에 적용하여 사용할 수 있다.

 



 

좋은 코드는 치환을 활용하여 전처리 언어와 문자 사용을 늘려 사용자가 알아보기 편한 코드라고 할 수 있다.

p/536 마크로 함수의 사용

 

 

 

#4. 매크로 함수의 장단점

 

학습목표 - 매크로 함수의 장단점을 이해한다.

 

p/564 매크로 함수의 장단점

 

<장점>

 

1. 일반 함수에 비해 실행속도가 빠르다.

 

선행처리기에 의해서 매크로 함수의 몸체부분이 매크로 함수의 호출 문장을 대체하기 때문에 일반 함수를 불러올 때의 메모리할당 -> 실행 위치의 이동과 매개변수로의 인자 전달 -> return문에 의한 값의 반환의 과정을 거치지 않기 때문이다.

 

쉽게 말해 call - return 과정이 필요 없다.

 

2. 자료형에 따라서 별도의 함수를 정의하지 않아도 된다.

 

인자검사(형검사)를 하지 않기 때문에 속도가 빠르다.

 

<단점>

 

1. 정의하기가 까다롭다.

 

만드는 과정이 복잡하다.

 

2. 디버깅하기가 쉽다.

 

3. 실행파일이 커진다.

 

Library에 들어 있는 함수의 경우 호출을 통해 명령을 수행하고 끝나지만 macro 함수의 경우는 지속적으로 해당 코드를 불러와 사용하기 때문에 코드량이 늘어나 실행 파일이 커진다.

 

매크로와 선행처리기 단원은 마무리!

 

함수로 다시 돌아와서.

 

유형 4의 함수를 만들어 보자!

 

반환형이 없을 때 return은 생략 가능하다. 하지만 우리는 쓰자. (우리가 넣지 않으면 컴파일러가 return을 넣어주기 때문에.

 

실습 - 입력한 코드를 활용하여 다이오드에 불을 넣어보자!!(지난 번 중복임으로 설명생략)

반응형
Posted by newind2000