Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: подскажите хороший tcp/ip стек
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
InsolentS
Здравствуйте! Мне нужно добавить ethernet в мой девайс на AT91SAM7X256, но не знаю какую реализацию стека для этого выбрать. С осями тоже не хочется заморачиваться, по крайней-мере не с FreeRTOS. Мне всего-то надо отправлять с компа на девайс 64-битные посылки. Можно ли реализовать простенький стек самому? Насколько это сложно?
AlexandrY
OpenTCP отлично работает без осей и понятно написан (типа коммерческий раньше был).


Цитата(InsolentS @ Mar 31 2007, 18:51) *
Здравствуйте! Мне нужно добавить ethernet в мой девайс на AT91SAM7X256, но не знаю какую реализацию стека для этого выбрать. С осями тоже не хочется заморачиваться, по крайней-мере не с FreeRTOS. Мне всего-то надо отправлять с компа на девайс 64-битные посылки. Можно ли реализовать простенький стек самому? Насколько это сложно?
InsolentS
Цитата(AlexandrY @ Mar 31 2007, 23:15) *
OpenTCP отлично работает без осей и понятно написан (типа коммерческий раньше был).


Класс!! То что надо!! У вас случайно нету версии под ARM7 для IAR? А то их сайт
(www.opentcp.org) under construction...
zltigo
Цитата(InsolentS @ Mar 31 2007, 21:36) *
А то их сайт
(www.opentcp.org) under construction...

Их сайт:
http://sourceforge.net/projects/opentcp/
или мы о чем-то разном?
InsolentS
Цитата(zltigo @ Apr 1 2007, 01:47) *
Их сайт:
http://sourceforge.net/projects/opentcp/
или мы о чем-то разном?


Спасибо!!

а может быть у кого-нибудь завалялся примерчик OpenTCP, портированный под ИАР?
простите уж меня ламмера...
zltigo
Цитата(InsolentS @ Apr 1 2007, 02:02) *
.. OpenTCP, портированный под ИАР?

Там нечего портировать куда либо - чистый, как слеза 'C'. Скормите компилятору и все.
InsolentS
Цитата(zltigo @ Apr 1 2007, 12:24) *
Там нечего портировать куда либо - чистый, как слеза 'C'. Скормите компилятору и все.


а привязка к конкретному PHY, регистрам?
zltigo
Цитата(InsolentS @ Apr 1 2007, 11:30) *
а привязка к конкретному PHY, регистрам?

Тяжелый случай sad.gif. Полагаете это "ИАР" для IP стека обеспечивает smile.gif??
Нет, это будете писать сами, когда выберите желаемый MAC и PHY, и подключите MAC желаемым способом к желаемому контроллеру.
InsolentS
Цитата(zltigo @ Apr 1 2007, 15:49) *
Тяжелый случай sad.gif. Полагаете это "ИАР" для IP стека обеспечивает smile.gif??
Нет, это будете писать сами, когда выберите желаемый MAC и PHY, и подключите MAC желаемым способом к желаемому контроллеру.

Самому за себя стыдноsad.gif Ладно, буду разбираться. Спасибо большое!! cheers.gif
spf
Есть еще TINET , developed at Tomakomai National College of Technology Department of Computer Science & Engineering, is a compact TCP/IP protocol stack based on the ITRON TCP/IP API specification. Because TINET is based on the FreeBSD code, for usage the TOPPERS license and FreeBSD license conditions needs to be followed.
lebiga
Цитата(InsolentS @ Mar 31 2007, 19:21) *
Здравствуйте! Мне нужно добавить ethernet в мой девайс на AT91SAM7X256, но не знаю какую реализацию стека для этого выбрать. С осями тоже не хочется заморачиваться, по крайней-мере не с FreeRTOS. Мне всего-то надо отправлять с компа на девайс 64-битные посылки. Можно ли реализовать простенький стек самому? Насколько это сложно?


Я переделал микрочиповский стек (PIC18, dsPIC) для АРМа. Подкупили полные исходники всех модулей. Работает устойчиво, правда делал только веб управление, телнет и фтп. Еще подкупил драйвер для микрочиповской же микросхемы 28J60 (SPI-ETHERNET, 5$ в Киеве). Есть драйвера универсальные типа NE2000
Конечно, SAM7X имеет уже МАС, но у меня идут LPC лучше, чем атмел, да и PHY искать не надо. Кому интересно - могу более подробно.
viael
Цитата(lebiga @ May 1 2007, 19:41) *
Я переделал микрочиповский стек (PIC18, dsPIC) для АРМа. Подкупили полные исходники всех модулей. Работает устойчиво, правда делал только веб управление, телнет и фтп. Еще подкупил драйвер для микрочиповской же микросхемы 28J60 (SPI-ETHERNET, 5$ в Киеве). Есть драйвера универсальные типа NE2000
Конечно, SAM7X имеет уже МАС, но у меня идут LPC лучше, чем атмел, да и PHY искать не надо. Кому интересно - могу более подробно.


Мне оооочень интересно.Сам собирался пойти этим путем, да все никак не соберусь.Если порт не "коммерческий секрет" может поделитесь cheers.gif
nebula2@mail.ru
lebiga
Цитата(viael @ May 2 2007, 11:58) *
Мне оооочень интересно.Сам собирался пойти этим путем, да все никак не соберусь.Если порт не "коммерческий секрет" может поделитесь cheers.gif
nebula2@mail.ru

Смотри почту
viael
Цитата(lebiga @ May 2 2007, 13:28) *
Смотри почту

a14.gif
Annuta
и мне можно примерчик ... тоже очень нуно.. Спасибо!
koran2005@mail.ru
zuy
Цитата(lebiga @ May 2 2007, 12:28) *
Смотри почту


Ну если это не секрет, может для всех выложите?
Или на FTP залейте пожалуйста.
lebiga
Цитата(zuy @ May 3 2007, 15:43) *
Ну если это не секрет, может для всех выложите?
Или на FTP залейте пожалуйста.


Выкладываю
Господа, только не обессудьте! Я выкладываю предыдущую рабочую версию моего проекта. Ничего в главном файле c main не удалял. Версия для ИАР, когда-то компилировалась и в Кейле, но там были проблемы с #PRAGMA PACK(1) (еще carm). В новом Кейл МДК этой опции нет, надо везде прописывать __packed.
Главный документ из микрочипа AN833b.pdf

Исходники можно найти на микрочипе. Ищите mstkv220401.zip (пик18) предыд версия, есть RTL8019 драйвер. Но скорее всего это файл на вебе уже нет.

tcpip stack v3.6.zip(пик18) - добавлен драйвер ENC28J60

dsPIC_Stack_v.90.EXE - для dsPIC, интересен более ANSI написанием, добавлены новые функции

Могу выложить на FTP - расскажите как
lebiga
Тут посмотрел стек от uIP - был ошарашен сложностью и заумностью формирования веб страниц - какие-то скрипты в виде букв в каждой строчке - да и преобразование в си файл потом - не понимаю, зачем так сложно. В микрочиповском я пишу веб страницу в обыкнованном веб редакторе - в нем и смотрю. Потом ужимается все хтмл файлы совместно в бин и по фтп (или через гипертерминал по сом) отправляю в атмеловскую флешку AT45 и все! Вообще-то ужатие в бин тоже можно переписать и отправлять чистые исходники, но мне влом было разбираться.

Особенности переменных, выводимых в веб страницу - начинается с %, типа %12 - нттр во время выдачи страницы при получении % заменяет 12 (12h) на переменную, которую я сам определил - или число, или строку. Если в веб странице надо написать % - я заменяю на % - единственное неудобство, да и то это нужно делать в cgi файлах, html идут так. Да вообще-то смотрите примеры - более информативно. Естественно пример вырезан - остальное коммерчески используется.
zltigo
Цитата(lebiga @ May 4 2007, 01:59) *
Выкладываю

Вполне "механический" порт на ARM и так не выдающегося творения Microchip. Сам стек не расматривал, но "драйвер ENC28J60" смотрел пару месяцев назад очень внимательно - произвел неприятное впечатление sad.gif. Стиль написания обсуждать не буду, но практически полное отсутствие обработки нештатных ситуаций "впечатлило" sad.gif. Практически единственное место, где что-то обозначено в этом направлении заканчивается "блестящим" выходом их положения - перезагрузкой!!! контроллера.
А при портировании даже этот фиговый листок был убран sad.gif. При механическом переносе на 32bit платформу не сочли нужным убрать фатальные warnings "Use of address of unaligned structure member" sad.gif Как оно работает???
lebiga
Цитата(zltigo @ May 6 2007, 14:34) *
Вполне "механический" порт на ARM и так не выдающегося творения Microchip. Сам стек не расматривал, но "драйвер ENC28J60" смотрел пару месяцев назад очень внимательно - произвел неприятное впечатление sad.gif. Стиль написания обсуждать не буду, но практически полное отсутствие обработки нештатных ситуаций "впечатлило" sad.gif. Практически единственное место, где что-то обозначено в этом направлении заканчивается "блестящим" выходом их положения - перезагрузкой!!! контроллера.
А при портировании даже этот фиговый листок был убран sad.gif. При механическом переносе на 32bit платформу не сочли нужным убрать фатальные warnings "Use of address of unaligned structure member" sad.gif Как оно работает???


Системы эксплуатируются уже год, рестарта из-за ошибок при приеме заголовков не замечал. Use of address of unaligned structure member - работаем с __packed или #pragma pack - все ок. Ничего не мешает перенести обработку некоторых нештатных ситуаций из других драйверов микрочипа или дописать свое. Для меня главное преимущество этого стека - полные исходники и см. пред. сообщение!
zltigo
Цитата(lebiga @ May 6 2007, 14:15) *
Системы эксплуатируются уже год, рестарта из-за ошибок при приеме заголовков не замечал.

Естественно. Вы даже его выбросили.
Код
    // Validate the data returned from the ENC28J60.  Random data corruption,
    // such as if a single SPI bit error occurs while communicating or a
    // momentary power glitch could cause this to occur in rare circumstances.
    if(header.NextPacketPointer > RXSTOP || ((BYTE_VAL*)(&header.NextPacketPointer))->bits.b0 ||
       header.StatusVector.bits.Zero ||
       header.StatusVector.bits.CRCError ||
       header.StatusVector.bits.ByteCount > 1518 ||
       !header.StatusVector.bits.ReceiveOk)
    {
;//Reset();
    }

Забыли smile.gif

Цитата
Use of address of unaligned structure member - работаем с __packed или #pragma pack - все ок.

Паковка это из "другой оперы".
Цитата
Ничего не мешает перенести обработку некоторых нештатных ситуаций из других драйверов микрочипа или дописать свое.

Не мешает, но Microchip этого не сделал и в документации, между прочим, тоже не посчитал нужным поделиться информацией. Ну те кто это запихивает не глядя куда-то и потом мотивируют "год работает" поступают неправильно.
Я сейчас тоже буду использовать этот контроллер для быстрой модификации устройства, но информацию о поведении и разрешении проблем приходится добывать или эмпирическим путем, либо обильно стелить соломку sad.gif
lebiga
Цитата(zltigo @ May 6 2007, 15:44) *
Не мешает, но Microchip этого не сделал и в документации, между прочим, тоже не посчитал нужным поделиться информацией. Ну те кто это запихивает не глядя куда-то и потом мотивируют "год работает" поступают неправильно.
Я сейчас тоже буду использовать этот контроллер для быстрой модификации устройства, но информацию о поведении и разрешении проблем приходится добывать или эмпирическим путем, либо обильно стелить соломку sad.gif


Только что глянул - у микрочипа вышла новая версия 4.02 от 11 апреля. Обработку ошибок так и не сделали, зато добавили вкусностей - TCPPerformanceTest, UDPPerformanceTest, netbios, telnet намного лучше, dns клиент и т.д. Буду разбираться и что-то апгрейдить в своих проектах.
А о соломке - предлагаю обмен информацией, тем более, что у меня есть кому собирать баги при эксплуатации.
zltigo
Цитата(lebiga @ May 6 2007, 15:04) *
Только что глянул - у микрочипа вышла новая версия 4.02 от 11 апреля.

Странно, но я вижу только V3.6
http://www.microchip.com/stellent/idcplg?I...sUserText=28j60
Цитата
А о соломке - предлагаю обмен информацией, тем более, что у меня есть кому собирать баги при эксплуатации.

Стек меня не интересует в принципе - свой наработан. На баги в эксплуатации я права не имею smile.gif. Ну на счет того что получится на железном уровне для 28J60 - подумаю, возможно выложу.
lebiga
Цитата(zltigo @ May 6 2007, 16:24) *
Странно, но я вижу только V3.6


http://ww1.microchip.com/downloads/en/Devi...tack%204.02.zip

ссылки находятся по поиску документа с ключевым словом TCP
zltigo
Цитата(lebiga @ May 6 2007, 15:04) *
Обработку ошибок так и не сделали,

Ну инициализацию подправили для мягких перезагрузок теперь корректнее, баг в MACGetHeader() c порчей текущего банка при одном из выходов неуклюже залатали. Убрали зависание в MACFlush(). Какая-то совершенно дурацкая заплатка в MACGetArry() для указателя на буфер равного 1. C бодуна похоже sad.gif Добавили кучку установок 0 банка. Выкинули тест памяти (наверное догадались его два раза подряд запустить и насладиться результатом). Передатчик стали тупо (вне зависимости от успешности окончания передачи) сбрасывать перед каждой новой активизации передачи - настораживает!
И очень плохое - похерили несколько буферов передачи - типа нет функции - нет проблем sad.gif
Если это действительно у них такая "борьба с багами" при использовании нескольких буферов, то очень тоскливо sad.gif
Цитата
зато добавили вкусностей....

Лучше-бы "фундамент" не латали, а нормальный сделали: (. Если у них и "вкусности" так написаны, то я лучше на хлебе и воде посижу smile.gif
lebiga
Цитата(zltigo @ May 6 2007, 17:26) *
Ну инициализацию подправили для мягких перезагрузок теперь корректнее, баг в MACGetHeader() c порчей текущего банка при одном из выходов неуклюже залатали. Убрали зависание в MACFlush(). Какая-то совершенно дурацкая заплатка в MACGetArry() для указателя на буфер равного 1. C бодуна похоже sad.gif Добавили кучку установок 0 банка. Выкинули тест памяти (наверное догадались его два раза подряд запустить и насладиться результатом). Передатчик стали тупо (вне зависимости от успешности окончания передачи) сбрасывать перед каждой новой активизации передачи - настораживает!
И очень плохое - похерили несколько буферов передачи - типа нет функции - нет проблем sad.gif
Если это действительно у них такая "борьба с багами" при использовании нескольких буферов, то очень тоскливо sad.gif

Лучше-бы "фундамент" не латали, а нормальный сделали: (. Если у них и "вкусности" так написаны, то я лучше на хлебе и воде посижу smile.gif


Вот поискал - оказывается народ писал драйвера, причем писал сразу под арм

http://www.embeddedrelated.com/groups/lpc2000/show/12049.php
http://hubbard.engr.scu.edu/avr/avrlib/doc...__enc28j60.html
или см файл
zltigo
Цитата(lebiga @ May 6 2007, 17:56) *
Вот поискал - оказывается народ писал драйвера, причем писал сразу под арм

Народ могое что "писал", переписывыал и "выкладывал", только толковое среди всего выкладываемого встречается крайне редко sad.gif. Кто-же хорошее выкладывает smile.gif. Ничего удивительного, если даже производители с именем и деньгами обычно выкладывают более чем сомнительного качества исходники sad.gif. Похоже ниша сэмплописательства плотно оккупирована студентами или в лучшем случае восточными программистами. Поискоим информации по 28j60 занимался очень плотно. Из многих зол Микрочиповский "драйвер" пожалуй наименьшее. Большая часть на нем и базируется.
lebiga
Вот прицепил стек 4.02 микрочипа в свое устройство...
Первое впечатление - работает намного устойчивее 3 версии, http страница от долгого пассивного висения тормозить не начинает. Телнет наворочен слишком, искать пароля и юзера прямо в памяти ENC - долго, а потом освобождать буффер чтением в NULL - плохо(это просто не работает - запись по адресу 0 вызывает abort).

Драйвер ENC28J60 более оптимизирован - приемный буффер и передающие на каждый tcp сокет организованы прямо в памяти ENC. Но это привело к тому, что нужно было уменьшить величину передающих буфферов и уменьшить длину строк в телнете.

Нашел ошибку, скорее из-за компилятора ИАР, в MCC18 проблем нет(8-бит!)

typedef unsigned long DWORD; // 32-bit unsigned

из tcpipconfig.h:
#define MAX_TCP_SOCKETS (8ul)
#define TCP_TX_FIFO_SIZE (200ul)
#define TCP_RX_FIFO_SIZE (200ul)

из tcp.h:
typedef struct _TCB
{
NODE_INFO remote;
WORD_VAL remotePort;
WORD_VAL localPort;

WORD txUnackedTail;
WORD remoteWindow;
DWORD MySEQ;
DWORD RemoteSEQ;
BYTE retryCount;
TICK retryInterval;
SHORT sHoleSize;
WORD wFutureDataSize;
} TCB;
#define RESERVED_TCP_MEMORY ((DWORD)MAX_TCP_SOCKETS*((DWORD) (TCP_TX_FIFO_SIZE+1)+(DWORD)TCP_RX_FIFO_SIZE+(DWORD)sizeof(TCB)))

и в mac.h
// MAC RAM definitions
#define RAMSIZE 8192ul
#define TXSTART ((RAMSIZE-1ul) - (1ul+1514ul+7ul) - RESERVED_TCP_MEMORY)

Буфферы налазили друг на друга, причина - ошибка вычисления RESERVED_TCP_MEMORY, компилятор иар 4.41, устранил так:

#define RESERVED_TCP_MEMORY (MAX_TCP_SOCKETS*( (TCP_TX_FIFO_SIZE+1)+TCP_RX_FIFO_SIZE+sizeof(TCB)))

Вот хочу спросить:
для максимальной надежности в системе с http и telnet управлением - лучше работать с пакетами какой длины - 100-200 байт или 1000 байт? Строка get у меня длинная (много параметров) - до 1000 байт.
Если в http используются 2 фрейма - сколько минимум http (а соответственно и tcp) сокетов нужно открыть, чтобы страницы грузились побыстрее. IE6 вроде открывает не более 4х.
FTP требует 2 tcp сокета для управления и данных - это я уже выяснил экспериментально.
zltigo
Цитата(lebiga @ Aug 27 2007, 21:27) *
#define RESERVED_TCP_MEMORY ((DWORD)MAX_TCP_SOCKETS*((DWORD) (TCP_TX_FIFO_SIZE+1)+(DWORD)TCP_RX_FIFO_SIZE+(DWORD)sizeof(TCB)))

с преобразованиями (DWORD) - дурь однозначная - выбрасываь везде, тем более, что константы UL описаны.
Цитата
для максимальной надежности в системе с http и telnet управлением - лучше работать с пакетами какой длины - 100-200 байт или 1000 байт?

Что такое 'надежнось' и каков канал связи.... Если это то, что я понимаю, то лучше мелкими.
Цитата
.. сокетов нужно открыть, чтобы страницы грузились побыстрее.

Думаю открывайте по минимуму, иначе контролер на облуживании сокетов будет слабейшим звеном.
defunct
Цитата(zltigo @ May 6 2007, 14:44) *
Паковка это из "другой оперы".

Паковка из "той оперы", т.к. заменяет все LDR/STR(W) на эквиваленты LDR/STR( B ) в случае невыровнянных полей.
zltigo
Цитата(defunct @ Aug 27 2007, 22:37) *
Паковка из "той оперы", т.к. заменяет все LDR/STR(W) на эквиваленты LDR/STR( B ) в случае невыровнянных полей.

Ой! "А мужики-то и не знают" smile.gif.
Заменяет, когда может, а гогда Warning? тогда, простите, не смогли заменить, ибо чего предупреждать, если все в порядке. Ну а почему в вышеупомянутом случае работает - это IAR, при обнаружении #pragma pack сразу зарание снимает с себя ответственость, даже если на самом деле все пакуется идеально. Багофича у него такая sad.gif.
defunct
Цитата(zltigo @ Aug 27 2007, 23:06) *
Ой! "А мужики-то и не знают" smile.gif.
Заменяет, когда может, а гогда Warning? тогда, простите, не смогли заменить, ибо чего предупреждать, если все в порядке.

Warning - потому что производительность упадет.
Но с выполнением все действительно в порядке.

У меня была диллема c RFC2198 (хидер нечетной длины!) копировать содержимое блоков на выровненный адрес, обрабатывать и пихать обратно в пакет, либо применить указатель на __packet структуру.
Дык, второе (смотрел по асм листингу - обращения через LDRB/STRB) получилось работает быстрее.

Цитата
Ну а почему в вышеупомянутом случае работает - это IAR.
...
Багофича у него такая .

Работает и с RVCT и с STD251..
Нет багофичи там..


Пример, "С" код:
Код
typedef __packed struct tagTest
{
    U32 x;
} TTST_STRUCT, *PTST_STRUCT;

U8 a[ sizeof( TTST_STRUCT ) + 1 ];

void main(void)
{
    PTST_STRUCT pTstStruct = (PTST_STRUCT)&a[1];

    pTstStruct->x = 11223344;



asm listing:
Код
   164: void main(void)
   165: {
0x00001420  E92D4000  STMDB     R13!,{R14}
0x00001424  E24DD004  SUB       R13,R13,#0x00000004
   166:
   167:         PTST_STRUCT pTstStruct = (PTST_STRUCT)&a[1];
   168:  
0x00001430  E59F4238  LDR       R4,[PC,#0x0238]
   169:         pTstStruct->x = 11223344;
   170:  
0x00001434  E59F3238  LDR       R3,[PC,#0x0238]
0x00001438  E1A00004  MOV       R0,R4
0x0000143C  E5C03000  STRB      R3,[R0]
0x00001440  E1A03423  MOV       R3,R3,LSR #8
0x00001444  E5C03001  STRB      R3,[R0,#0x0001]
0x00001448  E1A03423  MOV       R3,R3,LSR #8
0x0000144C  E5C03002  STRB      R3,[R0,#0x0002]
0x00001450  E1A03423  MOV       R3,R3,LSR #8
0x00001454  E5C03003  STRB      R3,[R0,#0x0003]
zltigo
Цитата(defunct @ Aug 28 2007, 00:59) *
Но с выполнением все действительно в порядке.

Совсем не обязательно.
Цитата
У меня была диллема...

А теперь, пожалуйста, засунте свои изыскания подальше и вернитесь к проблеме, по которой не дав себе ни малейшего труда разобраться, тем не меннее решили "высказаться".

1. Берете выложенные исходники.

2. Находите там строчку, о которй шла речь (она там одна одинешенька во всем проекте с таким Warning) в моем посте:
Цитата
if(header.NextPacketPointer > RXSTOP || ((BYTE_VAL*)(&header.NextPacketPointer))->bits.b0 ||
header.StatusVector.bits.Zero ||
header.StatusVector.bits.CRCError ||
header.StatusVector.bits.ByteCount > 1518 ||
!header.StatusVector.bits.ReceiveOk)
{
;//Reset();
}

На нее IAR ругается.
Цитата
Warning[Pa039]: use of address of unaligned structure member D:\ARM_WORK\TCP_IP_M\ENC28J60.c 650

Теперь жду объяснений ПОЧЕМУ он ругается, если header.NextPacketPointer является первым элементом структуры и не может быть не выровнен вне всякой зависимости от паковки структуры.

3. А в том, как это НЕ ПРАВИЛЬНО работает в случае, если адрес реально не будет выровнен на 4, рекомендую попробовать написать пару строк и ткнуться лбом.
defunct
Цитата(zltigo @ Aug 28 2007, 01:49) *
1. Берете выложенные исходники.

Взял, посмотрел. Три места с таким варнингом.
IP.c
ICMP.c
и тот что Вы привели.

Цитата
Теперь жду объяснений ПОЧЕМУ он ругается

Warning выдается тупо на &header.NextPacketPointer.
IAR вполне справедливо считает, что указатель может быть не выровнeнным. Но он упускает из виду приведение типа к указателю на упакованный union.

Более того выдается такой же Warning, на безобидную конструкцию:
pChar = (char *)&header.NextPacketPointer;

Поэтому все три Warning'а здесь - "левые"

Конструкции ((BYTE_VAL*)(&header.NextPacketPointer))->bits.b0 безопасна где б ни располагался NextPacketPointer.
lebiga
Немного в сторону от полемики...
Для zltigo
Подскажите, как лучше всего обработать эту ситуацию, кроме резета - сбросит ENC и провести опять инициализацию стека или как-то по другому:

if(header.NextPacketPointer > RXSTOP || ((BYTE_VAL*)(&header.NextPacketPointer))->bits.b0 ||
header.StatusVector.bits.Zero ||
header.StatusVector.bits.CRCError ||
header.StatusVector.bits.ByteCount > 1518 ||
!header.StatusVector.bits.ReceiveOk)
{
;//Reset();
}

Да и второй вопрос - программный сброс как лучше делать - "b 0" - или еще нужно запретить прерывания(это для другой задачи)?
zltigo
Цитата(defunct @ Aug 28 2007, 02:58) *
IAR вполне справедливо считает, что указатель может быть не выровнeнным. Но он упускает из виду приведение типа к указателю на упакованный union.

Вот "упускает из виду" это и есть IAR баг, которого, как кто-то утверждал ренее, - "там нет".


Цитата(lebiga @ Aug 28 2007, 08:49) *
Подскажите, как лучше всего обработать эту ситуацию, кроме резета - сбросит ENC и провести опять инициализацию стека или как-то по другому:

Как минимум по разному для разных ситуаций sad.gif а не один 'выход' для всех ). Эти вопросы надо задавать производителю чипа, но после такого "примера работы" совсем бесполезно, похоже.
Пока у себы сделал 'по собственному' разумению и обложил отладочными сообщениями.
CRC Eror просто игнориуется пакет, если конечно не стабильно непрерывно повторяющася ошибка.
Для остальных железных переинициализируется толко железо. Разборки с целостностью софтовых буферов исключены smile.gif (зато добавлен дополнительный контроль за формированием тех-же
header.NextPacketPointer ). Ошибок в логах не встречал.

Цитата
Да и второй вопрос - программный сброс как лучше делать - "b 0" - или еще нужно запретить прерывания(это для другой задачи)?

Есть только один правильный "программый" сброс - через Watchdog, все остальные в той или иной степени вызывают проблемы, например, если инициализация железа улетела, или просто банально во время такого сброса Вы по P0.14 штатно нолик записали - улетите в загрузчик по такому ресету. Провокацию LPC на 'мгновенную' выдачу Reaet сделать легко, принудительно в любой момент нарушив 55-AA.
Dimmy
А вот еще один порт TCP/IP.
h__://www.modtronix.com/product_info.php?cPath=1_36&products_id=196
Есть все исходники + схемы. Постоянно действует форум. Писан, правда, для PIC18 + RTL8019, но адаптировать под ARM не составит труда.
Пользуюсь около года - доволен. Есть HTTP, FTP, PPP(через COM), поддержка DHCP и netBIOS, работа с сокетами.
defunct
Цитата(zltigo @ Aug 28 2007, 09:17) *
Вот "упускает из виду" это и есть IAR баг, которого, как кто-то утверждал ренее, - "там нет".

Ок, забираю свои слова обратно насчет "багофичи", не разобрался в проблеме.
zltigo
Цитата(defunct @ Aug 28 2007, 13:32) *
насчет "багофичи"....

Для общего развития, еще об одной проблеме с взятием невыровненных адресов. Правда, может уже и поправили - не знаю, ибо просто я так не пишу smile.gif.
http://electronix.ru/forum/index.php?showt...=15808&st=0


Цитата(Dimmy @ Aug 28 2007, 13:14) *
Пользуюсь около года - доволен.

Ну то, что работает - понятно, что джентельменский набор фич присутствует, тоже понятно. А чем он лично Вас привлек по сравнениию прочими? В каких условиях используете?
Мне, тут видимо вскоре придется один проект с исходниками заказчику выдавать, так вот свой собственный лелеямый smile.gif стек как-то и жалковато отдавать в чужие руки, да и с точки зрения "компетентных органов", пусть лучше будет из общедоступных источников взят, нежели специально написаннный. Вот и тоже озадачился, какой взять....
Dimmy
Скажем так - особо сравнивать не с чем было, разве что с кривой Rabbit-овской реализацией для контроллеров серии Rabbit 3000 (Rabbitsemiconductor.com + модуль RCM3365). Но для рэббитов изначально диалект языка кривой - некий Dynamic C. А реализацию стека от Modtronix юзаю с фирменным модулем SBC68EC. Устраивает то, что РАБОТАЕТ + есть примеры. Гибкие простые настройки - простыми #define в хидере подключаются/отключаются необходимые модули. Так, в последнем проекте за ненадобностью отключил netBIOS, DHCP, HTTP. Пожалуй и все...
zltigo
Цитата(Dimmy @ Aug 28 2007, 15:29) *
Скажем так...

При самом поверносном рассмотрении упомянутый стек оказался ранее поминаемым микрочиповским. Естествено с какими-то своими нюансами....
lebiga
а вот ребята кинули мне на почту драйвер ENC28J60
для KEIL RTL-TCPNET говорят
я так, глянул по быстрому
может кому нужно
вот отсюда
http://www.keil.com/forum/docs/thread10418.asp
zltigo
Цитата(lebiga @ Aug 28 2007, 21:14) *
а вот ребята кинули мне на почту драйвер ENC28J60

Он просто "никакой" - что-то порезаннное из "родного" микрочиповского с максимально тупо (SPI 1 с FIFO! используется с тупым сканированием после каждого байта, на котором теряется добрая пловина скорости) прикрученным LPC SPI.
Yra
а что никто тут не упомянул про Lw/IP - стек? Я его вроде прикрутил + СS8900 - хелло ворд заработал (скомпильнулся правда на 60 килобайт кода) В чём его особенности по сравнению с остальными? (то что там нет ftp и http я уже понял)
cpl
Цитата(Yra @ Sep 21 2007, 11:38) *
а что никто тут не упомянул про Lw/IP - стек? Я его вроде прикрутил + СS8900 - хелло ворд заработал (скомпильнулся правда на 60 килобайт кода) В чём его особенности по сравнению с остальными? (то что там нет ftp и http я уже понял)

исходниками не поделитесь ?
в свое время пробовал да так и неразобрался что к чему у него привязывается.
MALLOY2
я сейчас узаю lwip 1.2.0 на STR912F, результатми очень доволен, на тесте типа заполняем масив через memset и отпраляет получил на TCP 30.1 mbit/s на UDP до 60 mbit/s, с приемом немного хуже на UDP не измерял, а на TCP 19.8 mbit/s.
etoja
Как на lwip сделать FTP клиента?
Или другими словами: как выглядит С программа в приборе со стеком lwip, чтобы прибор мог активно открыть на удалённом сервере два разных порта одновременно?
MALLOY2
да как все делают, а открыть можно скок угодно портов, все зависит от того скоко у вас памяти и какая нужна производительность, у меня на данный момент работает 2 порта сервера, и 1 порт клиента TCP и 1 UDP порт. Использую метод Callback но кому нравятся сокеты можно и их использовать.

1 порт сервера под telnet может подключатся только 1 клиент. и 1 порт под http может подключатся до 4 клиентов одновременно.
e-yes
LWIP, At91RM9200, GCC 4.1.2. HTTP-клиент. Скорость скачивания файлов - 5.7 Мбайт в секунду.
Интересно, а сколько вообще предел для этого процессора в скорости передачи (интересует траф входящий, с точки зрения железки)?
Yra
Насчёт где достать исходники LwIP: на сайте freertos.org скачиваете архив исходников операционки с примерами. Среди примеров- порт данного стека (и заодно uIP) под эту операционку. Существует также порт LwIP стека под uC/OSII (гдето на sourceforge.net - если надо могу уточнить но в поисковике ищется). Эти файлы и взял за основу когда прикручивал LwIP к uC/OSII.

Кто может дать сравнительный анализ uIP и LwIP по размеру кода и функциональности? Ато сомнения гложут...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.