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

 
 
> lwIP (PPP) проблема, странная
kan35
сообщение Oct 21 2011, 06:51
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Модем Quectel M72, FreeRTOS 7 на sm32.
Работаем через PPP протокол и сверху TCP/IP по виалоновскому протоколу.
При приемо-передаче небольших пакетов данных проблем не возникает. Но при передаче на устройство большого массива байтов прием сбоит. Стек принимает ровно 9 IP пакетов (по ~1400байт каждый), после чего netconn_recv перестает принимать пакеты (потому что модем их перестает выдавать). Память нигде не утекает, это контроллируется. На нехватку памяти не похоже. FreeRTOS находится в IDLE >92% времени. Такое ощущение что проблема на уровне IP, перешевелил все настроки, которые понимал и не понимал, но бесполезно - 9 пакетов и хоть умри. Тип и содержание файла не влияет на результат.
Из зависания выходит если начать новую передачу на устройство. При этом в лог сыпется такое:
Код
pppInProc[0]: got 1355 bytes
[b]pppInProc[0]: Dropping bad fcs 0x63B8 proto=0x0021[/b]
pppDrop: pbuf len=500
pppInProc[0]: got 1405 bytes
pppInput[0]: ip in pbuf len=492
pppifOutput[0]: proto=0x0021
pppInProc[0]: got 1405 bytes
pppInput[0]: ip in pbuf len=492
pppifOutput[0]: proto=0x0021

Тут видно, что начинается передача которая подвисла, но срывается FCS (но потом восстанавливается) и в конечном итоге, когда массив допередастся, система вновь приходит в штатное состояние.

Подскажите где могла собака порыться? Чую что какие то настройки надо подправить в lwipopt.h, но допетрить не могу. Спасибо!!!!!

Сообщение отредактировал kan35 - Oct 21 2011, 13:08
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
cpl
сообщение Oct 27 2011, 18:28
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340



Какой менеджер памяти в freertos используете ? сколько памяти под кучу ?
Сколько памяти выделено для стека ?
Попробуйте включить полное протоколирывание, а так непонятно что не так.
Go to the top of the page
 
+Quote Post
kan35
сообщение Oct 29 2011, 07:44
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Цитата(cpl @ Oct 27 2011, 22:28) *
Какой менеджер памяти в freertos используете ? сколько памяти под кучу ?
Сколько памяти выделено для стека ?
Попробуйте включить полное протоколирывание, а так непонятно что не так.

Использую heap_2, и в lwIP используется только куча freeRTOS, памяти выделил около 50кБ, стеку хватает, так как в ином случае последний бы ругался в лог и к тому же принимая в цикле данные pbuf = netconn_recv вижу, что используются одни и те же сегменты pbuf - и паять не утекает. И еще - увеличение или уменьшение кучи не приводит ник чему - 9 пакетов и стопорится. Хотя изредка 1 на 100 случаев принимается от 10 до 13 пакетов.
Подключался в разных местах - размеры пакетов у разных операторов в разных точках немного отличались - от 1260 до 1460 байт, но результат один - 9 пакетов:-)
Модемы тоже менял - без изменений!

Код
    struct netbuf * in_buf;
    unsigned short k = 2;
    while (bytesleft)
    {
        if (in_buf = netconn_recv(conn))
        {
            // успешно приняли что то
            char * incoming_data;
            unsigned long buflen = netbuf_len(in_buf);

            if (incoming_data = (char *)pvPortMalloc(buflen))
            {
                {
                    char * data; u16_t len;
                    netbuf_data(in_buf, (void **)&data, &len);
                    printf_diagn("%d: %lX->%lX (%d:%d)\r\n\r\n", k, data, incoming_data, buflen, bytesleft-buflen );
                }
                netbuf_copy(in_buf, incoming_data, buflen);
                //file_write(file, buflen, (unsigned char *)incoming_data);
                vPortFree(incoming_data);
            }
            bytesleft -= buflen;
            netbuf_delete(in_buf);
            k++;
        }
        else
            bytesleft = 0;
    }

lwipopts.h
sio.c

Порт sys_arch.c lwIP для FreeRTOS взял из примера ST для STM32F2xx.
Больше ничего в стеке я не менял! И потому хотел поинтересоваться - получалось ли у вас принимать такие передачи в стеке lwIP и в частности через их PPP?

Вот логи:
TCP log: TCP+.txt
IP log: IP.TXT
PPP log: PPP.txt
Сняты с разных подключений, но все остановлены на месте где модем перестает выдавать очередной пакет - всегда после 9 пакета.

Сообщение отредактировал kan35 - Oct 29 2011, 08:00
Go to the top of the page
 
+Quote Post
cpl
сообщение Oct 30 2011, 20:13
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340



CTS-RTS модема обрабатываются корректно ?
Попробуйте посмотреть не влетает ли ртос в функцию FREERTOS:vApplicationMallocFailedHook.
Go to the top of the page
 
+Quote Post
kan35
сообщение Oct 31 2011, 17:49
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Цитата(cpl @ Oct 31 2011, 00:13) *
CTS-RTS модема обрабатываются корректно ?
Попробуйте посмотреть не влетает ли ртос в функцию FREERTOS:vApplicationMallocFailedHook.

У меня между модемом и контроллером только RX и TX. У модема эти сигналы висят в воздухе. В режиме связи конкретный модем QUECTEL L72 использует XON XOFF и стек это поддерживает.
Go to the top of the page
 
+Quote Post
cpl
сообщение Oct 31 2011, 20:02
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340



Где в стеке поддержка XON XOFF, в lwip1.3.2 не нашел ?
Работу XON XOFF проверяли ?
Смотреть пробовали когда выдает pppInProc[0]: Dropping bad fcs 0x63B8 proto=0x0021
что выкинул модем и что действительно было принято контролером.
Попробуйте посмотреть не влетает ли ртос в функцию FREERTOS:vApplicationMallocFailedHook.
Если IP_REASSEMBLY=1 ?
если убрать (char *)pvPortMalloc(buflen) будет ли затык ?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- kan35   lwIP (PPP) проблема   Oct 21 2011, 06:51
- - kan35   Заменил модем на SIM300DZ - результат на 100% тот ...   Oct 21 2011, 13:19
|- - kan35   Цитата(cpl @ Nov 1 2011, 00:02) Где в сте...   Nov 2 2011, 04:48
- - kan35   Рано обрадовался. Началось совершенно непонятное. ...   Nov 2 2011, 08:46
|- - cpl   XON-XOFF Не применял, пока обхожусь CTS-RTS. Стек ...   Nov 2 2011, 09:37
|- - kan35   Цитата(cpl @ Nov 2 2011, 13:37) XON-XOFF ...   Nov 2 2011, 10:38
|- - cpl   Система не упала и ошибок не выдает значит все нор...   Nov 2 2011, 15:53
- - kan35   GPRS не тормозит на самом деле, а стоит только отп...   Nov 2 2011, 19:38
|- - cpl   Цитата(kan35 @ Nov 2 2011, 22:38) Я бы не...   Nov 2 2011, 20:24
|- - kan35   Цитата(cpl @ Nov 3 2011, 00:24) Держите. ...   Nov 3 2011, 07:08
|- - cpl   Цитата(kan35 @ Nov 3 2011, 10:08) у вас к...   Nov 3 2011, 07:38
|- - kan35   Цитата(cpl @ Nov 3 2011, 11:38) 6.0.3 а б...   Nov 3 2011, 13:14
|- - cpl   Цитата(kan35 @ Nov 3 2011, 16:14) а больш...   Nov 3 2011, 13:46
- - kan35   Я начал работать на аппноте от ST - там был ethern...   Nov 3 2011, 14:11
|- - cpl   Цитата(kan35 @ Nov 3 2011, 17:11) Еще не ...   Nov 3 2011, 14:29
- - kan35   нет, с FlowControl нет проблем и не было (просто т...   Nov 3 2011, 15:42
- - kan35   Проблема решена, оказывается дело не в стеке и даж...   Nov 17 2011, 11:48
- - cpl   Примите мои искрение поздравления.   Nov 17 2011, 13:10


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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 02:49
Рейтинг@Mail.ru


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