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

 
 
> Keil, размер структуры.
3.14
сообщение Feb 8 2007, 16:32
Сообщение #1


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Имею такую структуру:
Код
struct arp_hdr {
  struct uip_eth_hdr ethhdr;
  u16_t hwtype;  
  u16_t protocol;
  u8_t hwlen;
  u8_t protolen;
  u16_t opcode;
  struct uip_eth_addr shwaddr;
  u16_t sipaddr[2];
  struct uip_eth_addr dhwaddr;
  u16_t dipaddr[2]; };
Так вот в sizeof(struct arp_hdr) = 4, это как?


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
beer_warrior
сообщение Feb 8 2007, 16:40
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Сорри. А не могли вы брать сайзоф указателя?


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
3.14
сообщение Feb 8 2007, 16:53
Сообщение #3


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Это я uIP к lpc2378 прикручиваю, вижу что на функции передачи пакета проц улетает.
В подпрограмме передачи сначала укладывается заголовок (54 б) затем массив, размер заливаемого массива вычисляется как uip_len-54,а эта самая uip_len=sizeof(struct arp_hdr).


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
DASM
сообщение Feb 8 2007, 16:56
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



дык 4 или 54 ?? И полагаю тоже попали на data align. Даешь pragma pack (1) :-D
Go to the top of the page
 
+Quote Post
3.14
сообщение Feb 8 2007, 17:00
Сообщение #5


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



сайзофф структуры 4, кстати align-ы я дествительно кругом похерил, правда конкретно к этой структуре они не прилагались.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
3.14
сообщение Feb 9 2007, 11:00
Сообщение #6


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Чего-тоя запутался, как в кейле описать:
Цитата
u8_t uip_buf[UIP_BUFSIZE+2] __attribute__ ((aligned (4)));

Еще, в чем таком потаенный смысл директив выравнивания, объявили тип переменной/константы размер которой уже явно известен для упаковки, нет надо блин еще мозги компосировать всевозможными "самодельными" директивами компилятора.
Это получается, сначала, типы создают по размеру (типа BYTE, u8_t ...) потом еще и выравнивают принудительно.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
DASM
сообщение Feb 9 2007, 11:24
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



выравнивание надо, когда мы хотим, например, ту же самую структктуру представить в виде НЕПРЕРЫВНОГО массива (соседние топики про решетчатые массивы не читать). Например для передачи по каналу связи удобно.
Типа
Код
union blala
{
   struct head
  {
    char q;
    int w;
    char ee [3];
  };
union asArray
{
   char data[8];
};
без pack [1] размер структуры в юнионе будет больше 8-ми и будут дырки
};
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:43
Рейтинг@Mail.ru


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