본문 바로가기

Programming

Floating Point (C++ Source Example) float, double에 관한 소스코드 몇 가지를 정리한다. #include #include #include #include #include #include #include using namespace std; int main(){ cout 더보기
Floating Point C/C++ 에서 주로 사용하는 float형 부동 소수점에 대해 알아본다. double형은 float형보다 지수부(exponent, 11 bit), 가수부(mantissa, 52 bit)의 길이와 그에 따라 값의 표현 범위가 더 넓을 뿐, 원리는 같으므로 생략. 아래 그림은 float형(32 bit)의 부동 소수점 표현 방식이다. 일반적으로 MSB(Most Significant Bit); 최상위 1 bit가 부호비트이다. 자, 이제 예를 들어 34.75 라는 실수가 부동 소수점 표현방식에 따라 어떻게 저장되는지 알아보자. 먼저 34.75라는 실수를 정수부분과 소수부로 분리하여 2진수로 표현해야 한다. 먼저 부호비트는 양수이므로 0이다. 정수: 34 (0010 0010) 소수: 0.75 (1100 0000 .. 더보기
시리얼 통신 시리얼 통신이란 하나 또는 두 개의 전송 라인을 사용하여 데이터를 송수신하는 통신 방법으로, 한 번에 한 bit씩 데이터를 지속적으로 주고 받는다. 시리얼 통신 규격 EIA(전자 산업 협회) 통신 표준으로 RS-232C / RS-422A / RS-485 가 있다. 이 중 RS-232C는 다양한 분야에서 활용되고 있고 이들은 모뎀, 센서 등에 사용된다. RS-232C 이 시리얼 통신 표준은 신호가 단순하여 널리 사용되며 종종 표준으로 컴퓨터에 장착된다. 임베디드 장비에서도 전압레벨을 낮춰 UART/USART 로 탑재된다. 비동기 통신이기 때문에 Baudrate(통신 속도) 설정에 따라 통신이 되고 안된다. PC나 임베디드 장비간 통신시 전압 레벨을 고려해야 한다. PC는 -12V ~ 12V 까지 전압이 바.. 더보기
시리얼 통신 (feat. polling based c++) 시리얼 통신을 구현할 때 고려해야 할 사항으로 송신부분보다 수신쪽에 '언제 데이터를 수신할 것인가' 라는 시간적인 문제가 있다. 데이터가 언제 들어올지 모르기 때문인데, 데이터가 수신될 때까지 마냥 read()만 계속 호출 할 순 없고, 데이터 수신외에 이벤트 처리, 에러 유무 확인을 위해서는 또 다른 확인 루틴 if절을 추가할 수 밖에 없다는 문제가 있다. 가장 큰 문제는 read() 함수가 block 되어 버리면 루틴 자체가 block 되어버린다. 이럴 때 사용하는 것이 POLL 이라고 한다. POLL poll은 확인하고 싶은 여러 이벤트를 미리 설정해놓고, 그 이벤트들이 발생했는지 확인할 수 있는 방법을 제공해준다. 아래는 poll을 이용한 작업 진행과정이다. 1. 체크하고 싶은 여러 이벤트 등록 .. 더보기
UDP (C++) UDP - 패킷 순서 보장 안함- 니는 받아라 내는 보낼란다 마인드- TCP 보다 빠름- 보통 영상 데이터 송수신시 사용 UDP Server //////////// Server.cpp /////////////#include #include #include #include #include #include #include #include using namespace std; #define BUFSIZE 512 int main(){ int sock=socket(AF_INET, SOCK_DGRAM, 0); int retval; sockaddr_in serveraddr; bzero(&serveraddr, sizeof(serveraddr)); serveraddr.sin_family=AF_INET; serveradd.. 더보기
TCP/IP (C++) TCP - 연결형 프로토콜- UDP 보다 속도 느림- 패킷의 순서 보장- 3-Way handshaking 아래 두 샘플은 linux 기반 TCP Server #include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]){ int listenfd = 0, connfd = 0; struct sockaddr_in serv_addr; char sendBuff[1025]; time_t ticks; listenfd = socket(AF_INET, SOCK_STREAM, 0); memset(&serv_addr, '0', sizeof(serv_addr)); mem.. 더보기
OSI 7계층 OSI (Open Systems Interconnection) - 국제 표준화 기구 (ISO)에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층을 나누어 설명한 것. Layer 1 (Physical) - 실제 장치들을 연결하기 위해 필요한 전기적, 물리적 세부사항 정의 (e.g. 핀들의 배치, 전압, 전선의 명세 등) - 물리적인 정보 전달 매개체에 대한 연결의 성립 및 종료 - 통신 채널을 통해 전송되는 사용자 장치의 디지털 데이터를 이에 상응하는 신호로 변환 - 네트워크상에서 데이터 비트를 전송 데이터 링크 개체간의 비트 전송을 위한 물리적 연결을 설정, 유지, 해제하기 위한 수단 제공 Layer 2 (Data Link) - point to point간 신뢰성을 보장하기 위한 계층 C.. 더보기
용어 정리 DNS (Domain Name System) - 도메인 이름과 IP주소를 서로 변환하는 역할 - 정적으로 고정된 IP만 기억 가능 ex) 'www.naver.com' 와 같이 각 포털 사이트의 도메인 주소를 해당하는 고정 아이피를 입력하여 찾아가긴 번거로우니, DNS 설정으로 특별한 주소가 부여되어 이 주소만 입력하면 해당 사이트로 이동가능하다. DDNS (Dynamic DNS) - 실시간으로 DNS를 갱신하는 방식 - 주로 도메인의 IP가 유동적인 경우 사용 - IP가 바뀌어도 DDNS로 설정된 도메인은 변하지 않기 때문에 용이하게 접근가능 VPN (Virtual Private Network) - 큰 집단의 여러곳에 퍼져있는 컴퓨터들을 잇는 사설 네트워크를 만들 때, 일일이 케이블로 연결하기는 돈이 많.. 더보기