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

 
 
 
Reply to this topicStart new topic
> Ошибка компилятора IAR 8.xx
virfis
сообщение Jul 16 2018, 09:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732



Проблема обнаружилась когда проект с Lwip был перенесен на компилятор 8-й версии. Через некоторое время после установления соединения по TCP и обмена данными прекращался обмен. Тот же проект скомпилированный на 7-й версии работает нормально. Разбираясь и копаясь нашел что "восьмерка" создает неверный (на мой взгляд) код в функции tcp_receive при включенной оптимизации. Я сделал тестовые проекты под версии 7.80 и 8.30. Взгляните на результат вывода printf в обеих версиях. В папке два проекта. Проект test - это для 8.30, test7_80.eww - для 7.80 соответственно.
Прикрепленные файлы
Прикрепленный файл  test.zip ( 435.97 килобайт ) Кол-во скачиваний: 13
 
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 16 2018, 10:17
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(virfis @ Jul 16 2018, 12:01) *
Проблема обнаружилась когда проект с 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 ( 2.16 килобайт ) Кол-во скачиваний: 9

Как видно - всё ок.
У Вас в листинге вижу очень похожий код, но без 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.
Go to the top of the page
 
+Quote Post
virfis
сообщение Jul 16 2018, 10:32
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732



Нашел 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?

Сообщение отредактировал virfis - Jul 16 2018, 10:38
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 16 2018, 10:38
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(virfis @ Jul 16 2018, 13:32) *
А где бы раздобыть версию 8.20?

На местном FTP должна быть.
Go to the top of the page
 
+Quote Post
virfis
сообщение Jul 16 2018, 10:48
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732



Цитата(jcxz @ Jul 16 2018, 14:38) *
На местном FTP должна быть.

Да я как бы не имею доступа
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 16 2018, 11:26
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(virfis @ Jul 16 2018, 13:48) *
Да я как бы не имею доступа

Отправил в личку.
Go to the top of the page
 
+Quote Post
virfis
сообщение Jul 16 2018, 12:09
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732



Да, подтверждаю. На 8.20.1 компилирует нормально. Свой проект перекомпилировал - тоже всё отлично работает.
Цитата
Так что баг похоже добавился недавно и наверное скоро исправят.
Для этого им надо о нём узнать. А сообщить может только тот у кого лицензия есть.

В этой версии кстати, еще в файле STM32H7xx.dmac ошибка. Отладчик ругается при запуске, но указывает конкретное место в строке 203. Я лишнюю открывающую скобку убрал и нормально стало.

Сообщение отредактировал virfis - Jul 16 2018, 12:21
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 16 2018, 14:17
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(virfis @ Jul 16 2018, 15:09) *
Для этого им надо о нём узнать. А сообщить может только тот у кого лицензия есть.

Как немного освобожусь, надо будем им написать.
Go to the top of the page
 
+Quote Post
virfis
сообщение Sep 13 2018, 06:08
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732



Цитата(jcxz @ Jul 16 2018, 18:17) *
Как немного освобожусь, надо будем им написать.

Вы не писали им случайно?
Версия 8.30.2 - проблема устранена!!!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 13 2018, 08:29
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(virfis @ Sep 13 2018, 09:08) *
Вы не писали им случайно?
Версия 8.30.2 - проблема устранена!!!

Не, не писал. Так и не нашёл времени wink.gif
Да и пользуюсь 7.80.4.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th April 2024 - 18:06
Рейтинг@Mail.ru


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