|
|
  |
Нет прерываний от модуля Ethernet. |
|
|
|
Oct 15 2013, 13:29
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
Цитата(Oleg_IT @ Oct 15 2013, 16:33)  Самому определять это понятно, а в компиляторе такой информации нет? Есть. Для GCC есть предопределенные макро, например, для arm-none-eabi-gcc (arm-none-eabi-g++) Код #define __ORDER_LITTLE_ENDIAN__ 1234 #define __ORDER_BIG_ENDIAN__ 4321 #define __ORDER_PDP_ENDIAN__ 3412 #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ #define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Oct 15 2013, 13:36
|
Знающий
   
Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840

|
Цитата(Oleg_IT @ Oct 15 2013, 16:33)  Самому определять это понятно, а в компиляторе такой информации нет? Цитата The common predefined macros are GNU C extensions. They are available with the same meanings regardless of the machine or operating system on which you are using GNU C or GNU Fortran. Their names all start with double underscores
__BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ __ORDER_BIG_ENDIAN__ __ORDER_PDP_ENDIAN__ __BYTE_ORDER__ is defined to one of the values __ORDER_LITTLE_ENDIAN__, __ORDER_BIG_ENDIAN__, or __ORDER_PDP_ENDIAN__ to reflect the layout of multi-byte and multi-word quantities in memory. If __BYTE_ORDER__ is equal to __ORDER_LITTLE_ENDIAN__ or __ORDER_BIG_ENDIAN__, then multi-byte and multi-word quantities are laid out identically: the byte (word) at the lowest address is the least significant or most significant byte (word) of the quantity, respectively. If __BYTE_ORDER__ is equal to __ORDER_PDP_ENDIAN__, then bytes in 16-bit words are laid out in a little-endian fashion, whereas the 16-bit subwords of a 32-bit quantity are laid out in big-endian fashion. You should use these macros for testing like this:
/* Test for a little-endian machine */ #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ Common-Predefined-Macros.html
|
|
|
|
|
Oct 16 2013, 11:12
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(Oleg_IT @ Oct 15 2013, 12:32)  Я вас сходу по флажкам не понял. Переделал, работает. Поторопился я радоватся, что битовый массив, что Код #define FLAG_1 1
........................ Flags |= (1 << FLAG_1); одно и тоже.
|
|
|
|
|
Oct 17 2013, 07:25
|

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

|
Цитата(Oleg_IT @ Oct 16 2013, 16:12)  Поторопился я радоватся, что битовый массив, Что такое "битовый массив"? Цитата(Oleg_IT @ Oct 16 2013, 16:12)  что Код #define FLAG_1 1
........................ Flags |= (1 << FLAG_1); одно и тоже. Что "одно и то же"? Опишите подробнее, что, как Вам кажется, неправильно с приведенным вариантом. Например, если у Вас в переменной Flags лежат флаги TCP, то приведенный Вами код установит флаг SYN. И этот код (в отличие от битовых полей в объединении) уже не зависит от реализации компилятора...
Сообщение отредактировал alx2 - Oct 17 2013, 07:27
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Oct 17 2013, 08:18
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(alx2 @ Oct 17 2013, 11:25)  Что такое "битовый массив"? Ошибся, битовое поле. Цитата(alx2 @ Oct 17 2013, 11:25)  Что "одно и то же"? Опишите подробнее, что, как Вам кажется, неправильно с приведенным вариантом. Например, если у Вас в переменной Flags лежат флаги TCP, то приведенный Вами код установит флаг SYN. И этот код (в отличие от битовых полей в объединении) уже не зависит от реализации компилятора... Если я битовом поле Код 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; }; бит SYN, первый бит, ставлю в 1, то это будет тоже сомое, что Код L1 |= (1 << 1) Проверено.
|
|
|
|
|
Oct 17 2013, 17:42
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата(Oleg_IT @ Oct 17 2013, 12:18)  Проверено. и что? ну значит ваш компилятор переворачивает битовые поля в другой порядок. Смысл то как раз избавить от этого и всю структуру битовых полей выкинут нафиг, заменить ее обычным 16 битным числом, куда честно ставить флаги, на те места где они должны быть, однозначно, независимо от компилятора...
Сообщение отредактировал IgorKossak - Oct 17 2013, 18:16
Причина редактирования: избыточное цитирование
|
|
|
|
|
Oct 18 2013, 11:40
|

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

|
Цитата(Oleg_IT @ Oct 18 2013, 10:20)  Так ни битовые поля, ни работа с флагами задачу не решают. Вы по-моему не понимаете, что имеете дело с двумя разными проблемами: 1. Проблема порядка байт с ловах (Big/Little endianness). Она решается использованием стандартных функций htonl/ntohl/htons/ntohs. 2. Проблема порядка расплоложения битовых полей в структуре/объединении. Она решается отказом от использования битовых полей в данном случае. Я говорил исключительно о второй проблеме. И обратил Ваше внимание на то, что код Flags |= TCP_FLAG_SYN; переносим, а код Flags.SYN = 1; - нет, так как порядок следования битовых полей может быть разным в разных компиляторах. Цитата(Golikov A. @ Oct 18 2013, 15:18)  порядок байт из за того что у вас АРМ наверняка Litle endian, и потому он тоже другой. Но сменив процессор на тот в котором Big, такие бывают... у вас опять все навернется от того вам советовали сделать дефайн... Вот поэтому и надо по возможности использовать htnl/nthl для преборазования из формата слов. Если хост little-endian, эти функции будут менять порядок байт в слове. Если хост big-endian - вернут свой аргумент в неизменном виде. Тогда при смене хоста ничего не навернется...
Сообщение отредактировал alx2 - Oct 18 2013, 11:51
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|