본문 바로가기
코스웨어/16년 스마트컨트롤러

2016.03.08 업무일지 노태경

by 알 수 없는 사용자 2016. 3. 8.
728x90
반응형

#include <stdio.h>

void smart1()
{	
	printf("1번함수\n");
}

void smart2()
{	
	printf("2번함수\n");
}	
int main()
{	
	void (*test)(); 
	test = smart1;
	test();
	test = smart2;
	test();
	
	return 0;
}

 

함수 포인터 만들기

함수를 만든 후

타입을 써주고 함수명에 포인터와 이름을 만든다 인자를 쓴다

그리고 함수 포인터에 함수 명을 대입한다.

#include <stdio.h>

void smart1()
{	
	printf("1번함수\n");
}

void smart2()
{	
	printf("2번함수\n");
}	
int main()
{	
	void (*test)(); 
	test = smart1;
	test();
	test = smart2;
	test();
	
	return 0;
}

구조체 크기 확인하기

구조체는 바이트는 int 4(4) short 2(4) int 4(4) char(4) 1 총 16바이트 메로리 공간을 차지한다

#include <stdio.h>

union smart
{
 int A;
 short B;
 int C;
 char D;
};

int main()

 union smart obj;
 obj.A = 0x12345678;
 printf("%x\n", obj.A);
 printf("%x\n", obj.B);
 printf("%x\n", obj.C);
 printf("%x\n", obj.D);
 printf("%d\n", sizeof(union smart));
 return 0;


}


 

공용체 만들기

공용체라 같은 메모리는 공유 하는 개념이다

위에서는 인트형을 공유하므로 A는 12345678 b는 7856  c는12345678 D는 78이 출력된다

   

#include <stdio.h>

int main()
{
 volatile int iCnt;// 지연시키는 volatile CPU에서만 처리하지 않고 메모리를 넘나들면서 일일이
    // 변수를 대입  
 for(;;)
 {
  for(iCnt=0; 1000000000 > iCnt; iCnt=iCnt+1;
  {}
  printf("test\n");
 }
 return 0;
}

volatile 휘발성이라는 뜻으로 volate를 입려하지 않을 경우 CPU에서만 명령을 처리한다.

1000000000 마지막에 메모리에 들어가게 된다

volatile 를 쓰게 되면 CPU에서 메모리로 하나한 변수를 대입하며 명령을 처리한다

 

ex)

iCnt = 0

iCnt = 1

iCnt = 2

icnt = 10000000000 결과 출력

 

for문 사용법

iCnt = 0

while(100000000 > icnt)

icnt = iCnt +1

을 for(괄호안에 순서대로 넣고 마지막 괄호를 닫지 않고 ;로 끝낸다

#include <stdio.h>

int main()
{
 
 int iCnt;
 for(iCnt=1;9>=iCnt;iCnt = iCnt +1)
 {
  printf("3*%d=%d\n", iCnt, 3*iCnt);
  
 }
 return 0;
}

반복문

함수 포인터를 사용하는 이유
①프로그램 코드의 간결
②중복 코드를 줄이기 위해서
③상황에 따라 해당되는 함수를 호출할 수 있음

함수 포인터
① int (*ifunc)(int a);
    return값 : int 형
    인자 : int a
    함수 포인터 명 : ifunc
② char *(*cfunc)(char *p[]);
    return값 : char 포인터형
    인자 : char형의 포인터 배열
    함수 포인터 명 : cfunc
③ void (*vfunc)(void);
    return값 : 없음, 혹은 void
    인자 : 없음, 혹은 void
    함수 포인터 명 : vfunc
④ int (*fptr) (int a, int b);
    return값 : int 형
    인자 : int a과 int b
    함수 포인터 명 : fptr

노트필기

do {while();}한 번해보고 조건 보는 것

조건을 참조하는데 느리다

제어문 volatile

++iCnt = a = iCnt+1
 iCnt = a
iCnt++
 iCnt = a
 a = iCnt+1

for문 (선언; 조건문; 반복문)

volatile 휘발성의
int iCnt;
for(;;)//while(1)
for(iCnt=0; 1000000>iCnt;iCnt=iCnt+1

union 공용체
obj.A=ox12345678;
BCD
E:\노태경\C언어\2016.03.08>union

12345678    4바이트
5678        2바이트
12345678    4바이트 메모리공간 공유 
78          1바이트

little 방식으로 출력
typedef 로 사용가능

함수의 타입을 추출하는 방법
일반 변수는 타입이 앞에 있다
void 함수의 원형 첫번째줄
void smart();
원형을 추출
void (*)() smart 함수를 *괄호별로 대체
void (*)();
세미콜론 앞이 타입
void(*)(); type

int print(const char *, ...);

int (*)(const char*, ...);
타입추출 *P
타입추출이 안되면 성립자체가 안된다

int fopen(const char *, const char *);
int (*)(const char *, const char *);

함수 포인터 선언
void smart();
void (*) ();
type 이름;

포인트 4바이트
void (*test)(); test 함수 포인터
test = smart1;

크로스 컴파일러
WINAVR    } AVR용 개발환경 교차 개발환경
AVRSTUDIO }

칩에 넣을 수 있으면 환경

교차 개발환경 구축

PC에서 다운로드 시킨다

LED를 켜고 끄고
AVR 칩
어느 단위를 제어할지 프로그래머가 선택

다리를 선택하고 다리가 무엇인지를 알아야 한다.


 

 

 

 

 

 

마이크로 프로세스 = CPU  코어, 마이크로 컨트롤러 = CPU 메모리 기타장치 메인보드와 비슷

마이크로 프로세스는 CPU의 기능 코어를 의미 마이크로 컨트롤러는 자체만으로 간단한 프로그램을 실행가능하다. 공장 자동화에 많이 사용

도체(Conductor)와 반도체(Semi Conductor)

도체는 전기가 잘 통하는 물질 반도체는 한쪽 방향으로는 전기가 흐르지만 반대 방향으로는 전기가 흐르지 않는 물질을 뜻함 대표적인 반도체로는 다이오드가 있다.

WinAVR과 AVR studio

WinAVR은 AVR에서 돌아가도록 만드는 일종의 컴파일러이고, AVR studio는 컴파일된 파일을 AVR통역을 해주는 기능이다. RISC와 CISC

RISC - 사용은 어려우나 프로그래밍하기는 쉬운 로봇으로 따지면 세세하게 다움직으므로 하나하나 다움직인다. 하나하나 명령을 다해주어야한다

CISC - 명령은 하나만 하면 실행이 되나 동작이 복잡함

휴대폰은 RISC방식임

지금은 RISC CISC 장점을 혼용하여 차의가 줄으듬

728x90