Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Cетевые протоколы и технологии

Cетевые протоколы и технологии TCP/IP стек

Ответ
 
Опции темы Опции просмотра
Старый 11.11.2016, 13:40   #26
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от yeskela Посмотреть сообщение
http://git.savannah.gnu.org/cgit/lwi...e74d4a1c9f0ac5

Эта ошибка, согласно логу была исправлена 08.09.2016. Скорей всего диск был записан раньше
Это не та ошибка, там про обычные скобки не упоминается. И в оригинальных версиях с сайта её нет.
Если я правильно понял, то текст по ссылке:
Код:
-#define LWIP_ASSERT(message, assertion) do { if(!(assertion)) \
-  LWIP_PLATFORM_ASSERT(message); } while(0)
+#define LWIP_ASSERT(message, assertion) do { if (!(assertion)) { \
+  LWIP_PLATFORM_ASSERT(message); }} while(0)
нужно понимать как "минус - убрать, плюс - добавить". И там фигурные скобки.
Она есть только в каталоге на диске:
Есть: LWIP_PLATFORM_DIAG message
Должно быть:LWIP_PLATFORM_DIAG(message)
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 11.11.2016 в 13:48.
Pridnya вне форума   Ответить с цитированием
Старый 11.11.2016, 14:27   #27
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

В связи с обнаружением различий по размеру и дате каждого файла в каталогах
(различается первый комментарий и количество непечатных символов в конце каждой
строки файла (из-за различия кодировок UNIX и Dos\Windows)):
lwip_v1.3.2\ - каталог с примерами с диска к DM-STF4BB плюс каталог port\ в нем.
lwip-STABLE-1_3_2 - оригинальный каталога с сайта.
Добавляю каталог port\ из неоригинального каталога lwip_v1.3.2\ в оригинальный каталог lwip-STABLE-1_3_2.
Переименовываю lwip_v1.3.2\ в lwip_v1.3.2_no_orig (сохраняю на всякий случай).
Переименовываю lwip-STABLE-1_3_2 в lwip_v1.3.2\, чтобы не менять пути.
Собираю проект.
В файл tcp_echoserver.c включаю файл stdio.h, т.к. использую отладочные сообщения,
которые выводятся в UART на скорости 115200.
#include <stdio.h> // printf().
Проект собрался без ошибок.
ModbusTCP-сервер работает, UDP-клиент работает.
Стек оригинальный, все файлы стека совпадают с lwip-STABLE-1_3_2 (по размеру и дате),
отличие в наличии каталога port\ (для STM32F4xx).
Синхронизировался. Можно теперь у кого-нибудь спрашивать, если что не так.
GitHub пока не потребовался.
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 11.11.2016 в 14:33.
Pridnya вне форума   Ответить с цитированием
Старый 11.11.2016, 14:30   #28
siarzhuk
Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 46
Сообщений: 82
Вес репутации: 761/16
siarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to behold
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Кто-нибудь знает, зачем Адам в файле cc.h (в котором определяются компилятороспецифические опции) переопределяет стандартные типы данных (unsigned char...), а не использует стандартный файл (который должен быть везде) stdint.h
Обычно такое творят чтобы отвязаться от причуд толпы компиляторов. Вероятно, 14 лет назад stdint.h был не так должен везде присутствовать как сейчас.

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Обмен байтов в полуслове (16 бит) расписал на кучу строк и имя придумал не читабельное, например SwapUint16(), а htons().
htonX - это POSIX.
siarzhuk вне форума   Ответить с цитированием
Старый 11.11.2016, 15:02   #29
yeskela
Senior Member
 
Аватар для yeskela
 
Регистрация: 28.01.2010
Адрес: Новочеркасск
Возраст: 34
Сообщений: 1,048
Вес репутации: 3282/68
yeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Это не та ошибка
Да, похоже так.

Цитата:
Сообщение от Pridnya
GitHub пока не потребовался.
Cистема контроля версий git и хостинг проектов GitHub это разные вещи. Git вполне работает автономно. И GitHub не единственный хостинг проектов.

И я бы посоветовал не пожалеть времени, разобраться с любой системой контроля версий. Git (по моему мнению) сложноват как первая в жизни vcs (особоенно для нелинуксоида). Можно subversion, можно mercurial. Потом не будете представлять себе, как жили без этого)
__________________
Отсутствие доступа в интернет с рабочего места очень замедляет работу. Наличие - полностью парализует её.
yeskela вне форума   Ответить с цитированием
Старый 11.11.2016, 15:26   #30
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

htonX - это POSIX.[/QUOTE]
С этим понятно. Это он не сам придумал, это стандарт.
Цитата:
Есть вычислительные системы, в которых старший байт числа имеет меньший адрес, чем младший байт (big-endian byte order), а есть вычислительные системы, в которых старший байт числа имеет больший адрес, чем младший байт (little-endian byte order). При передаче целой числовой информации от машины, имеющей один порядок байт, к машине с другим порядком байт мы можем неправильно истолковать принятую информацию. Для того чтобы этого не произошло, было введено понятие сетевого порядка байт, т.е. порядка байт, в котором должна представляться целая числовая информация в процессе передачи ее по сети (на самом деле – это big-endian byte order). Целые числовые данные из представления, принятого на компьютере-отправителе, переводятся пользовательским процессом в сетевой порядок байт, в таком виде путешествуют по сети и переводятся в нужный порядок байт на машине-получателе процессом, которому они предназначены. Для перевода целых чисел из машинного представления в сетевое и обратно используется четыре функции: htons() , htonl() , ntohs() , ntohl()
Windows x86: little-endian byte order
STM32 (ARM): little-endian byte order
А сетевой порядок байт: big-endian byte order, поэтому приходится менять байты местами. Хотя есть упоминания в Википедии Порядок байтов про переключаемый порядок байтов у ARM. Но в файле cpu.h (port\ - порт стека для STM32) задан: #define BYTE_ORDER LITTLE_ENDIAN
Цитата:
Сообщение от siarzhuk Посмотреть сообщение
Обычно такое творят чтобы отвязаться от причуд толпы компиляторов. Вероятно, 14 лет назад stdint.h был не так должен везде присутствовать как сейчас.
А вот с этим совсем не понятно. Сейчас везде есть stdint.h.
PS: Возможно, что из-за порядка байтов некорректно использовать.
Цитата:
Сообщение от yeskela Посмотреть сообщение
Cистема контроля версий git и хостинг проектов GitHub это разные вещи. Git вполне работает автономно. И GitHub не единственный хостинг проектов.

И я бы посоветовал не пожалеть времени, разобраться с любой системой контроля версий. Git (по моему мнению) сложноват как первая в жизни vcs (особоенно для нелинуксоида). Можно subversion, можно mercurial. Потом не будете представлять себе, как жили без этого)
Похоже, что придется освоить. Надоело архивировать и хранить хлам. Про эти системы раньше на форуме никто часто не разговаривал, а теперь уже несколько человек упомянули, что пользуются.
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 11.11.2016 в 15:40.
Pridnya вне форума   Ответить с цитированием
Старый 14.11.2016, 16:09   #31
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Прикольно! Первый раз такое вижу в файле от ST
stm32f4x7_eth_conf.h - Configuration file for the STM32F4x7 Ethernet driver.
при определении макроса между директивой и макросом непечатные символы.
Случайно обнаружил при просмотре исходников в notepad++ с включенной опцией "отображать непечатные симолы".
Сто процентов - машина генерила или кто-то ручками подправил. А откуда им взяться?
Миниатюры
Вместо пробелов непечатные символы.PNG   Вместо пробелов 0x20 символы 0x09.PNG  
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 14.11.2016, 16:16   #32
yeskela
Senior Member
 
Аватар для yeskela
 
Регистрация: 28.01.2010
Адрес: Новочеркасск
Возраст: 34
Сообщений: 1,048
Вес репутации: 3282/68
yeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Pridnya Посмотреть сообщение
при определении макроса между директивой и макросом непечатные символы.
0x09 что ли? Это табуляция. Для компилятора всё одно с пробелом 0x20.
__________________
Отсутствие доступа в интернет с рабочего места очень замедляет работу. Наличие - полностью парализует её.
yeskela вне форума   Ответить с цитированием
Старый 14.11.2016, 16:24   #33
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от yeskela Посмотреть сообщение
0x09 что ли? Это табуляция. Для компилятора всё одно с пробелом 0x20.
Но почему первый макрос с пробелами PHY_100BTX_FULL, а 2-4-й с табуляцией? Форматирование может сбиться. Такого не должно быть, если машина форматирует.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 14.11.2016, 16:27   #34
yeskela
Senior Member
 
Аватар для yeskela
 
Регистрация: 28.01.2010
Адрес: Новочеркасск
Возраст: 34
Сообщений: 1,048
Вес репутации: 3282/68
yeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Но почему первый макрос с пробелами PHY_100BTX_FULL, а 2-4-й с табуляцией?
Скорей всего ctrl+c ctrl+v, а причесыванием стиля перед коммитом не пользуются.
__________________
Отсутствие доступа в интернет с рабочего места очень замедляет работу. Наличие - полностью парализует её.
yeskela вне форума   Ответить с цитированием
Старый 15.11.2016, 16:24   #35
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от yeskela Посмотреть сообщение
Скорей всего ctrl+c ctrl+v, а причесыванием стиля перед коммитом не пользуются.
Да и я стормозил, у самого есть файлы, то пробелы, то табуляция, а потом форматирование разваливается. Есть даже исследования (статистика на сотнях тысяч текстов?), что лучше использовать, вроде от гугла, вроде как большинство используют пробелы.

А может ли мне кто ответить на вопрос:
Для старых версий LwIP, например lwIP v1.3.2 нет документации, подобной той, которую может сгенерить Doxygen.
В новой версии lwip-STABLE-2_0_0_RC2 есть каталог doc\, но в нем только файл конфигурации (?) lwip.Doxyfile.
Я этот файл открыл программой Doxygen v1.8.8, нажал несколько раз кнопку Next, затем RunDoxygen (как обезьяна, можно было и случайно нажать) и она мне сгенерила каталоги output\doc\ и в нем много разных файлов CSS, HTML, JS, PNG.
Я нашел файл index.html (это главный файл для HTML), создал ярлык, поместил в удобное место, открываю браузером и пользуюсь документацией. Удобно. А я другого и не знаю пока. На скриншоте видно:

А вот можно ли такую документацию сгенерить для lwip-STABLE-1_3_2 при отсутствии файла lwip.Doxyfile (и других каких)? И что для этого нужно сделать. Может, кто сгенерил уже? Ведь, судя по синтаксису в исходниках, они были подготовлены к созданию документации.

Код:
/**
 * Send an ARP request packet asking for ipaddr.
 *
 * @param netif the lwip network interface on which to send the request
 * @param ipaddr the IP address for which to ask
 * @return ERR_OK if the request has been sent
 *         ERR_MEM if the ARP packet couldn't be allocated
 *         any other err_t on failure
 */
err_t
etharp_request(struct netif *netif, struct ip_addr *ipaddr)
{
  LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_request: sending ARP request.\n"));
  return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, &ethbroadcast,
                    (struct eth_addr *)netif->hwaddr, &netif->ip_addr, &ethzero,
                    ipaddr, ARP_REQUEST);
}
Миниатюры
LwIP v2.PNG  
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 15.11.2016, 16:33   #36
yeskela
Senior Member
 
Аватар для yeskela
 
Регистрация: 28.01.2010
Адрес: Новочеркасск
Возраст: 34
Сообщений: 1,048
Вес репутации: 3282/68
yeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Pridnya Посмотреть сообщение
А вот можно ли такую документацию сгенерить для lwip-STABLE-1_3_2 при отсутствии файла lwip.Doxyfile
То что сможет, Doxy вытащит. Без красивых описаний функций, но перечень с графом вызовов должен нарисовать. Перетащи doxyfile в старый проект, да попробуй запусить.
__________________
Отсутствие доступа в интернет с рабочего места очень замедляет работу. Наличие - полностью парализует её.
yeskela вне форума   Ответить с цитированием
Старый 16.11.2016, 09:51   #37
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от yeskela Посмотреть сообщение
То что сможет, Doxy вытащит. Без красивых описаний функций, но перечень с графом вызовов должен нарисовать. Перетащи doxyfile в старый проект, да попробуй запусить.
Если просто перетащить lwip.Doxyfile (107 килобайт для Doxygen 1.8.11) из каталога lwip-STABLE-2_0_0_RC2\doc\doxygen\ в каталог lwip-STABLE-1_3_2\, то генерит одну страницу с заголовком для LwIP2.0, похоже, что файл lwip.Doxyfile нужно править под конкретный проект.

В этой сборке (есть два варианта lwIP 2.0) lwip-STABLE-2_0_0_RC1 файл lwip.Doxyfile (11 килобайт и создан Doxygen 1.5.4) и в нем остались хвосты от LwIP 1.3.0, кто-то забыл исправить
Цитата:
# Doxyfile 1.5.4

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "lwIP 1.3.0"
PROJECT_NUMBER = "lwIP 1.3.0"
OUTPUT_DIRECTORY = C:/OPENSOURCE/LwIP/doxygen
...
INPUT = C:\OPENSOURCE\lwip\lwip
INPUT_ENCODING = UTF-8
С файлом 11 килобайт (из v2 RC1) вроде как получилось:
Миниатюры
Doxygen_lwip-STABLE-1_3_2.PNG  
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 16.11.2016 в 10:07.
Pridnya вне форума   Ответить с цитированием
Старый 16.11.2016, 10:21   #38
yeskela
Senior Member
 
Аватар для yeskela
 
Регистрация: 28.01.2010
Адрес: Новочеркасск
Возраст: 34
Сообщений: 1,048
Вес репутации: 3282/68
yeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Pridnya Посмотреть сообщение
.Doxyfile нужно править под конкретный проект.
INPUT = C:\OPENSOURCE\lwip\lwip должно как минимум на корень исходников показывать. можно относительный путь.
Output - очевидно, папка для документации
__________________
Отсутствие доступа в интернет с рабочего места очень замедляет работу. Наличие - полностью парализует её.
yeskela вне форума   Ответить с цитированием
Старый 16.11.2016, 10:48   #39
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от yeskela Посмотреть сообщение
INPUT = C:\OPENSOURCE\lwip\lwip должно как минимум на корень исходников показывать. можно относительный путь.
Output - очевидно, папка для документации
Это я уже понял. Все каталоги создал и положил куда нужно. Doxygen сам не смог создать каталоги, написал "не могу создать каталог...".
Он еще кроме HTML-версии создал RTF-версию. Я её открываю в LibreOfficeWriter, но она сыровата, там нет подсветки синтаксиса, перекрестных ссылок, наверное, ссылки вручную нужно расставить, чтобы после экспорта RTF в формат PDF пользоваться навигацией по тексту.

Точно нужно настраивать файл конфигурации Doxygen под конкретный проект. Например, в файле etharp.h много директив условной компиляции, а Doxygen (вроде?) понимает, что они не включены и соответственно отключает строки из файла, в HTML-версии получается пустой файл etharp.h, а в нем 193 строки.
Миниатюры
RTF.PNG   с vs html.PNG  
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 16.11.2016 в 11:01.
Pridnya вне форума   Ответить с цитированием
Старый 22.11.2016, 13:56   #40
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Здравствуйте!
Если в проекте определен макрос NO_SYS (у меня нет RTOS и он определен), то файл sys.c целиком исключается директивой препроцессора:
#if (NO_SYS == 0)
...
#endif
а в файле sys.h остается кусок кода, который исключать нельзя (проект зависит от этого куска).
В этом куске кода есть макрос sys_sem_signal(s), который как-то странно определен:
Код:
#if NO_SYS
// Без операционной системы используется только этот фрагмент (/// - мои комментарии).
/* For a totally minimal and standalone system, we provide null
   definitions of the sys_ functions. */
                                   // Используется в файле:
typedef u8_t sys_sem_t;            // mem.c
///typedef u8_t sys_mbox_t;
///struct sys_timeo {u8_t dummy;};

#define sys_init()                 // init.c
///#define sys_timeout(m,h,a)
///#define sys_untimeout(m,a)
#define sys_sem_new(c) c           // mem.c
#define sys_sem_signal(s)          // mem.c
///#define sys_sem_wait(s)
///#define sys_sem_wait_timeout(s,t)
#define sys_arch_sem_wait(s,t)     // mem.c
///#define sys_sem_free(s)
///#define sys_mbox_new(s) 0
///#define sys_mbox_fetch(m,d)
///#define sys_mbox_tryfetch(m,d)
///#define sys_mbox_post(m,d)
///#define sys_mbox_trypost(m,d)
///#define sys_mbox_free(m)

///#define sys_thread_new(n,t,a,s,p)

#else /* NO_SYS */
Используется так:
Код:
typedef uint8_t sys_sem_t; 
#define sys_sem_signal(s)
#define sys_sem_new(c) c
/** concurrent access protection */
static sys_sem_t mem_sem;

printf("mem_set1 = %d\n", mem_sem); // 0
mem_sem = sys_sem_new(1);           // Это другой макрос, он устанавливает mem_sem.
printf("mem_set2 = %d\n", mem_sem); // 1
sys_sem_signal(mem_sem);            // Этот макрос ничего не делает.
Зачем нужен такой пустой макрос? Кстати, он есть в версиях 1.3.2 - 2.0.0.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 22.11.2016, 15:01   #41
siarzhuk
Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 46
Сообщений: 82
Вес репутации: 761/16
siarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to behold
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Зачем нужен такой пустой макрос?
Чтобы в каждом месте где требуется функционал, стоящий за этим макросом в случае использования OS не нужно было городить:
Код:
#ifndef NO_SYS
      sys_sem_signal(s);
#endif
т.е. в зависимости от определения NO_SYS препроцессор разворачивает либо в реальный вызов системной процедуры, либо просто оставляет пустую строку. Проще код - спокойнее его обозреватели.
siarzhuk вне форума   Ответить с цитированием
Старый 22.11.2016, 15:21   #42
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от siarzhuk Посмотреть сообщение
Чтобы в каждом месте где требуется функционал, стоящий за этим макросом в случае использования OS не нужно было городить:
Код:
#ifndef NO_SYS
      sys_sem_signal(s);
#endif
т.е. в зависимости от определения NO_SYS препроцессор разворачивает либо в реальный вызов системной процедуры, либо просто оставляет пустую строку. Проще код - спокойнее его обозреватели.
Понял! Спасибо! Я эту возможность языка еще не использовал, всегда добавлял #ifdef...#ifndef...А оно не всегда обязательно.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 13.12.2016, 15:26   #43
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

А стек же еще и примеры содержит. Например SNTP-клиент. Смотрим пример (код с моими комментариями):
Не ожидал такой лажи от создателей примеров lwIP contrib-1.4.1, sntp.c.
Клиент получает структуру (ответ на запрос с метками времени):
Код:
#define SNTP_OFFSET_ORIGINATE_TIME  24
#define SNTP_OFFSET_RECEIVE_TIME    32
#define SNTP_OFFSET_TRANSMIT_TIME   40
...
struct sntp_msg {
PACK_STRUCT_FIELD(u8_t  li_vn_mode);
PACK_STRUCT_FIELD(u8_t  stratum);
PACK_STRUCT_FIELD(u8_t  poll);
PACK_STRUCT_FIELD(u8_t  precision);
PACK_STRUCT_FIELD(u32_t root_delay);
PACK_STRUCT_FIELD(u32_t root_dispersion);
PACK_STRUCT_FIELD(u32_t reference_identifier);
PACK_STRUCT_FIELD(u32_t reference_timestamp[2]); // Время синхронизации сервера.
PACK_STRUCT_FIELD(u32_t originate_timestamp[2]);  // Метка времени клиента (для проверки ответа на свой запрос)
PACK_STRUCT_FIELD(u32_t receive_timestamp[2]);    // Время получения запроса сервером
PACK_STRUCT_FIELD(u32_t transmit_timestamp[2]);   // Время на момент отправки ответа сервером.
};
...
static void sntp_recv(void *arg, struct udp_pcb* pcb, struct pbuf *p, ip_addr_t *addr, u16_t port)
{
...
  // Создается новый массив для полученной эталонной метки времени.
  u32_t receive_timestamp[SNTP_RECEIVE_TIME_SIZE]; 
...
  /*И в новый массив копируется метка "Время получения запроса сервером", при этом сколько времени
  сервер потратил на обработку запроса никого не интересует. А другие SNTP-клиенты копируют "Время на момент  отправки ответа сервером", 
  в этом случае задержка сервера не имеет значения.*/
  pbuf_copy_partial(p, &receive_timestamp, SNTP_RECEIVE_TIME_SIZE * 4, SNTP_OFFSET_RECEIVE_TIME);

  // Далее следует установка времени.
  sntp_process(receive_timestamp);
И еще одинаковые длинные имена используют внутри структуры и во временном массиве receive_timestamp[].
Берут не ту метку и заведомо ухудшают точность. И на этом нам предлагается учиться. Это пример с официального сайта из каталога contrib-1.4.1\apps\sntp. Author: Simon Goldschmidt (lwIP raw API part)
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 13.12.2016 в 15:33.
Pridnya вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FTP сервер на PIC32, без TCP/IP стека Dima Cетевые протоколы и технологии 9 29.03.2016 19:54
Вопрос по компиляции TCP/IP стека Sich1981 Cетевые протоколы и технологии 8 19.03.2013 06:56


Часовой пояс GMT +3, время: 23:11.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot