реклама на сайте
подробности

 
 
> Приемные буферы в LwIP 1.3 для LPC2387
Hz!
сообщение Oct 2 2008, 09:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 5-05-06
Из: Минск
Пользователь №: 16 792



Адаптирую сабжевый стек для работы под uCOS на LPC2387. Проблем с прикручиванием к оси не возникло т.к. примеров хватает. А вот с MAC уровнем сложнее. Нашел проект LwIPWeb, но там прием осуществляется простым копированием данных из Ethernet ram в обычную. В стеке есть возможность использовать POOLы, но нету возможности расположить PBUF_POOL в области Ethernet ram не помещая туда все остальные его части. Второй вариант – использовать при выделении памяти под pbuf опцию PBUF_REF, когда высвобождается память только под саму структуру, а буферы и указатели не них делать самому, но тут возникает куча вопросов по поводу того, как долго выделенные буферы будут использоваться стеком и не приведет ли такой подход к забиванию буфера.
Есть третий вариант, это использование пересылки по DMA из Ethernet ram в обычную, это лучше, чем простое копирование, но я склоняюсь к варианту №2, как к более «правильному».
Если кто-то делал по-другому, подскажите.

Сообщение отредактировал Hz! - Oct 2 2008, 09:23
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Hz!
сообщение Oct 3 2008, 07:39
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 5-05-06
Из: Минск
Пользователь №: 16 792



Тогда план такой: в стеке резервирую пулы для приема в количестве больше, чем RxDescriptorNumber. При инициализации EMAC выделяю необходимое количество pbuf-ов (== RxDescriptorNumber), настраиваю дескрипторы и жду прихода пакета. Входящий пакет записываю в буферы, потом их склеиваю в один через указатели в структуре pbuf. Выделяю новые буферы и прописываю их адреса в дескрипторах, а принятый пакет передаю в стек. Когда он обработан и становится ненужным, он освобождается стеком, таким образом, восполняется количество свободных pool-ов.
Покритикуйте, пожалуйста, такой подход.
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 3 2008, 10:54
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Hz! @ Oct 3 2008, 11:39) *
Тогда план такой: в стеке резервирую пулы для приема в количестве больше, чем RxDescriptorNumber. При инициализации EMAC выделяю необходимое количество pbuf-ов (== RxDescriptorNumber), настраиваю дескрипторы и жду прихода пакета. Входящий пакет записываю в буферы, потом их склеиваю в один через указатели в структуре pbuf. Выделяю новые буферы и прописываю их адреса в дескрипторах, а принятый пакет передаю в стек. Когда он обработан и становится ненужным, он освобождается стеком, таким образом, восполняется количество свободных pool-ов.
Покритикуйте, пожалуйста, такой подход.

Я, собственно, так и делал, когда писал драйвер для Freescale MCF52233. Прикладываю его к этому посту. Отлажено и работает. Может быть, будет интересно взглянуть.
Прикрепленные файлы
Прикрепленный файл  mcf5223xif.txt ( 15.3 килобайт ) Кол-во скачиваний: 141
 
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 16:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016