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

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> Нет прерываний от модуля Ethernet.
Golikov A.
сообщение Oct 18 2013, 20:50
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



нет там такого поля 13 бит
есть поле 16 бит, и 3 бита в резерве....


дефайны наше все! Мы же работает на железном уровне, а не кнопки в бездушных программках рисуем%)

Цитата(alx2 @ Oct 18 2013, 15:40) *
Вот поэтому и надо по возможности использовать htnl/nthl для преборазования из формата слов. Если хост little-endian, эти функции будут менять порядок байт в слове. Если хост big-endian - вернут свой аргумент в неизменном виде. Тогда при смене хоста ничего не навернется...


а как они кстати тип хоста узнают? все равно же какой то дефайн ест, или они при инициализации тест делают чтение - записьsm.gif?
Go to the top of the page
 
+Quote Post
alx2
сообщение Oct 19 2013, 12:55
Сообщение #47


Местный
***

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



Цитата(Golikov A. @ Oct 19 2013, 01:50) *
а как они кстати тип хоста узнают? все равно же какой то дефайн ест, или они при инициализации тест делают чтение - записьsm.gif?

В случае нативной сборки (без кросс-компиляции) такие вещи можно узнать на этапе конфигурации (при выполнении скрипта configure). Например в autoconf есть макрос AC_C_BIGENDIAN, который при обнаружении big-endian хоста генерирует дефайн WORDS_BIGENDIAN.

В случае кросс-компиляции, наверное, для каждой target-архитектуры есть набор предопределенных дефайнов (если их не определяет сам компилятор). Можно, наверное, посмотреть, как это сделано, например, в glibc. Сам я специально этим не интересовался.

То есть да, какой-то дефайн наверняка все равно где-то есть, но главное, что это проблема библиотеки (и ее авторов), а не программиста, эту библиотеку использующего. Я как пользователь просто пишу в своем коде ntohl(), и могу не задумываться о том, как оно в коде библиотеки устроено, а могу сосредоточиться на своем собственном коде.

Конечно, если в библиотеке нет htonl/ntohl - тогда да, придется самому делать соответствующие дефайны и потом заботиться об их переопределении в случае смены целевой архитектуры...


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Oct 19 2013, 18:22
Сообщение #48


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(Golikov A. @ Oct 19 2013, 00:50) *
нет там такого поля 13 бит

Не правда Ваша, по ссылке пункт 3.1 "Fragment Offset"
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 20 2013, 05:06
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(Oleg_IT @ Oct 19 2013, 22:22) *
Не правда Ваша, по ссылке пункт 3.1 "Fragment Offset"


моя правда
это 13 бит от общего служебного поля
Флаги + офсет, в сумме которое 16 бит.

надеюсь версию вы не считает 4 битным полем?

http://securos.org.ua/potencialno-uyazvimy...rotokole-tcpip/
Думаю самое правильное воспринимать заголовки
как 32 или 2 по 16, либо комбинация 2 по 8 и 16 бит.
Все более мелкие разделения должны входить в эти группы.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение Oct 20 2013, 09:14
Сообщение #50


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(Golikov A. @ Oct 20 2013, 09:06) *
Думаю самое правильное воспринимать заголовки
как 32 или 2 по 16, либо комбинация 2 по 8 и 16 бит.
Все более мелкие разделения должны входить в эти группы.

С этим спорить не буду, там более, что заголовки так и задумывались как 32 битные. Думаю, что к заголовкам вообще ни какие свапы применять нельзя, они, заголовки, должны изначально строится под конкретную архитектуру, пусть с дефайнами. А htonl/ntohl и пр... применимы только к данным.
По поводу данных. Кто мне помешает ради экономии памяти сделать поля 13 и 3 бита а 16 битном слове. Как в этом случае быть с htonl/ntohl?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 20 2013, 11:40
Сообщение #51


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну как минимум вам мешают 2 вещи
1. это htonl/ntohl
2. это что нет стандартного типа данных 3 или 13 бит. А все остальные битовые поля компиляторо-зависимые. Проблем наживет, памяти не выиграете. Поставив поля 3 и 13 бит скорее всего будет 2 поля 8 + 16 бит, с вырезкой не пойми какой, ИМХО больше памяти пойдет чем на одно 16 битное поле.

Кстати как раз все кручение с биг и литл идет именно в заголовках. Так как в данных они лежат как послали. Компьютеры тоже Litle Endian, так что данные трогать не надо.

У вас есть некоторое непонимание происходящего, мне кажется. Если вы кладете 8 бит в 5 ячейку памяти, она так по езернету и пойдет, эти 8 бит так и останутся в 5 ячейе, никто их не переложит. Положите 16 бит, они так и будут там лежать, никто их не возьмет и не повернет.

Проблемы связаны с тем что если у вас есть 16 битное число 0xAABB в нулевой ячейке памяти, то в памяти оно ляжет в нулевую 0xBB, а в первую 0xAA, а в езернете наоборот. Соответственно когда по езернету к вам идет число 0xAABB, оно лежит в нулевой ячейке 0xAA, а в первой 0xBB, а процессор забирая его из памяти перевернет данные и вы получите 0xBBAA, потому их и надо свапануть, но это верно только если вы данные в память кладете и берете из нее словами.

Но никто вам не мешает класть данные руками по байтам, берем например число int Temp = 0xAABB. положите в 0 ячейку ((Temp >> 8)&0xFF),а в первую (Temp & 0xFF), и всех делов, сработает в любой системе хоть биг хоть литл.
И обратно
char *Data;
Temp = ((int)Data[0]<<8)|Data[1]); Опять же верно интерпретирует пришедшие по езернет данные в любой системе.



Go to the top of the page
 
+Quote Post

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

 


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


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