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

2014년 4월 4일 업무일지 허수웅[출석번호 22번]

by 알 수 없는 사용자 2014. 4. 5.
728x90
반응형

디지털 회로

 

7404CHIP

Hex Inverter(NOT)    -  6개의 NOT gate로 이루어져 있습니다.

 

 

 

7404CHIP 실습

A1 + 에 연결을 하게 되면 LED불이 들어오지 않고 - 에 연결하게 되면 LED이 들어옵니다.

 

7408CHIP + 7404CHIP

 

AND gate NOT gate 가 만나 NAND gate와 같은 효과가 나타났습니다.

 

7408CHIP + 7404CHIP 실습

 

NAND gate 처럼 A1 B1 이 모두 +일때에만 LED에 불이 들어오지 않고 나머지의 경우엔 LED에 불이 들어옵니다.

 

7402CHIP

Quad 2 Input NOR - 4개의 NOR gate 로 이루어져 있으며 입력되는 값이 2개입니다.

 

 

지금까지 배운 칩들과는 다르게 입력값이 2번과 3번이고 그에 대한 결과가 1번으로 나타난다.

 

7402CHIP 실습

 

진리표 처럼 입력값 A1 B1 모두 - 일때만 LED에 불이 들어오고 나머진 들어오지 않습니다.

 

7486CHIP

Quad 2 Input Exclusive OR - 4rodml XOR gate로 이루어져 있으며 입력되는 값이 2개 입니다.

 

 

7486CHIP 실습

 

A1 B1 입력되는 값이 다를 경우에만 LED에 불이 들어옵니다. 같은 경우에는 불이 들어오지 않습니다.

 

반가산기(half adder)

반 가산기(HA: half adder)는 사칙 연산을 수행하는 기본 회로이며, 2진수 한 자리를 나타내는 두 개의 수를 입력하여 (Sum)자리올림 수(Carry)를 구해 주는 덧셈 회로로서, 컴퓨터 내부에서 가장 기본적인 계산을 수행하는 회로이다.

 

반가산기의 합(S)의 결과는 두개의 입력 값이 XOR gate에 들어갈 때의 결과와 동일하게 나타나며 올림수(C)의 결과는 AND gate와 동일합니다.

XOR gate 와 AND gate가 만나 반가산기가 만들어 집니다. 하지만 이 두가지 말고도 여러가지가 있습니다. 그 회로들을 보면 XOR을 제외하고

AND,OR,NOT gate 들을 조합하여 만들수 있으나 복잡합니다.

 

반가산기 실습

 

반가산기 XOR, AND gate를 통하여 만들수 있습니다. 두가지 기능을 하는 7486 , 7408 칩을 사용하여 입력받는 두개의 값동일하게 해주고 출력되는 값을 받는 LED를 다르게 하여 실습해 본 결과 진리표 처럼 입력되는 값이 서로 다를 경우 초록불이 들어오고 입력되는 값이 모두 + 일 경우 빨간불이 들어오는 것을 볼 수 있었습니다.

 


 

C 프로그래밍

 

 

문자열 출력 함수 : puts, fputs

 int puts(const char *);   --> 모니터에 하나의 문자열을 출력할때 사용합니다. 문자열 수정이 불가능하며 자동으로 마지막에 개행이 이루어 집니다.

int fputs(const char *,FILE *stream); --> puts와 마찬가지로 모니터에 표준 출력 스트림 stdout을 통하여 출력을 해줍니다. 그러나 puts처럼 자동으로 개행이 이루어 지지 않기 때문에 따로 적어 주어야 합니다.

 

 문자열 입력 함수 : gets, fgets

char *gets(char *);  --> 문자열 입력 함수로 저장할 곳을 받아 입력받은 문자열을 저장합니다. 하지만 정해진 공간보다 넘어가도 입력이 되어 할당 받지 않은 메모리 공간을 침범하여 실행 중 오류가 발생하는 단점이 있습니다.

char *fgets(char *,int n,FILE *stream);  --> fgets함수는 gets함수와 다르게 입력받는 글자수 만큼 적어주기 때문에 할당받지 않은 메모리 공간을 침범하는 경우는 없습니다.

 

표준 입출력과 버퍼 

표준 입출력 기반의 버퍼 - 표준 입출력 함수를 통해 데이터를 입출력 하는 경우, 해당 데이터들은 운영체제가 제공하는 '메모리 버퍼'를 중간에 통과하게 됩니다. (메모리버퍼 - 데이터를 임시로 모아두는 곳)

그림에서 보면 키보드를 통해 입력된 데이터는 입력버퍼에 저장된 다음 프로그램에 읽혀집니다. 입력함수(scanf , fgets)가 읽어 들이는 문자열은 입력버퍼에 저장된 문자열입니다. 키보드로 입력된 데이터가 입력 스트림을 거쳐 입력버퍼로 들어가는 시점은 사용자가 엔터키를 누르는 시점으로 누르기 전에는 입력함수가 문자열을 읽어 들이지 못합니다. 엔터 키가 눌러지기 전에는 입력버퍼가 비워져 있기 때문입니다. 그렇기 때문에 입력함수를 호출하려 문자를 입력하고 엔터를 눌러주지 않을 경우 커서가 계속 깜박이는 현상을 볼 수 있습니다.

버퍼링을 하는 이유

버퍼링을 하는 가장 큰 이유는 '데이터 전송의 효울성'을 높이기 위해서 입니다. 키보드나 모니터 처럼 외부 장치와의 데이터 입출력은 생각보다 시간이 걸리는 작업입니다. 그렇기 때문에 중간에 메모리 버퍼를 둬서 데이터를 한데 묶어서 이동시킴으로 빠르고 효율적이기 때문입니다.

출력 버퍼를 비우는 fflush함수

출력 버퍼가 비워진다는 의미는 출력 버퍼에 저장된 데이터가 버퍼를 떠나서 목적지로 이동됨을 뜻합니다.

int fflush(FILE *stream);   --> 인자로 전달되는 스트림의 버퍼를 비워버립니다.

표준 출력버퍼를 비우기 위해선 다음과 같이 선언하면 됩니다.       fflush(stdout);

입력버퍼비워진다는 의미는 출력버퍼의 비워짐과는 다르게 데이터의 소멸을 의미합니다.

입력버퍼를 비우기 위해선 다음과 같이 선언하면 됩니다.      fflush(stdin);

예를 들어 출력함수 scanf함수가 여러번 연속으로 사용될 경우 처음 scanf함수를 통해 입력된 값을 보여주고 다음 scanf함수를 건너뛰는 경우가 있습니다. 그 이유는 입력을 한 다음 엔터키를 누르게 되면 다음 scanf가 엔터를 입력으로 인식하고 건너뛰게 되는 것입니다. 그렇기 때문에 이런 경우엔 scanf 함수들 사이에 fflush(stdin);을 통하여 fflush 함수를 호출해 주게 되면 입력버퍼를 비워 정상적으로 동작이 이루어 집니다. 

 


 

부족한 글 봐주셔서 감사합니다. 잘못된 부분이나 빠진 부분 있으면 댓글로 남겨주시면 감사하겠습니다.

728x90