yuri_t 0 13 августа, 2009 Опубликовано 13 августа, 2009 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 13 августа, 2009 Опубликовано 13 августа, 2009 · Жалоба TN NET TCP/IP stack базируется на industry-standard BSD TCP/IP stack. О! Т.е. Действительно максимально портировали BSD исходники? Или просто, типа, в приглядку писали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 13 августа, 2009 Опубликовано 13 августа, 2009 · Жалоба Вышла предварительная версия TN NET TCP/IP stack B предварительную версию (0.8) не включены TCP и DHCP протоколы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuri_t 0 13 августа, 2009 Опубликовано 13 августа, 2009 · Жалоба - по поводу портирования 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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 13 августа, 2009 Опубликовано 13 августа, 2009 · Жалоба IMHO, написать stack c нуля (начитавшись разнообразных RFC) конечно можно, но.... Ну я к этому и не призывал :). С другой стороны, если не устраивать революций в BSD Lite 4.4 TCP/IP, a.... Вот именно этот путь мне очень привлекателен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuri_t 0 26 августа, 2009 Опубликовано 26 августа, 2009 · Жалоба TN NET обновилась до версии 0.8.3. TN NET TCP IP/ stack версии 0.8.3 включает TCP/UDP/IP/ICMP/ARP протоколы. www.tnkernel.com Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 26 августа, 2009 Опубликовано 26 августа, 2009 · Жалоба TN NET TCP IP/ stack версии 0.8.3 включает TCP/UDP/IP/ICMP/ARP протоколы. Отлично! Правда я так и не нашел времени вдумчиво посмотреть :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuri_t 0 14 сентября, 2009 Опубликовано 14 сентября, 2009 · Жалоба TN NET TCP/IP stack обновился до версии 0.8.5. Добавлен пример "Embedded Web server". TN NET TCP/IP stack версии 0.8.5 представляется достаточно зрелым для использования/тестирования в реальных проектах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuri_t 0 1 октября, 2009 Опубликовано 1 октября, 2009 · Жалоба Вышла версии 0.9 TN NET TCP/IP stack. Добавлен DHCP client. Просьба ко всем, кто использует (пробует) TN NET TCP/IP stack - присылайте, пожалуйста, ваши замечания и предложения на [email protected]. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sim732 0 28 марта, 2010 Опубликовано 28 марта, 2010 (изменено) · Жалоба Вышла версии 0.9 TN NET TCP/IP stack. Добавлен DHCP client. Просьба ко всем, кто использует (пробует) TN NET TCP/IP stack - присылайте, пожалуйста, ваши замечания и предложения на [email protected]. Здравствуйте Юрий. Пытаюсь использовать Ваш TCP/IP stack с TN kernel в одном проекте и столкнулся с такой проблемой. Есть задача, которая с одной стороны работает с клиентом на host PC по tcp/ip, а сдругой стороны с двумя очередями. Если задача читает сокет, то она естественно засыпает при отсутствии сообщений от клиента. Но тогда она может прозевать сообщение из очереди. Есть ли в Вашей реализации стека что-либо такое (типа select), что может сообщать о событии появления сообщения через сокет до вызова функции s_recv ? Изменено 28 марта, 2010 пользователем sim732 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sim732 0 30 марта, 2010 Опубликовано 30 марта, 2010 · Жалоба Почитал tn-net-sockets.pdf. Оказывается в Вашей реализации сокет можно перевести в неблокирующий режим. Не очень хорошее решение моей проблемы (напрасно будет тратится процессорное время), но все же лучше, чем ничего. Использую предоставленную функцию s_ioctl(). Сокет переводиться в неблокирующий режим не хочет. Смотрю исходные тексты и вижу, что в функции tcp_s_recv() проверка состояния so->so_state на SS_NBIO вообще отсутствует. Т.е. в этой версии tcp/ip стека(0.9) перевести открытый сокет в неблокирующее состояние нельзя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuri_t 0 31 марта, 2010 Опубликовано 31 марта, 2010 · Жалоба Ф-ция '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 } //----- } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sim732 0 1 апреля, 2010 Опубликовано 1 апреля, 2010 · Жалоба В случае 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 и стиль написания очень ясный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LightElf 0 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба Изучаю сорцы. Возникли несколько вопросов: 1) Можно ли вызывать s_send и s_recv одновременно из разных потоков для одного и того же сокета? То есть один поток ждет прихода данных из сокета, а второй - в сокет пишет. 2) Может в силу лености ума не очень понимаю взаимодействие стека с ethernet контроллером. Нет ли какого-нибудь porting guide или это с моей стороны совсем уж наглость :)? 3) Правильно ли я понимаю, что в порте TNKernel под Coldfire прерывания обрабатываются на стеке текущего процесса? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yuri_t 0 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба Изучаю сорцы. Возникли несколько вопросов: 1) Можно ли вызывать s_send и s_recv одновременно из разных потоков для одного и того же сокета? То есть один поток ждет прихода данных из сокета, а второй - в сокет пишет. Можно 2) Может в силу лености ума не очень понимаю взаимодействие стека с ethernet контроллером. Нет ли какого-нибудь porting guide или это с моей стороны совсем уж наглость :)? На какой процессор собрались портировать ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться