2011년4월22일..#define, -D옵션, CFLAGS, avr-gcc에서 Makefile의 CFLAGS, 인수(매개변수)가 있는 사용자 정의 함수

 

#define (임베디드C p.21 p1-6.c)

image

예제1-6을,
# gcc –save-temps –o main main.c
컴파일시 중간파일들을 삭제하지 않고 main.i를 열어 보면 오른쪽과 같이 PI가 3.1416으로 바뀌어져 있다.
전처리 후 #include와 #define은 C코드와 어셈블단계에 맞게 변형되어진 코드들로 변환된다는 것을 알 수 있다.

★왜 #define을 쓰는가?

심재원氏: 코드가 길어지면 상수가 의미하는 바를 알기 힘드니 PI로 두면 다른 사람이 보았을 때 “PI니까 원주율이겠구나!”라고 알게 됨.
공정우氏: (!@#$%@#%&%^) (말소리가 작아 못 알아 들었다. 내 귀는 S/N비가 좋지 않다.)

두 사람을 합하면 정답이다. 그럼 공정우氏의 답을 추측할 수 있겠군…

아래와 같이,
image 
변수를 선언하면 메모리를 사용하므로 임베디드같이 메모리=돈인 시스템에선 좋지 않다. (PC에서도 좋지 않음)

PI가 500개 쓰이면 #define의 PI값만 바꾸면 500개의 값이 동시에 바뀌므로 500개의 값을 다 바꾸는 노가다를 하지 않아도 된다.

 

(문서작성 예약명령모음)

○#define부분을 주석처리하고 컴파일…추가

image

image


○# gcc -DPI=3.1416 –o main main.c 컴파일시 결과화면과 설명추가

image


○Makefile (CFLAGS)추가
○win-avr에서 -DF부분…Makefile의 컴파일옵션…추가
○비주얼스튜디오 프로젝트-세팅-디버그 or C/C++ 비주얼 스튜디오도 옵션을 쳐야하나…추가
○20110422_function test.c 소스와 설명 추가
○중복선언관련 추가
○인자 두개인 함수 추가
○반환있는 함수 추가
○DK-128 확장보드 KEY TEST회로와 설명 추가
○DK-128 확장보드 LED TEST회로와 설명 추가
○오늘실습 KEY입력받아 바로 LED에 출력 코드와 설명 동영상설명 추가
○응용실습예제 1과 2 코드와 설명, 동영상설명  추가…

 

 

 

(첨부영상)

 

 DSCN2337 DSCN2338

 

DSCN2328 DSCN2339

16.000은 16.000Mhz 그 이하는 오차… 20일날 CM선생님께서 설명하신 것…사진은 오늘 찍었음.. 쿠쿠

 

 

image

 

 

 

 

!cid_DA7ACDEDF54541C4905000E5E7E95A1F@suman

 

 

 

!cid_1035F4E8BA0D45B5ACAC41921E2B5B0C@suman 

 

 

 

 

 

 

DSCN2332 DSCN2333 DSCN2334 DSCN2335 DSCN2336