목록 (199) 썸네일형 리스트형 TCP와 UDP TCP와 UDP의 차이 TCP는 접속을 하고 서로 통신하지만 UDP는 접속하지 않고 통신한다. 사물 인터넷(IoT)에서 TCP와 UDP의 차이 1. TCP 사물 인터넷(IoT)에서는 기본적으로 사물(보드)이 많다는 가정이 있다. 따라서 이런 작은 IoT보드 하나하나에 외부에서 식별 가능한 고정 IP주소를 제공하기에는 한계가 있다. 그래서 일반적으로 IoT보드들은 공유기에 연결하여 사설 인터넷 주소를 부여한다. 대신에 서버는 모든 네트워크에서 식별 가능한 고정 IP를 가지고 있어야 한다. TCP 통신에서는 네트워크에서 식별할 수 없는 인터넷 공유기의 사설 인터넷 망에 연결된 IoT보드들이 있고, 이 보드들이 고정IP를 가진 서버에 접속을 한다. 서버는 IoT보드들을 네트워크에서 찾을 수 없지만 IoT보드들.. 구조체 패딩(struct padding) 구조체 패딩 현상은 무엇일까? 성능 향상을 위해 CPU가 접근하기 쉬운 메모리에 구조체 필드를 배치하는 것이다. 예를 들어 그림1과 같이 구조체가 선언되었다면 해당 구조체의 크기는 9byte가 나올 것 같지만 실제로는 16byte가 나온다. 그 이유는 CPU가 접근하기 쉽게 구조체에 패딩 값을 넣어주는 구조체 패딩 현상이 일어났기 때문이다. 구조체 패딩 현상은 왜 일어날까? 64bit 운영체제일 때 CPU는 8byte씩 메모리를 읽어온다. 따라서 64bit 운영체제에서 그림1 구조체의 ll을 읽어오기 위해서는 그림2처럼 2번의 접근이 필요하다. 이런 경우 CPU가 접근하기 쉽게 구조체에 패딩 값을 그림3처럼 넣어주게 되는데 패딩 비트 크기만큼 메모리를 낭비하게 되지만 CPU가 그림1 구조체의 ll을 읽어.. fifo drvfifo.h /** @fileDrvFifo.h @date2021/05 @authorbik3352@hynux.com @version1.0 @briefFifo 드라이버 헤더 파일 */ #ifndef _DRV_FIFO_H_ #define _DRV_FIFO_H_ #include #defineMAX(x, y) ((x iLoBound = (x)->iHiBound = 0)/**@deffifo 초기화*/ #defineff_isempty(x) ((x)->iLoBound == (x)->iHiBound)/**@deffifo empty.. 아두이노 1대 N - RS485 통신 테스트 Arduino Uno, MAX485 TTL to RS-485 컨버터 모듈을 사용하였고, 개발 환경은 Arduino IDE 2.2.1 입니다. 구상도 송수신 과정 1번: Master "A LED ON"을 전송한다. 2번: Slave A/B가 "A LED ON"을 수신받는다. 그리고 Slave A는 LED를 켠다. 3번: Slave A가 "A LED ON"을 전송한다. 그리고 Master는 LED(A 상태)를 킨다. 4번: Master가 "B LED ON"을 전송한다. 5번: Slave A/B가 "B LED ON"을 수신받는다. 그리고 Slave B는 LED를 켠다. 6번: Slave B가 "B LED ON"을 전송한다. 그리고 Master는 LED(B 상태)를 킨다. 7번: Master가 "A LED OF.. [C언어] 함수의 정의 함수의 선언만 있고 정의 부분은 삭제한 위와 같은 코드가 있습니다. 이 코드를 컴파일 하면 오류가 발생하지 않는데, 그 이유는 컴파일러는 함수의 정의를 의심하지 않기 때문입니다. 컴파일러는 함수가 어떤 매개 변수와 반환형을 가지는지 파악하여 문법이 올바른지 판단하고, 함수의 정의는 어딘가에 있다고 생각하고 넘어갑니다. 하지만 이 프로그램은 컴파일은 가능하지만 실행할 수는 없습니다. 그 이유는 소스코드 파일을 실행 가능한 소프트웨어로 만드는 빌드 과정에서 함수를 호출했을 경우 이동할 함수의 정의 부분을 찾을 수 없기 때문입니다. 그래서 함수의 정의 부분을 넣어줘야 하는데 어디든 존재하기만 하면 됩니다. 그것이 DLL 파일이든, LIB 파일이든 상관없이 어디든 그 함수의 정의가 존재한다면 그 곳으로 이동할 .. DMA(Direct Memory Access) DMA란CPU의 개입 없이 주변 장치들이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능입니다. DMA 사용 이유주변장치의 데이터를 사용하기 위해서는 그 데이터가 반드시 RAM에 저장되어야 합니다. 그리고 이때 반드시 CPU의 개입이 필요한데, 그 이유는 RAM에 접근하기 위한 주소를 CPU가 생성하기 때문입니다.그림1은 DMA를 사용하지 않는 기존의 PIO(Programmed Input/Output)방식으로 주변장치에서 데이터를 읽고 쓰기 위해서 CPU가 RAM과의 데이터 전송을 지속합니다. 따라서 이 방식에서 CPU는 데이터 처리가 끝날 때까지 다른 일을 할 수 없습니다.반면에 그림2는 아래와 같은 프로세스를 거칩니다.1) RAM에 I/O 장치의 데이터가 필요할 때 CPU는 전송 크기, 대상 .. Timer Interrupt 설정 - ATSAMD21G18A MCU는 ATSAMD21G18A을 사용하였고 관련 데이터 시트는 아래 첨부했습니다. 코드 분석 void Timer_Init() { /** Divide the 48MHz clock source by divisor 6: 48MHz/6=8MHz, Select Generic Clock (GCLK) 4 */ GCLK->GENDIV.reg = GCLK_GENDIV_DIV(6) | GCLK_GENDIV_ID(4); while (GCLK->STATUS.bit.SYNCBUSY); /** Set the duty cycle to 50/50 HIGH/LOW, Enable GCLK4, Set the 48MHz clock source, Select GCLK4 */ GCLK->GENCTRL.reg = GCLK_GENCTRL_IDC.. GPIO(스위치) 설정 - STM32F030F4P6 MCU는 STM32F030F4P6을 사용하였고 관련 데이터 시트는 아래 첨부했습니다. GPIO mode - Input mode 스위치이므로 핀을 Input mode로 설정한다. GPIO Pull-up/Pull-down – No pull-up and no pull-down/Pull-up/Pull-down 1. Floating 디지털 신호는 High(1) 또는 Low(0)이지만 실제는 그렇지 않은 경우가 많다. Floating은 0과 1이 명확하지 않게 펄럭거리는 상황을 말하며 정전기, 잡음에 의해서 오류가 생기는 것이 가능하다. 위의 그림은 Floating 상태를 보여준다. Input을 1로 받을지 0으로 받을지 모르기 때문이다. 즉, 확실한 전압차이가 나지 않아서 전류가 흐르는지 아닌지도 불명확하기 때문.. 이전 1 2 3 4 5 6 ··· 25 다음