stm32f407vg + freeRTOS 조합에서 lwip을 사용하고 있는데
TCP Send에 문제가 있는 걸 발견했어!
왠지 모르게 조금 늦게 패킷이 나가더라구.
작은 패킷은 상관없는데
약간 큰 패킷(그래봐야 1024bytes)은 바로 나갈 때도 있고 딜레이가 생길 때도 있고 하더라구.
한.. 0.5초에 한번쯤 나가는 느낌?
해결하려고 신나게 뻘짓을 했지.
TCP Thread 스택 크기가 작아서 그런가?
하고 TCP_THREAD_STACKSIZE도 4096 Word(16k)까지 늘려봐도 안되고~
혹시 Segment 때문에 그런가 싶어서 536 bytes -> 1460 bytes(최대값)으로도 변경하고
Sender buffer도 이빠이 늘려보고~
Queue length도 늘리고~
해봐도 증상에 변함이 없더라고...
인터넷에 검색을 좀 해보니까
nagle 알고리즘(여러개의 쪼개진 패킷을 한번에 묶어서 보내는 거)때문에 그럴수도 있다고 그래서
TCP_NODELAY도 넣어봤는데 이것도 마찬가지..
안돼!!!!!
소켓을 non blocking으로 변경해보라고도 해서 이것도 해봤어!
안돼!
정말 TCP heap 늘리는 거 말고 할 수 있는 건 다 해봤어!!
다 안돼!
개 짜증!!!!
응?
응응?
... 늘려볼까?
Default값은 1600 bytes 👇 인데 이걸 4096 bytes로 늘렸더니..
겁나 잘 동작하더라고;;;
TCP send할 때 heap에다가 복사해서 쓰나봐 ㅎㅎㅎ
확실하게 알려고 설명을 한번 읽어봤는데 데이터 많이 보낼거면 힙 사이즈 커야 한다고 나와 있네;;;
에휴... 맨날 위즈네트 칩만 쓰다가 LWIP에 너무 소홀했나봐 ㅠㅠ
결론!!
lwip 쓸떼 뭔가 Send 하는데 시간이 오래 걸린다면 Heap 부터 늘려보자!
👋👋👋
'임베디드 소프트웨어 > FreeRTOS' 카테고리의 다른 글
FreeRTOS + Lwip socket 갯수 조정 (1) | 2023.08.01 |
---|---|
vApplicationStackOverflowHook() (1) | 2023.02.18 |
STM32 MCU를 또 만지네... (0) | 2023.02.18 |