Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компиляция lwIP 1.3.2 под ARM
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
_Макс
Подскажите пожалуйста, от чего во время компиляции могут быть ошибки типа:

Код
...
api_lib.c  
Error[Pe513]: a value of type "void *" cannot be assigned to an entity of type "ip_hdr *" D:\IAR Embedded Workbench\scmRTOS\scmRTOS v3.10 for STM32\lwIP\core\ipv4\icmp.c 93
...
Error[Pe167]: argument of type "void *" is incompatible with parameter of type "ip_addr *" D:\IAR Embedded Workbench\scmRTOS\scmRTOS v3.10 for STM32\lwIP\core\ipv4\icmp.c 216
...
Warning[Pe236]: controlling expression is constant D:\IAR Embedded Workbench\scmRTOS\scmRTOS v3.10 for STM32\lwIP\core\ipv4\icmp.c 299
...
Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once) D:\IAR Embedded Workbench\scmRTOS\scmRTOS v3.10 for STM32\lwIP\core\ipv4\igmp.c 1
inet.c  
...
Error[Pe120]: return value type ("void *") does not match the function type ("netif *") D:\IAR Embedded Workbench\scmRTOS\scmRTOS v3.10 for STM32\lwIP\core\ipv4\ip.c 100
...
Error[Pe144]: a value of type "void *" cannot be used to initialize an entity of type "ip_reassdata *" D:\IAR Embedded Workbench\scmRTOS\scmRTOS v3.10 for STM32\lwIP\core\ipv4\ip_frag.c 477
...

Все идущие в комплекте файлы подключены, в том числе port от демки STM32. Ошибок по не найденным файлам нет.
Возможно это как-то связано с настройками компилятора?
zltigo
Цитата(_Макс @ Apr 24 2010, 16:30) *
Возможно это как-то связано с настройками компилятора?

Это связано с написанными через анальное отверстие исходными текстами. "Из интернету" это обычное дело sad.gif. Другое дело, что если у Вас такие сообщения вызывают непонимание, то.. то Вам надо начинать с изучения собственно языка. Книжку K&R второе издание в руки и преобразование типов штудировать. Ну а "non-native end of line sequence detected" это вроде тоже черным по белому написано. Исходник у Вас наверняка в линуксовом стиле - с одними linefeed в конце строк. "Controlling expression is constant" так вообще дословно переведите и что непонятно?
_Макс
Цитата(zltigo @ Apr 24 2010, 18:27) *
Это связано с написанными через анальное отверстие исходными текстами. "Из интернету" это обычное дело sad.gif. Другое дело, что если у Вас такие сообщения вызывают непонимание, то.. то Вам надо начинать с изучения собственно языка. Книжку K&R второе издание в руки и преобразование типов штудировать. Ну а "non-native end of line sequence detected" это вроде тоже черным по белому написано. Исходник у Вас наверняка в линуксовом стиле - с одними linefeed в конце строк. "Controlling expression is constant" так вообще дословно переведите и что непонятно?

Спасибо, за Ваш комментарий но он мне не помог. Нет другой возможности как использовать компоненты из Интернет. Я задал этот вопрос потому-что я наверняка не первый на этом форуме, кто компилирует lwIP, в надежде получить ответ, который поможет решить проблему. Я читал про преобразование типов, что правда с void имею дело в первый раз. И речь идет не о самописной праграмме, а об исходниках, которые априори работают, поэтому проще спросить, а там и понимание void найдется.

Смотрю на исходники firmware от ST, там такие же записи в тех местах где у меня ошибки. Но от ST компилится без ошибок. Почему?
zltigo
Цитата(_Макс @ Apr 24 2010, 17:38) *
Спасибо, за Ваш комментарий но он мне не помог.

Чем мог. Взять и переписать за Вас исходники я не могу. Хотя-бы по причине что я их не вижу.
Цитата
в надежде получить ответ, который поможет решить проблему.

Ответ Вы получили, однако, как оказалось Вам нужен не ответ, а какое-то готовое решение.
Старайтесь четче формулировать вопросы.
Цитата
там такие же записи в тех местах где у меня ошибки. Но от ST компилится без ошибок. Почему?

Вы про ошибки или про предупреждения тоже? Ошибки - по другому описаны прототипы или используются явные преобразования типов.

Цитата(_Макс @ Apr 24 2010, 17:50) *
а там и понимание void найдется.

Настоятельно рекомендую найти понимание творимого до, а не после того, как сотворили. Очень способствует экономии времени и нервов, не говоря о качестве.
_Макс
Цитата(zltigo @ Apr 24 2010, 18:54) *
Ответ Вы получили, однако, как оказалось Вам нужен не ответ, а какое-то готовое решение.
Старайтесь четче формулировать вопросы.

Еще раз повторюсь, что исходники рабочие, они компилируются без ошибок в другом проекте. В моем ошибки. Возможно это связано с настройками проекта, я понимаю что чего-то не знаю, но ведь для этого существуют форумы))

Если исходников у вас нет, вы можете взять их здесь rolleyes.gif

Цитата(zltigo @ Apr 24 2010, 18:54) *
Вы про ошибки или про предупреждения тоже? Ошибки - по другому описаны прототипы или используются явные преобразования типов.

Я про ошибки, проект от ST компилируется и работает. Просмотрел несколько, вроде и прототипы также записаны.
zltigo
Цитата(_Макс @ Apr 24 2010, 18:03) *
Еще раз повторюсь, что исходники рабочие, они...

написаны, повторю, через анальное отверстие.
Цитата
Error[Pe513]: a value of type "void *" cannot be assigned to an entity of type "ip_hdr *" D:\IAR Embedded Workbench\scmRTOS\scmRTOS v3.10 for STM32\lwIP\core\ipv4\icmp.c 93

Совершенно правильно ругается. Там должно быть
Код
  iphdr = (struct ip_hdr *)p->payload;

Будет компилироваться ЛЮБЫМ компилятором. Дальше в том-же духе, полагаю.
_Макс
Цитата(zltigo @ Apr 24 2010, 19:20) *
Совершенно правильно ругается. Там должно быть
Код
  iphdr = (struct ip_hdr *)p->payload;

Будет компилироваться ЛЮБЫМ компилятором. Дальше в том-же духе, полагаю.

Абсолютно точно, но в демо проекте от ST такие же записи и все работает. Почему? Действительно, там должно быть явное преобразование типа, но как так сделать, что не вставлять теперь "(ip_hdr *)" во все места (их порядка 200).
sergeeff
Цитата(_Макс @ Apr 24 2010, 20:24) *
Абсолютно точно, но в демо проекте от ST такие же записи и все работает. Почему? Действительно, там должно быть явное преобразование типа, но как так сделать, что не вставлять теперь "(ip_hdr *)" во все места (их порядка 200).


Надо взять исходники lwip из их родного места лежания: http://www.very-clever.com/download/nongnu.../lwip-1.3.2.zip а не пользоваться не известно чем.

И если вы их внимательно посмотрите ( в частности icmp.c , там стоит именно: iphdr = (struct ip_hdr *)p->payload;)
_Макс
Цитата(sergeeff @ Apr 24 2010, 21:03) *
Надо взять исходники lwip из их родного места лежания: http://www.very-clever.com/download/nongnu.../lwip-1.3.2.zip а не пользоваться не известно чем.

И если вы их внимательно посмотрите ( в частности icmp.c , там стоит именно: iphdr = (struct ip_hdr *)p->payload;)

Да нет же, посмотрите внимательно, откройте два файла с одинаковым именем и сравните, воспользуйтесь утилитой, в конце концов архивы на которые сослались вы и я, имеют абсолютно одинаковый размер. Добавьте символ и размер будет другой. "iphdr = (struct ip_hdr *)p->payload;" и у меня тоже есть, но не везде, мы смотрим разные строки.
Сергей Борщ
Цитата(_Макс @ Apr 24 2010, 19:24) *
Абсолютно точно, но в демо проекте от ST такие же записи и все работает. Почему?
Потому что демо проект компилируется в режиме С. А вы компилируете в режиме С++. В С происходит неявное приведение любого указателя к void * и наоборот, void * к указателю на любой тип. В плюсах неявное преобразование void * к любому указателю отсутствует, нужно делать явное приведение типа.
_Макс
Цитата(Сергей Борщ @ Apr 25 2010, 17:09) *
Потому что демо проект компилируется в режиме С. А вы компилируете в режиме С++. В С происходит неявное приведение любого указателя к void * и наоборот, void * к указателю на любой тип. В плюсах неявное преобразование void * к любому указателю отсутствует, нужно делать явное приведение типа.
Еще убрал галочку prototype require, осталось только три файла в которых ошибки, который касаются ipv6. И еще лес предупреждений.

Да, отлично, Вы правы, я не знал этой разницы. На две сотни ошибок стало меньше. Но еще 63 осталось)
_Макс
Убрал из проекта файлы core/ipv6, скомпилировалось без ошибок)
Код
Done. 0 error(s), 230 warning(s)
Буду теперь без ip6) От чего это винигрет, сложно понять. Ну и количество предупреждений потрясное)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.