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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Вышла предварительная версия TN NET TCP/IP stack
yuri_t
сообщение Aug 13 2009, 09:47
Сообщение #1


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

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



TN NET TCP/IP написан для процессоров с размером RAM >= 32 KBytes и с размером FLASH >= 128 KBytes ( NXP © LPC23xx/LPC17XX, Atmel © AT91SAM7X, Luminary Micro © LM3S6xx/LM3S8xx/LM3S9xx, Freescale © MCF5223X и других аналогичных MCU).

TN NET TCP/IP stack базируется на industry-standard BSD TCP/IP stack. В качестве API используются BSD sockets. TN NET TCP/IP stack использует TNKernel ОСРВ для обеспечения действительно мультизадачной и реентерантной работы.

B предварительную версию (0.8) не включены TCP и DHCP протоколы.

www.tnkernel.com
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 13 2009, 13:18
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(yuri_t @ Aug 13 2009, 11:47) *
TN NET TCP/IP stack базируется на industry-standard BSD TCP/IP stack.

О! Т.е. Действительно максимально портировали BSD исходники? Или просто, типа, в приглядку писали?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 13 2009, 13:44
Сообщение #3


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Вышла предварительная версия TN NET TCP/IP stack


Цитата
B предварительную версию (0.8) не включены TCP и DHCP протоколы.


biggrin.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
yuri_t
сообщение Aug 13 2009, 14:50
Сообщение #4


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

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



- по поводу портирования BSD

Идея была использовать BSD stack по максимуму, добавляя/изменяя только те части, которые не помещаются в 32kbyte RAM/128 kbyte ROM.

В частности, весь TCP/UDP/IP/ARP взят с минимальными изменениями из BSD Lite 4.4/OpenBSD/NetBSD. Изменения коснулись тех мест, которые не требуются и/или не помещаются в MCU типа LPCxx (например, не требуется перехода из kernel space в user space и обратно)

BTW, TCP stack будет выложен в ближайшее время.

IMHO, написать stack c нуля (начитавшись разнообразных RFC) конечно можно, но такой продукт, во-первых, будет
ничем не лучше BSD, во-вторых, потребует многолетнего тестирования для выявления всяких obscure bugs. Кстати,
такими проблемами страдают многие коммерческие реализации TCP/IP именно из-за ограниченной для маленьких
компаний возможности тестирования.

С другой стороны, если не устраивать революций в BSD Lite 4.4 TCP/IP, a изменить только незначительные/
второстепенные части, то можно всего за несколько итераций получить надежно работающий stack. Так поступила,
например, компания InterNiche в своем продукте NicheLite (и Microsoft (!) в WinSock2)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 13 2009, 15:18
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(yuri_t @ Aug 13 2009, 16:50) *
IMHO, написать stack c нуля (начитавшись разнообразных RFC) конечно можно, но....

Ну я к этому и не призывал smile.gif.
Цитата
С другой стороны, если не устраивать революций в BSD Lite 4.4 TCP/IP, a....

Вот именно этот путь мне очень привлекателен.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
yuri_t
сообщение Aug 26 2009, 10:36
Сообщение #6


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

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



TN NET обновилась до версии 0.8.3.

TN NET TCP IP/ stack версии 0.8.3 включает TCP/UDP/IP/ICMP/ARP протоколы.

www.tnkernel.com
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 26 2009, 10:56
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(yuri_t @ Aug 26 2009, 12:36) *
TN NET TCP IP/ stack версии 0.8.3 включает TCP/UDP/IP/ICMP/ARP протоколы.

Отлично! Правда я так и не нашел времени вдумчиво посмотреть sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
yuri_t
сообщение Sep 14 2009, 06:00
Сообщение #8


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

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



TN NET TCP/IP stack обновился до версии 0.8.5.

Добавлен пример "Embedded Web server".

TN NET TCP/IP stack версии 0.8.5 представляется достаточно зрелым для использования/тестирования
в реальных проектах.
Go to the top of the page
 
+Quote Post
yuri_t
сообщение Oct 1 2009, 12:24
Сообщение #9


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

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



Вышла версии 0.9 TN NET TCP/IP stack.

Добавлен DHCP client.

Просьба ко всем, кто использует (пробует) TN NET TCP/IP stack - присылайте,
пожалуйста, ваши замечания и предложения на yuri@tnkernel.com.
Go to the top of the page
 
+Quote Post
sim732
сообщение Mar 28 2010, 19:22
Сообщение #10





Группа: Участник
Сообщений: 3
Регистрация: 13-11-09
Пользователь №: 53 607



Цитата(yuri_t @ Oct 1 2009, 14:24) *
Вышла версии 0.9 TN NET TCP/IP stack.

Добавлен DHCP client.

Просьба ко всем, кто использует (пробует) TN NET TCP/IP stack - присылайте,
пожалуйста, ваши замечания и предложения на yuri@tnkernel.com.


Здравствуйте Юрий. Пытаюсь использовать Ваш TCP/IP stack с TN kernel в одном проекте
и столкнулся с такой проблемой. Есть задача, которая с одной стороны работает с клиентом
на host PC по tcp/ip, а сдругой стороны с двумя очередями. Если задача читает сокет, то она
естественно засыпает при отсутствии сообщений от клиента. Но тогда она может прозевать
сообщение из очереди. Есть ли в Вашей реализации стека что-либо такое (типа select), что
может сообщать о событии появления сообщения через сокет до вызова функции s_recv ?

Сообщение отредактировал sim732 - Mar 28 2010, 19:24
Go to the top of the page
 
+Quote Post
sim732
сообщение Mar 30 2010, 20:02
Сообщение #11





Группа: Участник
Сообщений: 3
Регистрация: 13-11-09
Пользователь №: 53 607



Почитал tn-net-sockets.pdf. Оказывается в Вашей реализации сокет можно перевести
в неблокирующий режим. Не очень хорошее решение моей проблемы (напрасно будет тратится
процессорное время), но все же лучше, чем ничего. Использую предоставленную функцию s_ioctl().
Сокет переводиться в неблокирующий режим не хочет. Смотрю исходные тексты и вижу, что
в функции tcp_s_recv() проверка состояния so->so_state на SS_NBIO вообще отсутствует. Т.е. в этой
версии tcp/ip стека(0.9) перевести открытый сокет в неблокирующее состояние нельзя.
Go to the top of the page
 
+Quote Post
yuri_t
сообщение Mar 31 2010, 18:00
Сообщение #12


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

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



Ф-ция 'select' создавалась для классических аппликаций - где нет multithreading и все происходит
внутри одной ф-ции main(). Для малоформатных RTOS типа TNKernel 'select' "тяжеловат", да и в
общем-то и не нужен (IMHO).

В случае TNKernel/TN NET и использовании TCP sockets, task, в которой производится s_recv(), должна
только принимать по s_recv() и не в коем случае не ждать какие-то другие события, очереди etc.
Другие события, очереди etc. дожны ждать ДРУГИЕ task(s).
Результат приема должен посылаться в ДРУГУЮ task (c помощью tn_queue например).
При этом блокирующий прием работает естественным образом, а неблокирующий прием
не нужен вообще (поэтому он и не реализован).
Код
void task_rx_socket_A_func(void * par)
{

   for(;;)
   {
      rc = s_recv(g_s, (unsigned char*)g_rx_buf, RX_BUF_SIZE, 0);
      if(rc < 0) //-- SOCKET_ERROR
      {
      }
      else if(rc == 0) // closed by peer
      {
      }
      else //-- got some data
      {
          //--processing data, obtained by the s_recv(), or send it to another task
      }
    //-----
   }
}
Go to the top of the page
 
+Quote Post
sim732
сообщение Apr 1 2010, 08:39
Сообщение #13





Группа: Участник
Сообщений: 3
Регистрация: 13-11-09
Пользователь №: 53 607



Цитата(yuri_t @ Mar 31 2010, 21:00) *
В случае TNKernel/TN NET и использовании TCP sockets, task, в которой производится s_recv(), должна
только принимать по s_recv() и не в коем случае не ждать какие-то другие события, очереди etc.
Другие события, очереди etc. дожны ждать ДРУГИЕ task(s).
Результат приема должен посылаться в ДРУГУЮ task (c помощью tn_queue например).
При этом блокирующий прием работает естественным образом, а неблокирующий прием
не нужен вообще (поэтому он и не реализован).


Спасибо Юрий за комментарий. Я так и поступил. Хотя и добавил пару строк в
tn_tcp_send.c для того, чтобы было соответствие с документацией.
Код
      if(m)
         break;
      else
      {
        if(so->so_state & SS_NBIO)
        {
           splx(tnet, sm);
           return -EWOULDBLOCK;
        }
        else
        {
           splx(tnet, sm);
           tn_net_wait(&so->so_rcv.sb_sem);
        }
      }

Спасибо еще раз за Вашу работу. Отличная RTOS и стиль написания очень
ясный.
Go to the top of the page
 
+Quote Post
LightElf
сообщение May 25 2010, 09:27
Сообщение #14


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

Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205



Изучаю сорцы. Возникли несколько вопросов:
1) Можно ли вызывать s_send и s_recv одновременно из разных потоков для одного и того же сокета? То есть один поток ждет прихода данных из сокета, а второй - в сокет пишет.
2) Может в силу лености ума не очень понимаю взаимодействие стека с ethernet контроллером. Нет ли какого-нибудь porting guide или это с моей стороны совсем уж наглость smile.gif?
3) Правильно ли я понимаю, что в порте TNKernel под Coldfire прерывания обрабатываются на стеке текущего процесса?
Go to the top of the page
 
+Quote Post
yuri_t
сообщение May 25 2010, 17:59
Сообщение #15


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

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



Цитата(LightElf @ May 25 2010, 12:27) *
Изучаю сорцы. Возникли несколько вопросов:
1) Можно ли вызывать s_send и s_recv одновременно из разных потоков для одного и того же сокета? То есть один поток ждет прихода данных из сокета, а второй - в сокет пишет.


Можно

Цитата
2) Может в силу лености ума не очень понимаю взаимодействие стека с ethernet контроллером. Нет ли какого-нибудь porting guide или это с моей стороны совсем уж наглость smile.gif?


На какой процессор собрались портировать ?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 6th July 2025 - 10:51
Рейтинг@Mail.ru


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