DevBJ 기술과 일상을 기록하는 DevBJ 노트
실무기술취미유틸리티생각

태그: Embedded Network

Embedded Network 태그가 포함된 글 15개

2026-07-01 lwIP에서 UDP broadcast가 안 나간다: SO_BROADCAST와 netif flags를 같이 보자 lwIP에서 UDP broadcast 송신이 timeout처럼 보이거나 패킷이 캡처되지 않으면 payload보다 SO_BROADCAST 또는 SOF_BROADCAST, NETIF_FLAG_BROADCAST, netif up/link, source IP, route를 먼저 확인해야 한다. RAW API, netconn/socket API, multi-netif 환경의 확인 순서를 정리한다. 2026-06-29 lwIP에서 tcp_write()가 ERR_MEM을 돌려준다: free RAM보다 snd_buf와 snd_queuelen을 먼저 보자 lwIP RAW TCP에서 tcp_write()가 간헐적으로 ERR_MEM을 반환하면 free RAM보다 TCP_SND_BUF, TCP_SND_QUEUELEN, MEMP_NUM_TCP_SEG, unsent/unacked 큐를 먼저 확인해야 한다. 작은 write 반복, ACK 지연, sent callback 없는 busy loop가 송신 큐를 막는 패턴을 정리한다. 2026-06-26 lwIP에서 송신이 가끔 멈춘다: linkoutput에서 TX descriptor와 pbuf 수명을 같이 보자 lwIP 포팅에서 수신은 되는데 송신이 부하 중 멈추거나 linkoutput이 실패하면 TX descriptor 회수, pbuf chain 처리, zero-copy pbuf lifetime을 같이 봐야 한다. 복사 기반 송신과 DMA zero-copy 송신에서 ownership 기준이 어떻게 달라지는지 정리한다. 2026-06-25 lwIP에서 RX pbuf를 넘긴 뒤 가끔 깨진다: tcpip_input ownership을 먼저 정리하자 lwIP 포팅에서 RX 패킷을 tcpip_input()으로 넘긴 뒤 간헐적인 payload 깨짐, double free, PBUF_POOL 고갈이 보이면 pbuf ownership 규칙을 먼저 확인해야 한다. ERR_OK와 실패 반환값, DMA 버퍼 재사용, ISR 컨텍스트, 예외 경로별 pbuf_free 기준을 정리한다. 2026-06-24 lwIP에서 UDP send가 ERR_RTE로 실패한다: payload보다 netif 상태와 route를 먼저 보자 lwIP에서 udp_sendto() 또는 socket sendto()가 ERR_RTE로 실패하면 UDP payload나 ARP보다 먼저 보낼 netif를 찾았는지 확인해야 한다. DHCP 완료 전 송신, default netif 누락, netif up/link 상태 불일치, IP 주소 미설정 같은 route 판단 지점을 bring-up 관점에서 정리한다. 2026-06-18 lwIP에서 ping은 되는데 TCP나 UDP만 이상하다: checksum offload를 반만 켜면 증상이 더 헷갈린다 lwIP 포팅에서 ICMP는 되는데 TCP나 UDP만 깨지거나, 송신만 실패하고 수신은 정상처럼 보이면 checksum offload 설정 불일치를 먼저 확인해야 한다. lwIP 옵션과 MAC 드라이버가 같은 책임 분담을 보지 않으면 패킷은 나가도 상대가 조용히 버릴 수 있다. 2026-06-17 lwIP RAW UDP callback 뒤에 수신이 멈춘다: pbuf_free를 놓치면 PBUF_POOL이 먼저 마른다 lwIP에서 UDP는 처음엔 잘 되는데 몇 분 뒤부터 recv callback이 끊기거나 pbuf_alloc 실패가 보이면, 드라이버보다 먼저 RAW UDP callback에서 pbuf_free를 빠뜨린 경로를 확인해야 한다. 작은 누수 하나가 PBUF_POOL 고갈로 이어져 전체 RX 경로를 막을 수 있다. 2026-06-17 lwIP TCP 버퍼 설정 읽는 법: TCP_SND_BUF, TCP_WND, MEM_SIZE, MEMP_NUM_TCP_SEG, PBUF_POOL_SIZE lwIP의 TCP_SND_BUF, TCP_WND, MEM_SIZE, MEMP_NUM_TCP_SEG, PBUF_POOL_SIZE가 각각 어떤 병목을 만들고 어떤 메모리 예산과 연결되는지 일반화된 예시로 정리한다. 2026-06-16 lwIP에서 RX는 되는데 payload가 가끔 깨진다: DMA 버퍼와 D-Cache 순서를 같이 봐야 한다 lwIP 포팅에서 링크는 정상이고 인터럽트도 도는데 UDP payload나 ARP 내용이 가끔 깨져 보이면, pbuf보다 먼저 DMA 버퍼와 CPU D-Cache 일관성을 확인해야 한다. RX 전 invalidate, TX 후 clean 순서가 어긋나면 랜덤 패킷 손상처럼 보이는 증상이 반복된다. 2026-06-15 lwIP에서 tcpip_thread 안에서 다시 기다리면 멈춘다: callback 안의 netconn/sockets 호출이 self-deadlock이 되는 이유 lwIP에서 tcpip_callback, netif callback, 내부 이벤트 훅 안에서 netconn 또는 sockets API를 다시 호출하면 부하가 낮을 때는 지나가도 어느 순간 전체 네트워크가 멈출 수 있다. 같은 tcpip_thread가 자기 자신에게 일을 보내고 완료를 기다리는 self-deadlock 패턴이라, 호출 컨텍스트를 분리해 두는 편이 안전하다. 2026-06-10 lwIP에서 UDP 길이가 가끔 잘못 읽힌다: pbuf 체인에서는 len 말고 tot_len을 봐야 한다 lwIP에서 UDP 수신 데이터가 가끔 중간에서 잘리거나 길이가 들쭉날쭉해 보이면 드라이버보다 먼저 pbuf 체인 처리 코드를 확인해야 한다. 첫 pbuf의 len만 보고 전체 길이로 오해하면 큰 프레임, 정렬 차이, pool 분할 상황에서 재현이 애매한 버그가 생긴다. 2026-06-10 lwIP에서 링크 복구 후 UDP가 한동안 죽어 보인다: ARP 캐시와 netif 상태를 같이 보자 lwIP에서 케이블 재삽입이나 스위치 복구 뒤 링크는 살아 있는데 UDP 송신이 한동안 안 나가거나 첫 패킷만 사라지는 경우가 있다. DHCP보다 아래층인 ARP 캐시와 netif 상태 전환이 어긋나면 생기는 전형적인 증상이라, link up/down 로그와 ARP 해상도 흐름을 같이 보는 편이 빠르다. 2026-06-04 lwIP에서 링크는 붙었는데 DHCP가 안 돈다: netif_set_up() / netif_set_link_up() 순서를 같이 보자 PHY 링크는 올라왔고 RX/TX 카운터도 움직이는데 lwIP DHCP가 시작되지 않거나 재연결 뒤에 IP를 다시 못 받는 경우가 있다. 대부분은 netif_set_up(), netif_set_link_up(), dhcp_start() 호출 순서와 상태 전환 타이밍 문제다. bring-up 관점에서 자주 틀리는 포인트를 정리한다. 2026-05-28 lwIP 타이머가 안 돈다: NO_SYS에서 sys_check_timeouts() 빠지면 생기는 증상 lwIP를 bare-metal(NO_SYS)로 붙였는데 DHCP/ARP/TCP가 '가끔' 이상해지는 경우가 있다. 원인은 타이머 처리 루프를 안 돌린 경우가 많다. sys_check_timeouts()를 어디서/얼마나 자주 돌려야 하는지, 그리고 빠졌을 때 나타나는 전형적인 증상을 현장 관점에서 정리한다. 2026-05-24 lwIP pbuf가 가끔 터진다: PBUF_REF/POOL/RAM 수명주기와 zero-copy 함정 lwIP에서 네트워크가 '가끔만' 죽는 이슈는 pbuf 수명주기 문제인 경우가 많다. 특히 PBUF_REF/zero-copy를 섞으면 버퍼 재사용 타이밍이 한 번만 어긋나도 랜덤 크래시가 난다. pbuf 타입별 수명주기와 실무에서 자주 터지는 함정을 짧게 정리한다.

© 2026 DevBJ (devbj.com)

기술과 일상을 기록하는 DevBJ 노트 / 글 Vullean

실무기술취미유틸리티생각
홈 About RSS

DevBJ은 임베디드 문제 해결과 개발 기술, 브라우저 유틸리티, 영화와 만화 감상, 운동을 배우며 얻은 팁을 기록합니다. 글의 내용은 개인의 경험과 작성 시점에 확인한 자료를 바탕으로 정리합니다.

이 사이트는 직접 만든 Python 정적 사이트 생성기로 빌드하고 GitHub Pages에서 운영합니다. 콘텐츠 구조와 빌드, 배포 환경을 직접 관리하며 그 과정에서 익힌 기술도 기록합니다.

도구와 표준, 소프트웨어 버전은 바뀔 수 있으므로 실제 적용 전에는 프로젝트 환경과 최신 공식 문서를 확인하세요.