본문 바로가기

보고서/10월 업무일지

10월 26일 업무일지 //showdata 라는 함수를 만들어서 프로그램 작성 #include void showdata (int a, int b, int c); int a,b,c,i,max; int main() { printf("정수(3개)입력: "); scanf("%d %d %d",&a,&b,&c); printf("%d %d %d\n",a,b,c); printf("-------\n"); if(a-b #include int showdata (int a, int b, int c); int i,max,ret; int main() { int a,b,c; printf("정수(3개)입력: "); scanf("%d %d %d",&a,&b,&c); printf("%d %d %d\n",a,b,c); printf("-------\n"); if.. 더보기
10월 25일 업무일지 ATMEGA 타이머 카운터 함수 이용 헤더파일 만들기 타이머 카운터 응용실습 문제 더보기
10월 22일 업무일지 #include int main() { int score; char name[10]; FILE *fpin, *fpout; fpin=fopen("d0327.in","r"); fpout=fopen("d0327.out","w"); while(!feof(fpin)) //f=file eof=end of file 파일관련함수는 앞에f가 붙는다. 파일 끝에 도달 하면 Non-zero 반환 { fscanf(fpin, "%s %d",name,&score); // scnaf를 써도 fscanf가 호출된다 //fscanf(stdin,"%d",&AA);(입력받을 곳, 입력받을 형식, 입력된 값을 저장할 곳); //입력받을 곳은 보통 키보드 마우스 등 이다. 표준은 키보드. //scanf 는 입력받을 곳의 stdin 이 없으므.. 더보기
10월 21일 업무일지 ATmega 의 함수들을 살펴보았다. DDRF=0xFF; 단계별로 정의 #define DDRF _SFR_MEM8(0x61) #define _SFR_MEM8(mem_addr) _MMIO_BYTE(mem_addr) #define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr)) 1)_SFR_MEM(0x61)=0xFF; 2)_MMIO_BYTE(0x61)=0xFF; 3)(*(volatile uint8_t *)(0x61))=0xFF; #include int main() { short snum=5,*sp=&snum; float fnum=2.3f, *fp=&fnum; printf("sp의 값: %p\n",sp); printf("증가된 sp의 값: %p\n",++sp);.. 더보기
10월 20일 업무일지 #include int main() { int A=3; printf("printf:[%08X]\n",printf); printf("main:[%08X]\n",main); printf("A:[%08X]\n",&A); return 0; } printf의 주소값: 0x8048300 main의 주소값: 0x8048400 A의 주소값 : 지역변수 이므로 주소저장 공간이 다르다.(Stack) 이소스에서는 지역변수 부분과 코드부분의 주소를 저장하는 곳이 서로 다른곳이고 떨어져 있다고 알 수 있다. (확연히 차이가 난다) code stack - 메모리의 용도별로 구획을 지어 놓았다. *포인터 변수가 가리키는 자료형의 의미 #include int main() { int inum, *ip; short *sp; inum=0.. 더보기
10월 20일 ATMEGA DDRF = 0X61; 은 DDRF *((volatile unsigned char *)0x61); 이다. char 를 사용하는 이유는 DDRF의 공간 크기가 8비트 이므로 char 를 사용한다. #include 를 사용하지 않고 직접 레지스터의 주소값을 정의해서 사용하는 방법이 있다. #define DDRF *((volatile unsigned char *)0x61); #define PORTF #define DDRC #define PINC 각각의 주소값을 넣으면 사용할수 있다. 이런 방식으로 헤더파일을 만들어보자 0000.h 로 파일을 만든후에 #define DDRF *((volatile unsigned char *)0x61); 사용할 포트와 핀을 정해주고 그 헤더로 ATmega 프로그래밍을 할수있다. .. 더보기
10월 19일 업무일지 #include int main() { int x; int *xp; x=7; xp=&x; *((int *)0xBFFFFA08)=10; printf("address of x : %p\n",&x); printf("value of x : %d\n",x); printf("address of xp : %p\n",&xp); printf("value of xp : %p\n",xp); printf("value of *xp : %d\n",*xp); return 0; } xp=8; 처럼 xp에 8이라는 값을 대입하라는 말은 xp는 주소이고 8은 정수이다. 하지만 주소도 정수로 취급하기 때문에(양의 정수-signed int) 값이 대입된다. 그래서 8의 앞에 캐스팅으로 (int*)을 붙여주면 되는것이다. 우리가 흔히 쓰는 .. 더보기
10월 18일 업무일지 int A = 0x12345678; 7 8 5 6 3 4 1 2 Little endian : end(78)의 주소값이 start(12)보다 작다. Big endian #include int main() { //unsigned int A=0x88563412; //unsigned int A=0xC2ED4000; //-118.635 //unsigned int A=0x3F800000; //1 //unsigned int A=0x40000000; //2 //unsigned int A=0x40800000; //4 //unsigned int A=0x41000000; //8 unsigned int A=0x41800000; //16 unsigned short *sp=(short *)&A; //(short *)를 붙여서 w.. 더보기
10월 14일 업무일지 #include int main() { int A; int B; int C; int D; float E; float F; float G; float H; short I; char J; int *K; char L; char *M; printf("%p\n",&A); printf("%p\n",&B); printf("%p\n",&C); printf("%p\n",&D); printf("%p\n",&E); printf("%p\n",&F); printf("%p\n",&G); printf("%p\n",&H); printf("%p\n",&I); printf("%p\n",&J); printf("%p\n",&K); printf("%p\n",&L); printf("%p\n",&M); return 0; } 주소값을 표현해보면 .. 더보기
10월 13일 업무일지 #include int main() { int iNum; float *fP; iNum=3; fP=(float*)3; //포인터형은 int 형과 완전히 동일하다. (float*)을 붙이지 않게 되면 컴파일중 경고 메세지가 뜬다. fp는 주소이며 오른쪽은 정수이다. 컴파일러가 3이 정수인지 주소인지 알수 없는데 3을 기본적으로는 정수로 인식한다.(float*)을 붙이면 캐스팅이 되어서 왼쪽, 오른쪽 이 주소값이 된다. printf("%d\n",iNum); printf("%d\n",fP); return 0; } #include int main() { int iNum; int *iP1; int *iP2; iNum=100; iP1=&iNum; iP2=(int*)0xBFFFFA08; //iNum의 주소값을 16진수.. 더보기