TCP/IP, UDP/IP 의미 정리
컴퓨터 네트워크 분야에서의 TCP/IP란 용어는 인터넷을 위한 프로토콜을 모두 내포하고 있습니다. 예를 들어, Ethernet PHY, Ethernet MAC, IPv4, IPv6, TCP, UDP, DHCP, HTTP 등 입니다. 하지만, 다른 분야에서는 TCP/IP와 UDP/IP를 분류하는 경향이 있습니다. 업계가 바뀌면서 기술적 용어의 개념이 모호해진 것 같은데 말 그대로 TCP/IP는 TCP를 기반으로 통신 및 어플리케이션을 사용한다는 의미로 보여집니다. 반면에, UDP/IP는 UDP를 기반으로 통신 및 어플리케이션을 사용한다는 의미로 보고 있습니다. 크게 중요하지 않을 수 있는데, 표준 문서를 보다보면 많이 혼용해서 사용하는 것 같네요. 복잡하게 생각하지말고 해당 문서에서 TCP/IP와 UDP/..
2021.12.28
XCP 및 XCP on Ethernet 관련 사이트 정리
XCP 및 XCP on Ethernet을 공부하면서 유용했던 사이트들입니다. PiEmbSysTech 임베디드 관련 블로그이며, XCP를 처음 접하는 분들이 보기에 좋게 작성되어 있습니다. Master/Slave 연결 구조, 통신 시스템 구조, 데이터 포맷 등 중요한 부분들이 잘 정리되어 있어요. 하지만, 이 내용만 가지고 XCP를 구현하기는 조금 어렵다고 생각합니다. XCP에 대한 개요를 알아가는 용도로 활용하고, 구현을 위해서라면 표준 문서 및 다른 사이트를 이용하시는 것을 추천드립니다. ※ 링크 https://piembsystech.com/xcp-protocol/ XCP over Ethernet 논문 University of Gothenburg에서 발행된 논문이며, 저자는 Ada Ustundag Ho..
2021.12.28
ETH_PAD_SIZE 목적
ETH_PAD_SIZE의 목적 헤더 뒤의 페이로드 정렬을 보장하기 위해 이더넷 헤더 앞에 추가된 바이트 수를 의미합니다. 이더넷 헤더의 길이가 14바이트이므로 이 패딩이 없으면 IP 헤더의 주소가 32비트 경계에서 정렬되지 않으므로 2로 설정하면 32비트 플랫폼의 속도를 높일 수 있습니다. Ethernet Header Des. MAC Addr : 6Byte Src. MAC Addr : 6Byte Ethernet Type : 2Byte Total : 14Byte ※ 참조 https://www.nongnu.org/lwip/2_0_x/group__lwip__opts__arp.html#gad7fa3b356ca7e603e848b069c4cc6276
2021.12.28
no image
Visual Studio Code 다중 선택하기
코드 개발 시, 문자열 간의 공통점은 없지만, 열의 수가 같은 경우가 있습니다. 대표적인 예로, Hex로 관리하는 데이터가 있겠네요. 이 때, 전체 라인을 재배치하거나 정렬하고 싶은 경우에 하나하나 수정하면 시간이 많이 소요됩니다. 한 두 줄이면 문제 없지만, 데이터가 많아 몇 백줄이 넘어가면 손도 아프고 시간도 아깝죠. 이런 경우를 위해 Visual Studio Code에서는 다중 선택이라는 기능이 있습니다. 다른 곳에서도 지원하는 기능인데 Visual Studio Code에도 있어 유용하게 썻네요. 방법은 'Ctrl+Alt+방향키' 입니다. 아래의 왼쪽 화면은 일반 모습이고, 오른쪽 화면이 다중 선택으로 3개 라인을 선택한 것입니다. Shift키를 이용해서 한 번에 선택하여 삭제도 가능합니다. ESC..
2021.12.28
memp_init()의 무한 루프 오류
memp_init() 함수 무한 루프 오류 LwIP 라이브러리를 활용하던 중, Init 과정을 벗어나지 못한 경우가 있었습니다. 디버깅을 하다보니 Init 부분이라는 것을 알게 된 거고, 그 중 memp_init에서 무한 루프가 걸리더군요. 나름 유명한 오픈소스다보니 Init 부분을 건든다는게 선뜻 내키지 않았는데요. 검색하다보니 비슷한 현상인 분들이 많았습니다. 수정하고 나니 큰 문제 없이 동작하네요. memp_init 함수 수정전 #if MEMP_SEPARATE_POOLS memp = (struct memp*)memp_bases[i]; #endif /* MEMP_SEPARATE_POOLS */ memp_init 함수 수정후 #if MEMP_SEPARATE_POOLS memp = (struct memp..
2021.12.19
손코딩, 핸드코딩, 날코딩, 하드코딩 이게 다 무슨 말이지...
안녕하세요. 이번에는 손코딩, 핸드코딩, 날코딩, 하드코딩에 대해 알아보도록 하겠습니다. 각 업계에 일하다보면, 자신들만의 용어가 생기는데요. 위에 나열한 단어들도 마찬가지라고 보시면 됩니다. 조사한 내용과 개인적을 의견을 곁들어 설명드리겠습니다. 손코딩 손코딩은 단어에서 유추할 수 있듯이, 손으로 코딩한다는 의미입니다. 좀 더 자세히 말씀드리자면, A4용지나 노트 같은 곳에 펜으로 코드를 작성하는 것입니다. 그리고 손으로 디버깅을 하는 것이죠. 사람들마다 의견이 다르지만, 개인적으로 손코딩은 비효율적인 학습법이라고 생각합니다. 손으로 코딩을 연습하실 때는 블록도(또는 다이어그램) 정도만 설계하시고, 디버깅을 통해 공부하는 것이 시간이 훨씬 절약된다고 생각해요. 핸드코딩, 날코딩 핸드코딩과 날코딩은 찾아..
2021.12.19
no image
lwIP 및 관련 사이트 소개
lwIP(lightweight)에 대한 간략한 내용과 관련 사이트를 소개드리겠습니다. lwIP는 이더넷의 TCP/IP 프로토콜을 위한 라이브러리입니다. 먼저, lwIP에 대한 간략한 소개부터 하겠습니다. lwIP 소개 lwIP는 스웨덴 컴퓨터 과학 연구소(SICS, Swedish Institute of Computer Science)의 컴퓨터 및 네트워크 아키텍처(CNA, Computer and Networks Architectures) 연구소에서 아담 던켈스가 개발한 것입니다. TCP/IP에 필요한 프로토콜들의 집합체라고 생각하시면 조금 편하겠군요. C언어 기반으로 구성되어 있고, 40Kbyte라는 적은 메모리를 이용하여 개발되었습니다. (제가 개발했던 환경은 항상 C언어였는데, 다른 언어로 구성이 되..
2021.12.19
no image
CAN Bit Timing 개념, 계산법, 계산 사이트
Bit Timing은 CAN 버스 라인을 모니터링, 샘플 포인트의 샘플링 및 조정을 위한 개념입니다. CAN에서 Bit Timing의 동작은 3개의 Segment로 구분하고 있습니다. - Synchronization segment - Bit segment 1 - Bit segment 2 MCU를 활용해서 CAN 컨트롤러를 설정할 때, 일반적으로 Prescaler, SJW, BS1, BS2에 대한 값들을 정해주어야 합니다. 각 특성에 대한 내용은 이렇습니다. - Prescaler = CAN 컨트롤러에 공급되는 주 클럭의 분주기 설정 - SJW = 1 = CAN 노드 보드 속도 사이의 "허용 오차"의 작은 창 (비슷한 CAN 계층, 일반적으로 고속, 동일한 OSC 속도) - SJW = 4 = CAN 노드 보..
2021.12.19
CAN(Controller Area Network) 통신 요약내용 및 특징
개요 CAN(Controller Area Network) 통신은 차량에서 많이 쓰이는 버스 구조 기반의 데이터 통신방식입니다. 처음엔 차량분야에서 컴퓨터 랜선처럼 두 개의 단말 간 직접 연결하는 방식인 Point-to-Point(점대점) 방식으로 연결했습니다. 그러나 점차 ECU(전자제어장치)의 수가 많아짐에 따라 Wire harnesses(배선 장치)의 공간, 무게, 비용이 늘어나 차량 내부 제어 통신을 위해 1985년 Bosch사에서 최초로 개발한 기술입니다. 벌써, 30년도 넘은 기술인데 현재도 쓰이는 것을 보면 Bosch사가 대단한 기업이라는 것을 새삼 느낍니다. 본래 목적은 차량 내부 제어를 위해 개발한 통신기술이지만 지금은 산업에서도 많이 쓰이고 있습니다. 특징 기존에 CAN의 최대 전송률은1..
2021.12.19