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

 
 
> KEIL и lwIP, помогите начинающему!
nikkov
сообщение Mar 14 2008, 14:34
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 217
Регистрация: 1-02-05
Пользователь №: 2 332



Пытаюсь собрать простейший пример для lwIP под LPC2468, столкнулся с непонятной для меня проблемой, которая приведена на рисунке: LDR R0, [R6, #0x10] загружает в регистр не то значение!
Исходный пример был под GCC я его пытаюсь запустить на keil rv mdk 3.15. Сам только осваиваю АРМы, поэтому думаю ответ где-то на поверхности, но где копать пока не знаю. Возможно дело в выравнивании структур?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MALLOY2
сообщение Mar 17 2008, 06:18
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Цитата
Я на PC сталкивался с такой ситуацией когда линковались библиотеки с другими выравниваниями. Но тут то все исходники компилятся в одном проекте, с одними настройками. Как такое возможно? И как победить? Заранее спасибо.



ARM компиляторы по умолчанию применяют выравнивание на границу 4 байтов (32 бит).
Для этого у LWIP обьявлены дефайны
#define PACK_STRUCT_STRUCT
#define PACK_STRUCT_END
#define PACK_STRUCT_FIELD(x) x
вы должны их заменить на дерективы вышего компилятора которые заставят создавать структуры с выравниванием к 1 байту.

P.S. я незнаю как в KEIL в IAR это #pragma pack(1)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 17 2008, 09:54
Сообщение #3


Гуру
******

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



Цитата(MALLOY2 @ Mar 17 2008, 09:18) *
ARM компиляторы по умолчанию применяют выравнивание на границу 4 байтов (32 бит).
Для этого у LWIP обьявлены дефайны
#define PACK_STRUCT_STRUCT
#define PACK_STRUCT_END
#define PACK_STRUCT_FIELD(x) x
вы должны их заменить на дерективы вышего компилятора которые заставят создавать структуры с выравниванием к 1 байту.

P.S. я незнаю как в KEIL в IAR это #pragma pack(1)

Для Keil'a должно быть
Код
#define PACK_STRUCT_START    __packed
Go to the top of the page
 
+Quote Post
nikkov
сообщение Mar 18 2008, 03:15
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 217
Регистрация: 1-02-05
Пользователь №: 2 332



Цитата(aaarrr @ Mar 17 2008, 15:54) *
Для Keil'a должно быть
Код
#define PACK_STRUCT_START    __packed


Спасибо, помогло. Правда не PACK_STRUCT_START, а PACK_STRUCT_BEGIN, но это не важно.
Теперь столкнулся со следующей проблемой: при приеме ICMP пакета из EMAC читается длина на 4 байта меньше реального размера пакета. При увеличении длины на 4 байта под отладчиком весь пакет из EMAC-а вычитывается правильно и отвечает на пинг. Никто с таким не сталкивался?

вот что вычитал:
Цитата
> I was just going through the FreeRTOS LPC2368 Webserver Demo. There is
> just one small thing that's been bugging me...in "emac.c", in function
> "StartReadFrame()", there is the following statement:
>
> RxLen = (RX_STAT_INFO(idx) & RINFO_SIZE) - 3;
>
> Since the "RxSize" field in RX status info is "actual RX size - 1",
> subtracting "3" from this field would make RxLen equal to "actual RX
> size - 4 ". So that means in the end 4 bytes less frame data will be
> stored, why is that so? Or am I interpreting it wrong here...
>
The last four bytes contain the Ethernet CRC, which is not passed to the
TCP/IP stack so are left to languish in the buffer.

но тогда срабатывает этот код в lwIP:

Цитата
if (inet_chksum_pbuf(p) != 0) {
LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: checksum failed for received ICMP echo\n"));
pbuf_free(p);
ICMP_STATS_INC(icmp.chkerr);
snmp_inc_icmpinerrors();
return;
}


Как это понимать? Нужно ли последнее слово или нет?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- nikkov   KEIL и lwIP   Mar 14 2008, 14:34
- - aaarrr   Цитата(nikkov @ Mar 14 2008, 17:34) Возмо...   Mar 14 2008, 14:50
|- - nikkov   Цитата(aaarrr @ Mar 14 2008, 20:50) В нем...   Mar 14 2008, 15:00
- - scifi   Я в свой проект на АРМе внедрял lwip 1.2.0. Скачив...   Mar 15 2008, 18:54
|- - nikkov   Цитата(scifi @ Mar 16 2008, 00:54) Я в св...   Mar 16 2008, 04:22
|- - lebiga   Цитата(nikkov @ Mar 16 2008, 08:22) Я бра...   May 19 2008, 13:22
|- - lebiga   или подскажите, где найти файл lwipweb.zip - приме...   May 20 2008, 09:32
|- - lebiga   Цитата(lebiga @ May 20 2008, 13:32) или п...   May 21 2008, 10:41
|- - mobidev   Цитата(lebiga @ May 21 2008, 14:41) нашел...   Jun 22 2008, 18:00
|- - zltigo   Цитата(mobidev @ Jun 22 2008, 20:00) Собс...   Jun 22 2008, 19:24
|- - Quasar   Цитата(nikkov @ Mar 18 2008, 06:15) Как э...   Mar 22 2008, 20:24
- - Quasar   Причем я заметил другое, если написать так: RxLen...   Mar 22 2008, 22:02
|- - lebiga   Насчет LWIP и выравнивания, LPC2368! Сам прос...   Jun 11 2008, 16:38
|- - lebiga   Цитатаобъясните последовательность действий, что и...   Jun 12 2008, 10:29
- - VAI   Кстати, сейчас коллега активно работает с последни...   Jun 12 2008, 08:51
- - Quasar   А у меня какие-то проблемы возникли при сборке с D...   Jun 15 2008, 14:05
|- - lebiga   Цитата(Quasar @ Jun 15 2008, 18:05) Хотя ...   Jun 17 2008, 08:38
|- - Quasar   Цитата(lebiga @ Jun 17 2008, 12:38) А есл...   Jun 17 2008, 10:44
- - aaarrr   ...да еще мертвые.   Jun 22 2008, 19:33
- - mobidev   Цитата(aaarrr @ Jun 22 2008, 23:33) ...да...   Jun 24 2008, 07:59


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

 


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


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