검색결과 리스트
글
20130418
__________논리 회로___________________________________________________________________________________
※ 카르노 맵 (4변수)
_____________________________________________________________________________________________________
_________C 수업______________________________________________________________________________________
■ 10. 연결리스트
※ 동적 자료형 : 함수의 실행 중 메모리가 필요에 따라 할당되었다가 사용후 시스템에게 돌려 주는 자료형
(메모리 공간 사용의 효율성을 높일수 있음 ex>이중연결리스트, 2진트리, 스택, 큐)
※ 정적 자료형의 단점 : - 크기가 프로그램의 선언부에서 한번 정해지면 바뀔 수 없음
- 데이터의 삽입과 삭제가 자유롭지 못함
※ 동적 자료형의 특징 : - 프로그램의 실행 도중 필요에 따라 변수를 생성시키거나 소멸 시킬수 있다.
- 동적 자료형의 변수는 정적자료형의 변수처럼 변수 자체가 이름을 갖는 것이 아니라
포인터변수(참조변수)를 이용하여 간접적으로 접근한다. 이때 참조변수는 동적 변수의 주소를
가지고 있다.
※ malloc() 함수 & free() 함수 : C 프로그램에서 프로그램의 실행도중 필요한 메모리를 시스템으로부터 할당 받을때는
malloc() 함수를 사용하고, 사용 후 메모리를 시스템에 반환할 때는 free() 함수를 사용한다.
※ malloc : memory allonation
원형 |
void * malloc (size_t size) ; |
void free ( void *ptr) ; | |
※ 원형에서 size 는 할당하고자하는 메모리의 바이트수 ※ malloc () 함수는 할당된 메모리의 시작주소를 반환함 ※ 메모리의 부족으로 메모리 할당이 실패했을 경우 NULL 반환 ※ 할당된 메모리는 프로그램이 끝나기 전 반드시 free() 함수로 해제시켜줘야함. ※ stdlib.h 와 alloc.h 에 선언되어 있음
※ 동적 자료형은 심볼테이블에 올라가지 않는다 즉, 실행파일에는 동적 자료형의 주소정보가 없다. ( Code, Data, BSS 영역은 파일에 주소정보가 들어있지만 Heap, stack 영역은 실행될때 운영체제가 사용가능한 주소를 넘겨줌 )
|
자동변수 |
{ (Auto) int A ; // 우리가 쓰는 일반적인 변수는 자동으로 생성되고 자동으로 없어지는 자동변수임. } |
void * |
#include <stdio.h>
int main() { int a = 100; //int *pA = &a; float d = 5.0f; void *vp; // 가리키는 곳의 자료형이 정해지지 않았다(미정)
//vp = pD; vp가 가리키는곳이정해져있지 않기 때문에 pD가 대입 되는것이 문제되지 않는다. //printf("%d\n", *vp); //void *는 가리키는곳의 자료형이 명확하지 않기때문에 *쓰는것이 안됨. //printf("%f\n", * ((float *)vp)); // 캐스팅 시켜서 vp가 어떤 자료형을 가리키는지 명확히하면 됨.
// void * 를 쓰면 캐스팅해서 어떤자료형이든 다 가리킬수 있다 vp = &b; vp = &c; vp = &d;
return 0; } |
malloc() , free() 실습 |
#include <stdio.h>
typedef struct
}STUDENT;
int i = 0;
sp = (STUDENT *) malloc (sizeof (STUDENT)); // STUDENT 크기만큼의 동적 메모리 할당하고 // 시작주소를 sp 에 넘겨 받음. // (STUDENT *) 자료형으로 캐스팅
if(sp == NULL) // 메모리를 할당 받지 못하면 NULL 을 넘겨 받아서 종료됨.
while ( i < 3 )
st[i++] = *sp; // 배열은 배열로 대입되지 않지만(주소라서)... free (sp); // sp가 가리키는 메모리를 시스템에 돌려줌 for(i = 0; i < 3; ++i) }
return 0; |
______________________________________________________________________________________________________
__________ARM___________________________________________________________________________________
■ AT91SAM7S256으로 LCD 모듈(16216D-4-B102A)에
Data 또는 instruction 전송하여 LCD 모듈 제어
LCD.h |
#ifndef _LCD_H_ #include <AT91SAM7S256.h>
#define LCD_RS (1<<24) // 1을 왼쪽으로 24 시프트 시킴 (0x01000000)
void LCD_Cmd_write (unsigned char); void LCD_Data_write (unsigned char);
|
LCD.c |
#include "LCD.h"
void LCD_Init (void)
LCD_Cmd_write(LCD_FUNC); //LCD_Cmd_write 함수를 이용해 명령어 전달 return ;
PIO_CODR = LCD_EN ; //EN clear for(iCnt = 0; 50000 > iCnt; ++iCnt); //시간지연 PIO_SODR = LCD_EN ; //EN set for(iCnt = 0; 50000 > iCnt; ++iCnt); //시간지연 PIO_CODR = LCD_BS; // BUS clear PIO_SODR = (ucdata<<16); // BUS data input for(iCnt = 0; 50000 > iCnt; ++iCnt); //시간지연 PIO_CODR = LCD_EN ; //EN clear for(iCnt = 0; 50000 > iCnt; ++iCnt); //시간지연 }
{ PIO_CODR = LCD_EN ; //EN clear for(iCnt = 0; 50000 > iCnt; ++iCnt); //시간지연 PIO_SODR = LCD_EN ; //EN set for(iCnt = 0; 50000 > iCnt; ++iCnt); //시간지연 PIO_CODR = LCD_BS; // BUS clear PIO_SODR = (ucdata<<16); // BUS data input for(iCnt = 0; 50000 > iCnt; ++iCnt); //시간지연 PIO_CODR = LCD_EN ; //EN clear for(iCnt = 0; 50000 > iCnt; ++iCnt); //시간지연 }
|
main.c |
#include "project.h"
} |
※ I / D -> Increment : 증가 , decrement : 감소
_______________________________________________________________________________________________________________________
_________실습파일_____________________
_______________________________________