Jump to content

    
Sign in to follow this  
porty

Проблема переполнения буфера приёма у LPC1786 ...

Recommended Posts

Добрый день.

Разрабатываем устройство собирающее данные в режиме реального времени непрерывно и выдающее по TCP в локалку поток (хитрый Ethernet - ADC 500kHz).

Для этого используем LPC1786, поначалу нам казалось что у него достаточно памяти для буферов ethernet, окна TCP, и фифо буфера данных АЦП.

Но возникла проблема что когда данное устройство работает в крупных сетях и на него начинают приходить слишком много широковещательных пакетов то буфер приёма переполняется и часть пакетов теряется что приводит к сбоям по TCP - входящий поток управления подвисает на 200-500мс пока не произойдет перепосылка потерянного блока, что критично. После разбора логов было выяснено что большинство широковещательных пакетов это ARP запросы на определение IP адреса. Т.к. устройство работает только в режиме одного соединения с одним сервером - то возникла идея

игнорировать все приходящие ARP пакеты и любые другие не IP пакеты и обрабатывать только IP если соединение уже установлено и так делать до дисконекта.

 

Но не понятно - будет ли нормально работать такой режим когда при установленном соединении игнорируются все не IP пакеты?

И как ещё можно бороться с переполнением буфера приёма для устройств с малым объёмом ОЗУ (64кбайта)?

Share this post


Link to post
Share on other sites

А вам широковещательные пакеты вообще нужны? Поставьте в EMAC фильтр на multicast и broadcast.

С переполнением буфера можно бороться, увеличивая этот буфер. :) Увеличьте количество буферов в DMA на приём. Если памяти не хватает, то уменьшите их размер, но увеличьте количество.

Share this post


Link to post
Share on other sites
А вам широковещательные пакеты вообще нужны? Поставьте в EMAC фильтр на multicast и broadcast.

С переполнением буфера можно бороться, увеличивая этот буфер. :) Увеличьте количество буферов в DMA на приём. Если памяти не хватает, то уменьшите их размер, но увеличьте количество.

Уже увеличен, пропускать широковещательные пакеты тоже умею,

мне нужно знать - повлияет ли это на логику работы TCP стека, не будет ли ошибки в таком случае, например в случаях обрыва соединения или зависания и тд?

Интересно то разрешена ли такая уловка согласно стандартам ARP, IP, TCP?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this