|
lwIP (PPP) проблема, странная |
|
|
|
Oct 21 2011, 06:51
|
Знающий
   
Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Oct 29 2011, 07:44
|
Знающий
   
Группа: Участник
Сообщений: 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.hsio.cПорт sys_arch.c lwIP для FreeRTOS взял из примера ST для STM32F2xx. Больше ничего в стеке я не менял! И потому хотел поинтересоваться - получалось ли у вас принимать такие передачи в стеке lwIP и в частности через их PPP? Вот логи: TCP log: TCP+.txtIP log: IP.TXTPPP log: PPP.txtСняты с разных подключений, но все остановлены на месте где модем перестает выдавать очередной пакет - всегда после 9 пакета.
Сообщение отредактировал kan35 - Oct 29 2011, 08:00
|
|
|
|
|
Nov 2 2011, 04:48
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
Цитата(cpl @ Nov 1 2011, 00:02)  Где в стеке поддержка XON XOFF, в lwip1.3.2 не нашел ? Работу XON XOFF проверяли ? cpl, спасибо большое тебе Оказалось следующее: модем действительно работал через аппаратные CTS и RTS, хотя при согласовании параметров выдавал поддержку XON/XOFF: Код ... ppp_send_config[0]: outACCM=0 0 A 0 ppp_recv_config[0]: inACCM=0 0 A 0 link_established: 0 upap_lowerup: 0 s=0 IPCP: lowerup state 0 (LS_INITIAL) -> 2 (LS_CLOSED) upap_authwithpeer: 0 user=beeline password=beeline s=1 ... Возможно, я не правильно это понимаю (0 0 A 0)? Достаточно было подать AT команду AT+IFC=1,1 и XON XOFF действительно заработали, а по поддержке стеком, сейчас изучаю, думал что поддерживает...
Сообщение отредактировал kan35 - Nov 2 2011, 07:09
|
|
|
|
Сообщений в этой теме
kan35 lwIP (PPP) проблема Oct 21 2011, 06:51 kan35 Заменил модем на SIM300DZ - результат на 100% тот ... Oct 21 2011, 13:19 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|