|
|
  |
Нет прерываний от модуля Ethernet. |
|
|
|
Oct 11 2013, 09:58
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата(Oleg_IT @ Oct 11 2013, 13:25)  Потому и нужны какие-то дефайны, по которым определяется нужно делать swap или нет. Тут ещё сложность не только в порядке байт, но и в порядке бит в битовых полях. нет... Big и Litlle меняет только порядок байт. Битовые поля не могу разворачиваться. Возможно среда ставить какой то дефайн при выборе байт ордера, только вопрос, а вам то оно зачем? Вы пишите универсальный модуль или просто все время забываете какой порядок вы используете  ? Если модуль универсальный - то сделайте свой дефайн, в случае которого вы переводите все в Big, а по умолчанию делайте в Little как более популярном... П.С. повернутый порядок бит - это очень странно, у вас нет никаких рукописных UART на пути следования данных, потому что только они имеют тенденцию биты поворачивать. Если нет, остается проверить стандарты езернет, нет ли какого флажка в заголовках по этому поводу, но очень маловероятно, так как даже этот флажок фиг найдешь если он все время в разных местах... Вообщем про поворот порядка бит я озадачен...
|
|
|
|
|
Oct 11 2013, 10:29
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(Golikov A. @ Oct 11 2013, 13:58)  нет... Big и Litlle меняет только порядок байт. Битовые поля не могу разворачиваться. Возможно среда ставить какой то дефайн при выборе байт ордера, только вопрос, а вам то оно зачем? Вы пишите универсальный модуль или просто все время забываете какой порядок вы используете  ? Если модуль универсальный - то сделайте свой дефайн, в случае которого вы переводите все в Big, а по умолчанию делайте в Little как более популярном... П.С. повернутый порядок бит - это очень странно, у вас нет никаких рукописных UART на пути следования данных, потому что только они имеют тенденцию биты поворачивать. Если нет, остается проверить стандарты езернет, нет ли какого флажка в заголовках по этому поводу, но очень маловероятно, так как даже этот флажок фиг найдешь если он все время в разных местах... Вообщем про поворот порядка бит я озадачен... Я теже озадачен, но по факту так Код typedef struct TCP_Head_tag { uint16_t SRC_Port; // Порт отправителя uint16_t DST_Port; // Порт получателя uint32_t SeqNum; // Sequence Number uint32_t AckNum; // Acknowledgment Number union { struct { uint16_t FIN : 1; // No more data from sender uint16_t SYN : 1; // Synchronize sequence numbers uint16_t RST : 1; // Reset the connection uint16_t PSH : 1; // Push Function uint16_t ACK : 1; // Acknowledgment field significant uint16_t URG : 1; // Urgent Pointer field significant uint16_t Res1 : 6; //: 4; // Reserved - 0 uint16_t DOff : 4; // Data Offset - 5 }; uint16_t L1; }; /* union { struct { uint16_t DOff : 4; // Data Offset - 5 uint16_t Res1 : 6; //: 4; // Reserved - 0 uint16_t URG : 1; // Urgent Pointer field significant uint16_t ACK : 1; // Acknowledgment field significant uint16_t PSH : 1; // Push Function uint16_t RST : 1; // Reset the connection uint16_t SYN : 1; // Synchronize sequence numbers uint16_t FIN : 1; // No more data from sender }; uint16_t L1; }; */ uint16_t Window; // Window - - uint16_t Checksum; // Checksum uint16_t UrgPoint; // Urgent Pointer } TCP_Head; Закомментированное по стандарту, а рабочее, что бы на стороне PC все правильно воспринималось, не закомментированное. И ещё swap на L1 нужен. Может я в чём-то ошибаюсь. Поправьте.
|
|
|
|
|
Oct 12 2013, 11:05
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Oleg_IT @ Oct 11 2013, 15:29)  Закомментированное по стандарту, а рабочее, что бы на стороне PC все правильно воспринималось, не закомментированное. Расположение битовых полей в объединении определяется реализацией компилятора. Вы уверены, что ваш компилятор располагает битовые поля именно в порядке от старшего бита к младшему (как у Вас в закомментаренном фрагменте), а не наоборот (как в раскомментаренном)? И, надеюсь, Вы понимаете, что из-за того что Вы закладываетесь на определенную реализацию компилятора, Ваш код становится непереносимым?
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Oct 14 2013, 05:58
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(alx2 @ Oct 12 2013, 15:05)  Расположение битовых полей в объединении определяется реализацией компилятора. Вы уверены, что ваш компилятор располагает битовые поля именно в порядке от старшего бита к младшему (как у Вас в закомментаренном фрагменте), а не наоборот (как в раскомментаренном)?
И, надеюсь, Вы понимаете, что из-за того что Вы закладываетесь на определенную реализацию компилятора, Ваш код становится непереносимым? Догадываюсь, потому и хочу разграничить версии соответствующими дефайнами. Цитата(Golikov A. @ Oct 11 2013, 15:42)  union { struct { uint16_t FIN : 1; // No more data from sender uint16_t SYN : 1; // Synchronize sequence numbers uint16_t RST : 1; // Reset the connection uint16_t PSH : 1; // Push Function uint16_t ACK : 1; // Acknowledgment field significant uint16_t URG : 1; // Urgent Pointer field significant uint16_t Res1 : 6; //: 4; // Reserved - 0 uint16_t DOff : 4; // Data Offset - 5 }; uint16_t L1; };
Л1 - 16 бит это че? Сразу после флагов же окно идет uint16_t Window; а у вас оно идет через какие то 16 бит Л1. Плюс еще вопрос как структура с 1 битными полями в памяти раскладывается... Выравнивание может сыграть злую шутку... Так это же юнион, struct и L1 это два инени оного и того же куска пямяти размером два байта. А про выравнивание я не сказал, пользуюсь Код #pragma push #pragma pack(1) …………………… #pragma pop
|
|
|
|
|
Oct 15 2013, 11:16
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
во всех системах Big Enadian не нужен во всех системах Litle Endian нужен. потому делаете дефайн Код #define LITTLE_ENDIAN_MODE 1 и везде в вашем коде пишете Код #ifdef LITTLE_ENDIAN_MODE swap #elseif not_swap #endif определять этот дефайн или нет оставляете тому кто пользуется написанным вами софтом, так как только этот человек знает какой у него режим работы... причем этот дефайн можно тянуть не по всему тексту а сделать функцию swap_if_need, и в ней дефайн проверить, и сваповать если надо.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|