virfis 0 16 июля, 2018 Опубликовано 16 июля, 2018 · Жалоба Проблема обнаружилась когда проект с Lwip был перенесен на компилятор 8-й версии. Через некоторое время после установления соединения по TCP и обмена данными прекращался обмен. Тот же проект скомпилированный на 7-й версии работает нормально. Разбираясь и копаясь нашел что "восьмерка" создает неверный (на мой взгляд) код в функции tcp_receive при включенной оптимизации. Я сделал тестовые проекты под версии 7.80 и 8.30. Взгляните на результат вывода printf в обеих версиях. В папке два проекта. Проект test - это для 8.30, test7_80.eww - для 7.80 соответственно. test.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 16 июля, 2018 Опубликовано 16 июля, 2018 · Жалоба Проблема обнаружилась когда проект с Lwip был перенесен на компилятор 8-й версии. Через некоторое время после установления соединения по TCP и обмена данными прекращался обмен. Тот же проект скомпилированный на 7-й версии работает нормально. Разбираясь и копаясь нашел что "восьмерка" создает неверный (на мой взгляд) код в функции tcp_receive при включенной оптимизации. Я сделал тестовые проекты под версии 7.80 и 8.30. Взгляните на результат вывода printf в обеих версиях. В папке два проекта. Проект test - это для 8.30, test7_80.eww - для 7.80 соответственно. Попробовал скомпилить Ваш проект. Только у меня "IAR ANSI C/C++ Compiler V8.20.1.14183/W32 for ARM". Результат: tcpwnd_size_t new_cwnd = (pcb->cwnd + pcb->mss * pcb->mss / pcb->cwnd); ??test_0: (+1) MULS R2,R2,R2 0xF2F1 SDIV R2,R2,R1 ADDS R2,R2,R1 if (new_cwnd > pcb->cwnd) { UXTH R3,R2 CMP R1,R3 IT CC MOVCC R1,R3 STRH R1,[R0, #+24] pcb->cwnd = new_cwnd; main.lst_iar8.20.zip Как видно - всё ок. У Вас в листинге вижу очень похожий код, но без UXTH, что странно. Возможно баг добавился после моей версии IAR. Ещё что странно: Ваш проект открылся с ключами "Cortex-M3" и "fpu=none", но заглянув в Ваш .lst видно, что в заголовке указано "--cpu=Cortex-M7 -e --fpu=VFPv5_d16". Странно. Попробовал на IAR8.20 скомпилить этот проект и для CM3 и для CM7 с FPU - результат в обоих случаях корректный. Файлы проекта я использовал ваши, только удалил из них ключ "NULINK_ID" - IAR8.20 не захотел его понимать. PS: Так что баг похоже добавился недавно и наверное скоро исправят. Пока можно пользоваться IAR8.20. PPS: В любом случае - спасибо за предупреждение! Теперь не будем обновлять версии IAR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
virfis 0 16 июля, 2018 Опубликовано 16 июля, 2018 (изменено) · Жалоба Нашел 8.22.2 версию. Действительно открылся проект как М3, ничего не менял, просто перебилдил. if ((tcpwnd_size_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) { 0x27e: 0x1852 ADDS R2, R2, R1 0x280: 0xb293 UXTH R3, R2 0x282: 0x4299 CMP R1, R3 0x284: 0xd208 BCS.N 0x298 pcb->cwnd += pcb->mss; 0x286: 0xe006 B.N 0x296 tcpwnd_size_t new_cwnd = (pcb->cwnd + pcb->mss * pcb->mss / pcb->cwnd); 0x288: 0x4352 MULS R2, R2, R2 0x28a: 0xfb92 0xf2f1 SDIV R2, R2, R1 0x28e: 0x1852 ADDS R2, R2, R1 if (new_cwnd > pcb->cwnd) { 0x290: 0x428a CMP R2, R1 0x292: 0xbf38 IT CC 0x294: 0x460a MOVCC R2, R1 0x296: 0x8302 STRH R2, [R0, #0x18] return pcb->cwnd; 0x298: 0x8b00 LDRH R0, [R0, #0x18] 0x29a: 0x4770 BX LR А где бы раздобыть версию 8.20? Изменено 16 июля, 2018 пользователем virfis Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 16 июля, 2018 Опубликовано 16 июля, 2018 · Жалоба А где бы раздобыть версию 8.20? На местном FTP должна быть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
virfis 0 16 июля, 2018 Опубликовано 16 июля, 2018 · Жалоба На местном FTP должна быть. Да я как бы не имею доступа Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 16 июля, 2018 Опубликовано 16 июля, 2018 · Жалоба Да я как бы не имею доступа Отправил в личку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
virfis 0 16 июля, 2018 Опубликовано 16 июля, 2018 (изменено) · Жалоба Да, подтверждаю. На 8.20.1 компилирует нормально. Свой проект перекомпилировал - тоже всё отлично работает. Так что баг похоже добавился недавно и наверное скоро исправят.Для этого им надо о нём узнать. А сообщить может только тот у кого лицензия есть. В этой версии кстати, еще в файле STM32H7xx.dmac ошибка. Отладчик ругается при запуске, но указывает конкретное место в строке 203. Я лишнюю открывающую скобку убрал и нормально стало. Изменено 16 июля, 2018 пользователем virfis Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 16 июля, 2018 Опубликовано 16 июля, 2018 · Жалоба Для этого им надо о нём узнать. А сообщить может только тот у кого лицензия есть. Как немного освобожусь, надо будем им написать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
virfis 0 13 сентября, 2018 Опубликовано 13 сентября, 2018 · Жалоба Как немного освобожусь, надо будем им написать. Вы не писали им случайно? Версия 8.30.2 - проблема устранена!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 13 сентября, 2018 Опубликовано 13 сентября, 2018 · Жалоба Вы не писали им случайно? Версия 8.30.2 - проблема устранена!!! Не, не писал. Так и не нашёл времени ;) Да и пользуюсь 7.80.4. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться