2011년5월4일...함수의 인수전달기법(복습), 분할컴파일(복습+@), DK-128 적외선센서응용실습2

 

 이러다 월화수목금금금…4a46b55d020016m1

매일 야근 공휴일 출근...정기적인 밤샘작업……..OTL

<본문>

★질문자의 의도를 파악하여 답할 것.

임베디드C p6-5.c (call by value)

 

image image

 

 

명령 a b c n1 n2 eax레지스터
int a = 7, b = –8 7 -8 ? ? ? ?
abs_max()진입 7 -8 ? 7 -8 ?
if(n1 < 0) //n1이 음수? 7 -8 ? 7 -8 ?
if(n2 < 0) //n2가 음수? 7 -8 ? 7 8 ?
if(n1 >= n2) 종료 7 -8 ? 7 8 8
c = abs_max() 7 -8 8 7 (제거) 8 (제거) 8

 

eax레지스터는 디스어셈블리어를 보지 않고 생각난 대로 적은 것이라 확실치 않음.

 

 

임베디드C p6-6.c (call by address)

 

image

 

 

image

 

 image

두 변수에 들어 있는 값을 서로 바꾸려면 둘 중 하나의 값을 기억해야 한다.

 

image

 

C언어 에서는 참조전달이 없다. (포인터)
C++에서는 값과 주소를 모두 값전달로 취급하고,
reference가 따로 있다.
(세 개 모두 따로 취급한다.)

int A = 100;
int  *p = &A;
int &R = A;    //reference
*p = 99;
R = 80;         //A에 80대입?

 

 

 

 

 

 

임베디드C p6-8.c (재귀함수)

 

 DSCN2699

 

 

분할컴파일 (빌드과정)

 

image  image

Makefile에서의 주석은 ‘#’으로 시작되고 C언어에서 ‘//’와 같은 의미이다.
상기의 스크린샷에서 ‘//’는 잘 못 된 것이다. ‘#’으로 바꿀 것.

main.c에서,
#include “test.h”는 현재 디렉토리에서 test.h를 찾아 이 줄에 삽입하라는 뜻이다.
상대경로와 절대경로 모두 지정할 수 있으나 일반적으로 상대경로를 주로 사용한다.
왜냐하면 절대경로로 되어 있는 경우 소스를 다른 사람에게 주었을 때 문제가 발생하는데…
상대방도 같은 디렉토리 구조로 되어 있지 않기 때문이다.

#include <stdio.h>에서 ‘<’ 과 ‘>’은 /usr/include라는 지정된 디렉토리에 있는 헤더파일을 삽입할 때 쓰인다.

image


VS6.0의 경우..
윈도우키 + Pause Break키를 동시에 눌러 고급탭-환경변수에서 확인하면 아래와 같이 복수의 디렉토리를 참조한다.
C:\Program Files\Microsoft Visual Studio\VC98\atl\include;C:\Program Files\Microsoft Visual Studio\VC98\mfc\include;C:\Program Files\Microsoft Visual Studio\VC98\include

 

 

image image

#ifdef는 if not define

 

 

image

 

 

 

 

 

 

 DSCN2700

 

 

 

DK-128 적외선센서 응용실습문제 2-1

 

 image

 

 

 

 

 

DK-128 적외선센서 응용실습문제 2-2

 image

 

 

 

 

 

 

참조 (Reference)

 

DSCN2698 DSCN2699 DSCN2700 DSCN2701 DSCN2702