Golikov 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба потому что фаст наверняка 32 битный, и при сдвиге на 1 - 2 - 3 байта все равно попадает в 0 байт. А этот почему то честно отработал... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 13 марта, 2014 Опубликовано 13 марта, 2014 · Жалоба Я тоже так подумал, но вот искать истину пока некогда. Хотя всегда считал, что вне зависимости от типа проца. он всегда 32-хбитный. Надо почитать описание поточнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 13 марта, 2014 Опубликовано 13 марта, 2014 · Жалоба Посмотрел доку "Implementation Details" на НИОС (n2cpu_nii51015.pdf), не нашел про изменение работы с памятью (32-хбитное обращение или 8-мибитное) для разных версий проца. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 13 марта, 2014 Опубликовано 13 марта, 2014 · Жалоба 2 billidean вставьте в С-код выравнивание, откоментируйте это и забудьте ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 марта, 2014 Опубликовано 13 марта, 2014 · Жалоба а шина везде одна и таже? Потом в дорогом проце считался могла быть железная, а передача 32 битными словами, а в дешевом считалка программная и доступ 8 битный. В ксалинксе так, дешевый мак считает суммы алгоритмически, а дорогой железом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 13 марта, 2014 Опубликовано 13 марта, 2014 · Жалоба а шина везде одна и таже? Потом в дорогом проце считался могла быть железная, а передача 32 битными словами, а в дешевом считалка программная и доступ 8 битный. Нет, базовая архитектура всех ниосов одинакова. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 13 марта, 2014 Опубликовано 13 марта, 2014 · Жалоба Вот моя структура пакета в .h-файле typedef struct UDP_str { char macDst[6]; char macSrc[6]; char type[2]; char ver_lenIP; char all00; char len_28plus[2]; char id_pack[2]; char fl_4000[2]; char time_l_80; char type_UDP_11; char crc16_IPhead[2]; char ipSrc[4]; char ipDst[4]; char portSrc[2]; char portDst[2]; char lenUDP_8plus[2]; char crc16_UDP[2]; // до этого ... длина равна 42 байта char data[UDP_DATA_MAX_SIZE]; } __attribute__((__packed__)) UDP_str; Вот код в .c-файле volatile UDP_str udp_send_s __attribute__ ((aligned (1))); volatile UDP_str udp_take_s __attribute__ ((aligned (1))); После этого я считаю, что обе структуры выровнено по-байтово и без "дырок" между полями. Расчет CRC для IP-заголовка должен начинаться с поля ver_lenIP, и просчитывать 20 байт, а я указал (ошибочно), чтобы начинался расчет с поля all00, т.е. сдвинул на один байт вправо. При этом НИОС/Фаст все нормально расчитывал, а вот НИОС/Эконом выдавал кривую CRC, из-за чего я и обнаружил свой косяк в указании начального адреса расчета CRC. Поэтому и началось обсуждение типов НИОСов и их обращение к памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 марта, 2014 Опубликовано 13 марта, 2014 · Жалоба тогда битность шины не причем, был бы сдвиг в плюс это можно было бы обосновать выравниванием. А сдвиг в минус, никак не объясним... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 13 марта, 2014 Опубликовано 13 марта, 2014 · Жалоба Если шина 32-хбитная, и мы указываем на 2-ой или 3-тий байт ячейки, то эта ячейка будет задействована полностью, начиная с 1-го байта, т.о. будем иметь сдвиг по адресу влево, в сторону уменьшения. Если посмотреть на шину Авалон, то эта ситуация очень видна, НО в этой шине все (имею в виду побайтовое обращение) разруливается доп.сигналами byteenable. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serhiy_UA 1 13 марта, 2014 Опубликовано 13 марта, 2014 · Жалоба Вот моя структура пакета в .h-файле У меня структура UDP-пакетов несколько схожая, но отличается служебными словами PACKED, у них тоже была своя роль... //------------------- UDPFRAME typedef struct udphdr { //8 bytes u_short uh_sport PACKED; /*!< \brief Source port */ u_short uh_dport PACKED; /*!< \brief Destination port */ u_short uh_ulen PACKED; /*!< \brief UDP length */ u_short uh_sum PACKED; /*!< \brief UDP checksum */ } UDPHDR; struct UDPFRAME { ETHERHDR eth_hdr PACKED; //14 bytes IPHDR ip_hdr PACKED; //20 bytes UDPHDR udp_hdr PACKED; // 8 bytes u_char md[1472] PACKED; // + (22..1476) bytes }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться