EthernetClient :: Писать ошибку (?)

Миссис
Солнце 10 января 2016 12:23
Может ли кто -нибудь перепроверить мое расследование...
Функция size_t ethernetclient :: write (const uint8_t *buf, size_t size) всегда возвращает 0. Даже если он должен вернуть размер.

Mrburnette
Солнце 10 января 2016 г. 18:29
Были недавние проблемы с Ethernet:
http: // www.STM32duino.com/viewtopic.PHP?t = 692

Но я думал, что проблемы были решены. Я лично не запускаю Ethernet на Maple Mini STM32, так что, возможно, кто-то другой поднимутся и посоветует с более глубоким пониманием.

Луча

Миссис
Пн 11 января 2016 г., 9:43
Мой ST32Webserver почти закончен (порт из ESP8266Webserver).
Но потому что функция size_t ethernetclient :: write (const uint8_t *buf, size_t size) всегда возвращает 0 Я не могу сделать кусочки...
Только я могу отправить большую посылку одновременно. Но это не правильное решение...

ZMEMW16
Пн 11 января 2016 12:59
<съеживаться>, Скажите Fibs, поместите его в обертку, верните количество байтов и добавьте действительно большой предупреждающий блок комментариев/ todo/ #warning</съеживаться>

любой другой способ обнаружения неправильной или плохой записи?

Стивен

Миссис
Пн 11 января 2016 г. 14:12
Я сделал эту модификацию только для тестирования:
while (size_to_send) {
size_t will_send = (size_to_send < UNIT_SIZE) ? size_to_send: unit_size;
size_t send = _currentClient.написать (send_start, will_send);
// if (sent == 0) {
// перерыв;
//}
// size_to_send -= отправлено;
// send_start += send;
size_to_send -= will_send;
send_start += Will_send;
}
Оно работает.
В любом случае, веб -сервер более слабы, чем из ESP8266.

zmemw16: ни слова не : шок:

Миссис
Пн 11 января 2016 г. 14:17
Полное функционирование:

void stm32webserver :: sendcontent (const string& содержание) {
const size_t unit_size = http_download_unit_size; // http_download_unit_size = 1460, тестируется с разным размером
size_t size_to_send = content.длина();
const char* send_start = content.c_str ();

while (size_to_send) {
size_t will_send = (size_to_send < UNIT_SIZE) ? size_to_send: unit_size;
size_t send = _currentClient.написать (send_start, will_send);
// if (sent == 0) {
// перерыв;
//}
// size_to_send -= отправлено;
// send_start += send;
size_to_send -= will_send;
send_start += Will_send;
}
}

ZMEMW16
Пн 11 января 2016 г. 16:40
длинное описание того, что вы сделали.
<съеживаться></съеживаться> Я ждем торрента «это непослушные» комментарии

Стивен

Martinayotte
Пн 11 января 2016 г. 16:54
Я думаю, что проблема должна быть исправлена ​​в EthernetClient на первом месте, но с быстрым взглядом я не вижу, где есть ошибка.
Вы используете реализацию W5X00 от Serasidis в F1 ?

Миссис
Пн 11 января 2016 г., 17:04
Да, я использую W5X00 и F1BY Seradisis...

Проблема где -то глубже:
size_t ethernetClient :: write (const uint8_t *buf, size_t size) {
if (_sock == max_sock_num) {
setWriteError ();
возврат 0;
}
если (!Отправить (_sock, buf, size)) {
setWriteError ();
возврат 0;
}
возвратный размер;
}

Это должно быть в функции отправить (...). Куски были отправлены, но функция возвращает 0.

Martinayotte
Пн 11 января 2016 г., 17:19
Глядя на https: // github.com/serasidis/ethernet_s ... PP#L91-L96, Комментарий о возвращении логического, так как спустя несколько строк мы видим, что он возвращает длину: https: // github.com/serasidis/ethernet_s ... Т.CPP#L105
Также глядя на EthernetClient.CPP, что вы предоставляете код, я не думаю, что призыв к отправке (), он все еще обрабатывает его как логический. if (!send(_sock, buf, size)) {

Вассилис
Пн 11 января 2016 г., 19:50
Какой именно чип Ethernet вы используете W5100 или W5500 (чтобы сосредоточиться на этом чипе) ?

Миссис
Пн 11 января 2016 г., 22:17
Я использую W5500

Миссис
Пн 11 января 2016 г., 22:45
Некоторые исследования:

extern int sudaint, sudaint1; // глобальные переменные Iniatialiset до -1
void stm32webserver :: sendcontent (const string& содержание) {
const size_t unit_size = http_download_unit_size;
size_t size_to_send = content.длина();
const char* send_start = content.c_str ();
while (size_to_send) {
size_t will_send = (size_to_send < UNIT_SIZE) ? size_to_send: unit_size;
Sudaint = Sudaint>(int) will_send?Sudaint: (int) Will_send;
size_t send = _currentClient.написать (send_start, will_send);
Sudaint1 = Sudaint1>(int) отправлено?Sudaint1: (int) отправлено;
if (send == 0) {
перерыв;
}
size_to_send -= отправлено;
send_start += Send;
}
}
После одного веб -запроса (в моем случае это 7 вызовов функции записи) Результат:
Sudaint = 1980
sudaint1 = 0

Тот же запрос с переменными отслеживания в EthernetClient.CPP (аппаратное обеспечение \ arduino_stm32 \ stm32f1 \ libraries \ ethernet_stm \ src \)
Extern int sudaint;
size_t ethernetClient :: write (const uint8_t *buf, size_t size) {
Sudaint = Sudaint>(int) размер?Sudaint: (int) размер;
if (_sock == max_sock_num) {
setWriteError ();
возврат 0;
}
if (send (_sock, buf, size) == 0) {// Это уже исправлено - см. Связь выше!!!!!
setWriteError ();
возврат 0;
}
возвратный размер;
}
результат:
Sudaint = 1

Кажется, что существует больше источников EthernetClient.
EthernetClient :: write (const uint8_t *buf, size_t size) не та же функция, как я называю в моем STM32Webserver :: sendContent (const String& Контент) Функция...коррекция с
if (send (_sock, buf, size) == 0) {// Это уже исправлено - см. Связь выше!!!!!
setWriteError ();
возврат 0;
}
Я сделал только на EthernetClient.CPP (аппаратное обеспечение \ arduino_stm32 \ stm32f1 \ libraries \ ethernet_stm \ src \)

Martinayotte
Пн 11 января 2016 г., 22:59
Mrsupe написала: Кажется, что существует больше источников EthernetClient.

Martinayotte
Вт 12 января 2016 г. 2:11 утра
Mrsupe написала:Некоторые исследования:

extern int sudaint, sudaint1; // глобальные переменные Iniatialiset до -1

Миссис
Вт 12 января 2016 г., 7:48
Martinayotte:
:рулон: Я сломал свой USB-сериал. К счастью, у меня есть Segger JTAG, так что это жесткая импровизация отладки.
Содержание этих переменных Sudaint и Sudaint1, которые я читаю из Ethernet уже через только что разработанный STM32Webserver : D

Martinayotte
Вт 12 января 2016 г. 14:28
Что вы имеете в виду под "сломанным USB-сериалом", USB-серриальный ключ ?
Почему вы используете их, если у STM3 уже есть виртуальный класс serialusb.