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

 
 
9 страниц V  « < 6 7 8 9 >  
Reply to this topicStart new topic
> Самый быстрый и самый маленький TCP-стек., По просьбам трудящихся.
Rst7
сообщение Jul 30 2011, 18:34
Сообщение #106


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

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



QUOTE
Надо сказать, что QNAP все исходники выложил, и техподдержка нормальноая - если что, можно и их попинать.


Как Вам там хотели? "Покрутить лицо ногами"? Я думаю, самое оно именно так "попинать" sm.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 31 2011, 09:24
Сообщение #107


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Rst7 @ Jul 31 2011, 00:34) *
Допилил свой стек до Release.
В THUMB показывает в среднем на нескольких прогонах 10000 кбит/сек. Интересно, на сколько производительней кортекс, и конкретно STM32 по сравнению с ARM7 и конкретно AT91SAM7.

Сразу предупреждаю, что не хочу открывать вторую линию фронта по поводу атмелов, стм-ов, кортексов и арм-ов. Вопрос только к Rst7. Есть ли возможность потестить на AT91SAM7 Ваш стек. Я, честно, говоря, не сильно смотрел Ваше произведение - только одним глазком. И не сравнивал - своими мыслями голова забита.

Цитата(prottoss @ Jul 31 2011, 15:21) *
...Есть ли возможность...
Наверное фигню сморозил - проще, может быть, портировать самому Ваш стек на свою платку rolleyes.gif

Как нить возьмусь. Просто, ради интереса sm.gif


--------------------
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 31 2011, 10:58
Сообщение #108


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

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



QUOTE
Наверное фигню сморозил - проще, может быть, портировать самому Ваш стек на свою платку


Если мне не изменяет память, то там придется потрудиться, ибо в Atmel'овском EMAC'е по 128 байт кусочки пакетов. Но решаемо, в принципе, тоже без копирования.

Кроме того, рекомендую собирать в ARM-режиме, будет эффективнее. Единственный минус - довольно накладная процедура переворота байт в длинном слове, которая htonl/ntohl. Однако, ее необходимо инлайнить в любом случае, иначе будет плохо.

У меня, к сожалению, нет подходящей железки для порта. Кроме того, рекомендую подождать чуть-чуть, я таки сделаю вынос работы с железом и добавлю возможность отложенных обработок колбеков в менее приоритетных задачах.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 31 2011, 11:08
Сообщение #109


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Rst7 @ Jul 31 2011, 16:58) *
Если мне не изменяет память, то там придется потрудиться, ибо в Atmel'овском EMAC'е по 128 байт кусочки пакетов. Но решаемо, в принципе, тоже без копирования.
Не изменяемые кусочки тока на прием. На передачу можно размер буферов регулировать в некоторых пределах, хотя я не вижу смысла отказываться от размера в 128 байт на блок. Достаточно оптимально... Ой, наверное сейчас кто-то даст по шее...

Цитата(Rst7 @ Jul 31 2011, 16:58) *
Кроме того, рекомендую собирать в ARM-режиме, будет эффективнее. Единственный минус - довольно накладная процедура переворота байт в длинном слове, которая htonl/ntohl. Однако, ее необходимо инлайнить в любом случае, иначе будет плохо.
Интересно, но в ARM-режиме производительность немного ниже чем в THUMB.
Для организации переворота rolleyes.gif пользуюсь макросами
Код
#define MAKEUINT16(byte_h, byte_l)    ((UINT16)((((UINT16)(byte_h)) << 8)|(UINT16)(byte_l)))
#define HIBYTE(word)                ((UINT8)(((UINT16)(word)) >> 8))
#define LOBYTE(word)                ((UINT8)(word))

#define MAKEUINT32(word_h, word_l)    ((UINT32)((((UINT32)(word_h)) << 16)|(UINT32)(word_l)))
#define HIWORD(dword)                ((UINT16)(((UINT32)(dword)) >> 16))
#define LOWORD(dword)                ((UINT16)(dword))

#define SWAP16(word)                (MAKEUINT16(LOBYTE(word), HIBYTE(word)))
#define SWAP32(dword)                (MAKEUINT32(SWAP16(LOWORD(dword)), SWAP16(HIWORD(dword))))


Цитата(Rst7 @ Jul 31 2011, 16:58) *
...рекомендую подождать чуть-чуть...
Да я и не спешу sm.gif


--------------------
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 31 2011, 11:14
Сообщение #110


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

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



QUOTE
Интересно, но в ARM-режиме производительность немного ниже чем в THUMB.


Я проверял, код намного более эффективный в данном случае.

QUOTE
Для организации переворота пользуюсь макросами


Есть намного более оптимальный проворот 32хбитного числа.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 31 2011, 11:17
Сообщение #111


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Rst7 @ Jul 31 2011, 17:14) *
Есть намного более оптимальный проворот 32хбитного числа.
Не сомневаюсь услышать это от Вас. Поделитесь секретной информацией? sm.gif


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 31 2011, 11:20
Сообщение #112


Гуру
******

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



QUOTE (prottoss @ Jul 31 2011, 13:17) *
Не сомневаюсь услышать это от Вас. Поделитесь секретной информацией? sm.gif

Например:
CODE
     19          __arm ulong htonl( ulong n )
     20          {
     21          ulong t;
     22          
     23                t = n ^ ( (n << 16) | (n >> 16) );
     24                t &= ~0x00FF0000;
     25               n = ( n << 24 )|( n >> 8 );
     26                n ^= ( t >> 8 );
     27          
     28              return( n );
   \                     htonl:
   \   00000000   601820E0           EOR      R1,R0,R0, ROR #+16
   \   00000004   FF18C1E3           BIC      R1,R1,#0xFF0000
   \   00000008   2114A0E1           LSR      R1,R1,#+8
   \   0000000C   600421E0           EOR      R0,R1,R0, ROR #+8
   \   00000010   0EF0A0E1           MOV      PC,LR           ;; return
     29          }

Заинлайнить само собой тоже можно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 31 2011, 11:35
Сообщение #113


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

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



QUOTE
Например:


Оно самое. В контексте рассматриваемого стека инлайнить их обязательно. Иначе появятся стековые переменные, код превращается в неприятное глазу унылое гуано.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 31 2011, 12:16
Сообщение #114


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



zltigo, Rst7
Поднял производительность на целыx полтора килобита rolleyes.gif
В общем нуно потестить стек от Rst7.


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 31 2011, 14:29
Сообщение #115


Гуру
******

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



QUOTE (prottoss @ Jul 31 2011, 14:16) *
Поднял производительность на целыx полтора килобита rolleyes.gif


Дежавю sm.gif http://electronix.ru/forum/index.php?showtopic=41413


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 31 2011, 14:46
Сообщение #116


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

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



QUOTE
Дежавю


О блин, плохо дело с портом на SAM7. Это придется все структуры в невыровненном режиме хранить. Ну или копировать к себе заголовки. Пока не готов сказать, какой способ будет эффективнее. Надо все-таки покурить даташит. Но выглядит это очень уныло.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
VslavX
сообщение Jul 31 2011, 15:19
Сообщение #117


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(Rst7 @ Jul 31 2011, 17:46) *
О блин, плохо дело с портом на SAM7. Это придется все структуры в невыровненном режиме хранить.

Можно хранить и в выравненном - для SAM7X можно задать начальное смещение по приему - например в 2 байта и все будет OK.
Upd: судя по моим исходникам - в EMAC_NCFGR - поле RBOF (блин, смотрю на свои тексты как баран - давно дело было)
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 31 2011, 16:01
Сообщение #118


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

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



QUOTE
Можно хранить и в выравненном - для SAM7X можно задать начальное смещение по приему - например в 2 байта и все будет OK.


Это радует, я уж думал - зопа sm.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 31 2011, 16:01
Сообщение #119


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(zltigo @ Jul 31 2011, 20:29) *
Даааа.... Тока в 2008 все заработало biggrin.gif Млин. А я уже забыл. Это был первый опыт одновременного освоения ARM7, RTOS (ucOS-II) и сетевых протоколов... Брррр...


--------------------
Go to the top of the page
 
+Quote Post
igneous
сообщение Aug 1 2011, 04:42
Сообщение #120





Группа: Участник
Сообщений: 8
Регистрация: 17-10-07
Из: Чебоксары
Пользователь №: 31 432



Собрал версию 1318 на LPC1769 @ 100 Mhz.
Тест скорости показывает 91929...94360 Kbit/s. На более ранних версиях (1315 например) такой стабильности не было - скорость плясала от 40000 до 90000 Kbit/s практически случайным образом. EMAC: LAN8720A-CP.

Go to the top of the page
 
+Quote Post

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

 


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


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