펌웨어/임베디드 소프트웨어 개발, 잘 안 풀릴 때 읽어볼 만한 글
펌웨어 및 임베디드 소프트웨어 개발은 일반 소프트웨어 개발 과정과 만나게 될 이슈의 성향이 다릅니다. 새로 개발된 PCB(Printed Circuit Board) , 사용해보지 못한 Chip 등, 다양한 변수가 존재하기 때문입니다. 또한, 상대적으로 적은 유저가 사용하는 프로그램을 활용하다보면 더더욱 이슈의 원인을 찾기가 어렵죠. 답답할 때, 다시 되돌아보기 위해서 정리해보았습니다. 꼭, 정답은 아니지만 펌웨어/임베디드 소프트웨어 개발 시, 이러한 문제들이 있었으니 참고하셔도 좋을 것 같습니다. PCB 전원 불량 문제 최근에는 하드웨어 개발자들도 기본적으로 전원단을 체크하고, 소프트웨어 개발자에게 넘기기 때문에 이런 일은 거의 없습니다. 그래도 간혹 전원 불량이 생길 수 있는데, MCU에 프로그램 다운로..
2022.06.15
Floating과 Node-Locekd License(플로팅과 노드락 라이선스)
유료 소프트웨어의 경우, 비용을 지불하고 라이센스를 구입하는 것이 일반적입니다. 이 때, 여러 유형의 라이센스가 존재하며, 아래와 같은 종류의 라이센스들이 존재합니다. 플로팅 라이선스(Floating License) 최근에 가장 많이 활용되는 라이선스라고 생각합니다. 사내의 서버 컴퓨터에 라이선스를 등록하고, 유저들이 해당 프로그램을 사용할 때 라이선스를 빌려가는 형태입니다. 개인당 모든 라이선스를 구매하면, 개개인적으로는 불편함이 없지만 금액이 그만큼 부담되어 인기가 많습니다. 하지만, 사용량이 많은 프로그램의 경우 적절한 개수를 체크하여 구매하는 것이 좋습니다. 사용량이 적은 프로그램들은 라이선스 순환이 잘 되지만, 사용량이 많은 프로그램의 경우 개개인들이 업무를 볼 때, 문제가 있을 수 있습니다. ..
2022.06.15
no image
Python PDF 추출 / 분할 / 병합 / 암호화 / 복호화 커맨드 버전
Python으로 PDF 추출, 분할, 병합, 암호화, 복호화 커맨드 버전의 예제 코드입니다. 각 기능은 다음과 같습니다. - 추출 : 특정 페이지만 추출 - 분할 : 특정 페이지마다 분리 - 병합 : 여러 PDF 파일 합치기 - 암호화/복호화 : PDF 파일 암호 설정 및 해제 참고로, PDF 추출/분할/병합은 PyPDF2 라이브러리 위주로 동작하고 PDF 암호화/복호화는 pikepdf 라이브러리 위주로 동작합니다. PyPDF2도 암호화가 가능하긴 한데 생각보다 원하는대로 동작하지 않았습니다. 그래서 부득이하게 암호화 및 복호화는 pikepdf 라이브러리 위주로 동작하게끔 구성했습니다. 전체코드 import os from glob import glob from PyPDF2 import PdfFileRea..
2022.04.04
no image
Github Repository 생성, 삭제 Sourcetree 연동, 클론&푸쉬, 커밋 예제
Github에서 Repository를 생성 및 삭제하는 방법과 생성한 Repository를 Sourctree에서 연동 및 클론한 후 커밋하는 방법을 설명드리겠습니다. 순서는 Github Repository 생성 Sourcetree 연동 Sourcetree 클론 Sourcetree 커밋&푸쉬 Github Repository 삭제 순으로 진행하겠습니다. Github Repository 생성 먼저, Github에서 Repository를 생성 및 삭제해보겠습니다. Github에서 로그인 하시면, 좌측 상단에 아래와 같은 화면이 보일텐데, New 버튼을 클릭합니다. 이제 아래와 같은 화면 보일겁니다. 상단 그리고 좌측 순으로 하나씩 설명드리겠습니다. # Owner Owner는 특별한 경우가 아니라면, 자신의 아이..
2022.04.04
no image
포트(Port) 상세 내용과 MAC / IP / Port 주소가 포함된 헤더 위치
지난 번에, 물리와 논리 포트 개념을 구분해서 설명했습니다. # 물리/논리 포트 설명 링크 물리/논리 포트(Port) 개념 이번에는 MAC, IP, Port 주소가 포함된 헤더 위치와 Port에 대해 조금 더 상세한 내용을 설명하겠습니다. MAC / IP / Port 주소 헤더 위치 MAC, IP, Port 주소가 포함된 헤더 위치는 위의 그림과 같습니다. 각 헤더에 다른 내용들도 포함되어 있지만, 주소 위주로만 정리했으니 참고하시기 바랍니다. MAC 주소는 Ethernet 헤더에 위치해 있고 IP 주소는 IP 헤더에 위치해 있으며, Port 주소는 TCP 또는 UDP 헤더에 위치하고 있습니다. 이 내용을 통해, 주소들을 계층별로 구분한 것을 유추할 수 있네요. Socket Address(소켓 주소) 어..
2022.04.04
TCP Keepalive 개념과 주요 설정값
TCP는 연결지향형 프로토콜입니다. 그리고 연결의 개념을 위해 TCP 서버와 클라이언트로 구분합니다. TCP에는 Keepalive라는 개념을 도입하여, 연결이라는 개념을 보완시켜줍니다. 그리고 Keepalive 개념에는 타이머, 인터벌, 프로브의 개념도 도입되는데 지금부터 정리해보겠습니다. Keepalive 타이머 TCP 연결이 설정된 이후에 정상적인 상황이라면, FIN 메시지를 송수신 했을 때, 연결이 해제됩니다. 하지만, 전원이 차단되거나 오류에 의해 오동작을 하면 하나의 단말만 연결이 유지되는 상태가 되며 이를 Half Open Connection 이라고 합니다. 이런 현상을 막기 위해 Keepalive라는 타이머가 있습니다. Keepalive의 매커니즘은 다음과 같습니다. 패킷을 수실할 때마다 재..
2022.04.04
TCP Out-of-order(OOO)와 Out-of-band(OOB)
TCP에서 Out-of-order와 Out-of-band라는 용어를 접할 수 있습니다. 간혹 같은 기능인데 용어가 다른 경우가 있어서 이 용어들도 같은 의미로 생각했지만, 실제로 조사해보니 다른 내용이었습니다. 각 용어에 대한 정리를 해보겠습니다. Out-of-order(OOO) TCP 세그먼트가 송신된 순서와 다르게 비순차적으로 수신되는 현상입니다. 어떠한 기능은 아니고, 위에서 설명한 것처럼 하나의 현상으로 생각하시면 됩니다. 복잡한 네트워크망에서는 End-to-End 간의 데이터 교환 시, 경로가 여러 개가 생기거나 각 프로토콜의 알고리즘 및 기능에 의해 비순차적으로 데이터가 전송될 수 있습니다. Out-of-band(OOB) TCP에서 긴급한 데이터는 다른 데이터들과 달리 전용 버퍼를 가지고 있는..
2022.04.04
lwIP 개요(링크)
lwIP의 전반적인 내용을 정리할까 하다가 매우 정리가 잘 된 블로그가 있어서 링크로 남겨둡니다. 중요하게 생각하는 내용들을 핵심부분만 매우 잘 정리되어 있네요. https://rudalskim.tistory.com/335?category=954796 [STM32F746G-DISCO] lwIP 살펴보기 STM32CubeIDE에서 Ethernet을 사용할 경우 LwIP(Lightweight IP) 라이브러리가 사용됩니다. LwIP(Lightweight IP)는 임베디드 시스템에서 널리 사용되는 오픈 소스 TCP/IP 스택으로 스웨덴 컴퓨터 과학 연구소 (Sw.. rudalskim.tistory.com
2022.03.24
lwIP 최대 버퍼 사용량 계산과 관련 있는 요소들
lwIP 라이브러리가 이론상 최대로 사용하는 메모리를 계산하는 방식이 있습니다. 이론적으로 그리고 간접적으로 계산하는 것이기 때문에 실제로 들어맞는 것은 아닐겁니다. CPU 처리속도, 발열, lwIP 외의 로직 등 MCU에 영향 주는 것이 많기 때문입니다. 실제로 활용할 뻔 했으나, 개인적인 사정으로 활용하지 않았지만 정리하기 위해 내용을 남겨둡니다. 피크 버퍼 사용량 계산 lwIP가 소비하는 최대 힙 메모리 는 lwIP가 소비하는 이론상 최대 메모리 입니다. 일반적으로 lwIP가 사용하는 최대 힙 메모리는 다음에 따라 다릅니다. UDP 연결을 생성하는 데 필요한 메모리: lwip_udp_conn TCP 연결을 생성하는 데 필요한 메모리: lwip_tcp_conn 애플리케이션에 있는 UDP 연결 수: l..
2022.03.24