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

 
 
> AVR32+FreeRTOS+lwip(UDP)
Pasa
сообщение Oct 27 2011, 01:33
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



AVR32+FreeRTOS+lwip(UDP). За основу взят пример BasicWEB из фреймворка - инициализации стека. После запускаю поток .

CODE
Просто читаю пакеты с порта:

{
struct netconn *conn;
struct netbuf *buf;
char *data;
int len;

conn = netconn_new( NETCONN_UDP );

//netconn_bind(conn, NULL, 5001);
netconn_bind(conn, IP_ADDR_ANY, 5001);


for( ;; )
{

buf = netbuf_new();
data =netbuf_alloc(buf, 200);

if( (buf = netconn_recv(conn)) != NULL )
{
len=0;
netbuf_data(buf,&data,&len);
....печать на консоль len=........
}


netbuf_delete(buf); // De-allocate packet buffer

vTaskDelay( 20 );
}

}

Пакеты шлю своей прогой или снифером. Размер данных - 7 байт. Размер всего UDP-пакета 49 байт.
Принимается только 2 пакета. После этого зависает на netconn_recv().
После вызова netbuf_data(buf,&data,&len) значени len = 458752 !!!!! 05.gif


Где я неправ? Подскажите где копать.
Заранее всем благодарен за помощь.

Сообщение отредактировал IgorKossak - Oct 27 2011, 07:56
Причина редактирования: [codebox]
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Pasa
сообщение Oct 27 2011, 12:41
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



Если я правильно понял, то в lwip есть три уровня использования API: RAW(самый нижний), NETCONN(надстройка над RAW), SOCKET(надстройка над NETCONN).
По быстрому посмотрел пример TFTP (реализован через socket API)- в конце концов все в результате сводится к вызову все тех же netconn-функций, собственно что логично
вытекает из выше сказанного. Конечно - есть свои нюансы. Но суть не меняется.
Пример web сервера я попробовал – все работает. Но мне надо udp. Думал, что с наскоку
по примерам запущу udp-эхо через netconn-API … да не тут-то было. Придется делать
”более глубокое погружение”. Само собой попробую и TCP и SOCKET-API.
Но ведь, по идее, должны исправно работать все уровни. Опять же и примеры есть (ссылка в 3 посту)
Что же , пойду учить матчасть….


Цитата(aba @ Oct 27 2011, 13:34) *
В Вашем коде вы создаёте соединение, а в UDP соединения как такового нет.
Посмотрите пример TFTP. В этом примере используется UDP и никаких "netconn..." функций нету, есть только биндинг сокета на порт и приём.


Так вроде и я никаких соединений не создаю... Собственно весь алгоритм сводится к:

conn = netconn_new( NETCONN_UDP );
netconn_bind(conn, IP_ADDR_ANY, 5001);
for(;;)
{
netconn_recv(conn);
}

В примере TFTP все примерно так же:

socket() (сводится к netconn_new())
bind() (сводится к netconn_bind())

Может я что упустил важное.....тогда тыкните меня носом, только спасибо скажу...честно.... sm.gif


Заранее благодарен тем, кто поможет дельным советом разрулить ситуацию.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:03
Рейтинг@Mail.ru


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