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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 14.10.2016, 11:16   #1
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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
По умолчанию структура TCP/IP стека LwIP v1.3.2

Всем привет!
Вникаю в особенности стека. В стеке, в каталоге port\ есть такой файл perf.h, содержимое которого
Цитата:
#ifndef __PERF_H__
#define __PERF_H__


#define PERF_START /* null definition */
#define PERF_STOP(x) /* null definition */


#endif /* __PERF_H__ */

Этот файл включен в нескольких файлах и используется в них очень странно, в середине функции есть строка PERF_START, а ближе к концу PERF_STOP() с параметром в виде строки.
Цитата:
lwip_v1.3.2\src\core\udp.c(95) : PERF_START;
lwip_v1.3.2\src\core\udp.c(321) : PERF_STOP("udp_input");


lwip_v1.3.2\src\core\tcp_in.c(100) : PERF_START;
lwip_v1.3.2\src\core\tcp_in.c(374) : PERF_STOP("tcp_input");


lwip_v1.3.2\src\core\pbuf.c(546) : PERF_START;
lwip_v1.3.2\src\core\pbuf.c(594) : PERF_STOP("pbuf_free");


lwip_v1.3.2\src\core\ipv4\ip.c(122) : PERF_START;
lwip_v1.3.2\src\core\ipv4\ip.c(167) : PERF_STOP("ip_forward");
И больше нигде не используется. Что это за трюк такой? Оно ж ничего не делает, был бы где PERF_STOP переопределен, то выводил бы куда-нибудь отладочные сообщения. И не один я интересовался этим, про эту задумку автора люди задавали вопросы еще в 2003-м году.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 14.10.2016, 11:34   #2
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Цитата:
Сообщение от Pridnya Посмотреть сообщение
И не один я интересовался этим, про эту задумку автора люди задавали вопросы еще в 2003-м году.
Во я не сообразил, там же написано, что это специальные метки для Performance Application Programming Interface (PAPI), для специальной программы в Linux, когда PAPI измеряет в циклах время выполнения участков кода, в случае, когда LwIP под Linux-ом работает. А мне для STM32+LwIP (Standalone-версии) это совсем не нужно и вроде как при всем желании даже использовать не получится.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 07.11.2016, 11:00   #3
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Всем привет!
Как использовать указатели на структуры я знаю, как использовать доступ к полям структуры через указатель тоже знаю. Например:
Код:
//Доступ к полям структуры через указатель на структуру.
struct pbuf str; // Объявляем структуру str.
struct pbuf *pstr; // Объявляем указатель на структуру.
str.a = 10; // Присваиваем значение полю структуры. 
pstr = &str; // Присваиваем указателю адрес структуры str.
printf("str.a = %d\n",str.a);      // 10
printf("pbuf1->a = %d\n",pstr->a); // 10
Не пойму, зачем внутри структуры используется указатель на такую же структуру.
Код:
struct pbuf {
  /** next pbuf in singly linked pbuf chain */
  struct pbuf *next;
  int a;
};
Я такой синтаксис никогда не использовал (может, не знал о нем). В каких случаях это может быть необходимо? Зачем этот указатель внутри структуры?
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 07.11.2016, 11:23   #4
bzx
Senior Member
 
Аватар для bzx
 
Регистрация: 25.02.2007
Адрес: St. Petersburg
Возраст: 43
Сообщений: 424
Вес репутации: 952/50
bzx is a splendid one to beholdbzx is a splendid one to beholdbzx is a splendid one to beholdbzx is a splendid one to beholdbzx is a splendid one to beholdbzx is a splendid one to beholdbzx is a splendid one to beholdbzx is a splendid one to behold
Отправить сообщение для bzx с помощью ICQ Отправить сообщение для bzx с помощью Skype™
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Pridnya Посмотреть сообщение
...В каких случаях это может быть необходимо?...
Связанные списки.
Цитата:
Сообщение от Pridnya Посмотреть сообщение
...Зачем этот указатель внутри структуры?
Точнее, указатель на следующий элемент.
__________________
Для связи email: info собака qbit.su
bzx вне форума   Ответить с цитированием
Старый 07.11.2016, 11:28   #5
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Цитата:
Сообщение от bzx Посмотреть сообщение
Связанные списки.

Точнее, указатель на следующий элемент.
Спасибо! Связанные списки я как раз и не использовал никогда. Всегда пользовался массивами. Пробел в знаниях.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 08.11.2016, 08:44   #6
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Всем привет!
В разных версиях стеков могут быть разные версии файлов с одними и теми же именами, но в одноименных файлах отсутствует информация о версии самого файла. Может, кто где видел сводную информацию вида: "lwip_v1.3.2:
tcp.c v1..."
Ох уж этот швед из шведского института компьютерных наук, нарочно что ли использует сразу несколько переменных с именами struct pbuf *p, *q, *r, что даже поиск почти не работает и макросы на несколько файлов и ООП. Вроде умный, но защитил свой проект "криптозащитой" и от версии к версии усиливает её. Такое ощущение, что он хотел показать какой он профи, как заковыристо писать умеет, но при этом чтобы не уплыло. Как будто файлы исходников прошли постобработку с помощью текстового редактора, когда нормальные имена (при которых хорошо работает поиск) заменяются на имена p,q,r...вставляются макросы, удаляется информация о версиях файлов. Должно быть лучше и понятнее.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 08.11.2016, 09:31   #7
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 31
Сообщений: 1,239
Вес репутации: 2022/65
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

В файлах данных о версии нет. Но она есть в репозитории, там же удобно смотреть разницу между версиями.
По С, попробуй свой проект на stm32f4 сделать с учетом того, что он может запуститься абсолютно на любом микроконтроллере, x86, интегрирован в linux или qnx. Вот из таких задач переносимости выросло ооп, которое в С реализуется структурами и указателями на функции.
Вопрос мне на собеседовании: занимаемся разработкой графической библиотеки, есть класс фигура, есть класс круг, как реализовать наследование на С?
Рак вне форума   Ответить с цитированием
Старый 08.11.2016, 09:49   #8
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Цитата:
Сообщение от Рак Посмотреть сообщение
В файлах данных о версии нет. Но она есть в репозитории, там же удобно смотреть разницу между версиями.
По С, попробуй свой проект на stm32f4 сделать с учетом того, что он может запуститься абсолютно на любом микроконтроллере, x86, интегрирован в linux или qnx. Вот из таких задач переносимости выросло ооп, которое в С реализуется структурами и указателями на функции.
Вопрос мне на собеседовании: занимаемся разработкой графической библиотеки, есть класс фигура, есть класс круг, как реализовать наследование на С?
Как на лекции препода-теоретика. Без обид только.
Я еще не пробовал портировать свой проект на разные платформы, надобности такой не было. Там же под каждую платформу нужно иметь свой порт. Например для STM32 есть каталог port\, а в нем:
Код:
\lwip_v1.3.2\port\STM32F4x7\arch\
  bpstruct.h
  cc.h
  cpu.h
  epstruct.h
  init.h
  lib.h
  perf.h
  sys_arch.h
\lwip_v1.3.2\port\STM32F4x7\Standalone\
  ethernetif.h
  ethernetif.c
Есть еще каталог для использования с FreeRTOS, его не привожу ввиду неиспользования RTOS.
И для каждой платформы это нужно настраивать. Хоть бы для одной сделать и с самим стеком разобраться.

Да, удобно смотреть разницу между версиями (теоретически) (было просто на бумаге да забыли про овраги), смотрю и вижу, что у всех файлов дата создания одинаковая, делаю вывод, что файлы обрабатывались текстовым процессором, только в этом случае может быть одинаковая дата. Ведь редактировались файлы в разное время. И от версии к версии все файлы разные:
Код:
// sntp.c из lwip_v1.4.1 (включаемые файлы) 
#include "lwip/opt.h"
#include "sntp.h"
#include "lwip/timers.h"
#include "lwip/udp.h"
#include "lwip/dns.h"
#include "lwip/ip_addr.h"
#include "lwip/pbuf.h"
#include <string.h>
#include <time.h>

//lwip_v1.4.1                                                       lwip_v1.3.2
lwip_1.4.1\src\include\lwip\opt.h         58576, 09.02.15 11:31:54  lwip_1.3.2\src\include\opt.h              50583, 02.09.12 21:30:14
lwip_1.4.1\apps\sntp.h                      177, 09.02.15 11:31:54  ---                                       ---
lwip_1.4.1\src\include\lwip\timers.h       3290, 09.02.15 11:31:54  ---                                       ---
lwip_1.4.1\src\include\lwip\udp.h          6046, 09.02.15 11:31:54  lwip_1.3.2\src\include\udp.h               5426, 02.09.12 21:30:14
lwip_1.4.1\src\include\lwip\dns.h          5723, 09.02.15 11:31:54  lwip_1.3.2\src\include\lwip\dns.h          4762, 02.09.12 21:30:14
lwip-1.4.1\src\include\ipv4\lwip\ip_addr.h 9740, 09.02.15 11:31:54  lwip-1.3.2\src\include\ipv4\lwip\ip_addr.h 6884, 02.09.12 21:30:14
lwip-1.4.1\src\include\ipv4\lwip\pbuf.h    6526, 09.02.15 11:31:54  lwip-1.3.2\src\include\ipv4\lwip\pbuf.h    4022, 02.09.12 21:30:14
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 08.11.2016 в 09:55.
Pridnya вне форума   Ответить с цитированием
Старый 08.11.2016, 10:19   #9
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 31
Сообщений: 1,239
Вес репутации: 2022/65
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Как на лекции препода-теоретика. Без обид только.
Ты сомоучка по С? Не профильная специальность у тебя?
Складывается ощущение, что ты из-за неполных познаний в С оторгаешь написаное и оцененое многими (в том числе и собой, раз выбрал именно этот стек). Но разглядывая чужие проекты человек учится, загляни еще в код ядра линукса, там люди уже более 25 лет полируют, то, что и так зеркально. Оно тоже на С написано, и функционал там ого-го, кстати, таку популярную cvs как git написал как раз Линус Торвальдс, когда в 2005 году понял, что при текущем положении дел никак не справится с таким большим набором патчей и веток.
Рак вне форума   Ответить с цитированием
Старый 08.11.2016, 10:34   #10
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Цитата:
Сообщение от Рак Посмотреть сообщение
Ты сомоучка по С? Не профильная специальность у тебя? .
У меня специальность "проектирование и технология радиоэлектронных средств", язык Си нам давали в курсе "Основы базового программного обеспечения". Т.е. меня пять лет не учили языку Си, даже не знаю, а учат ли кого только языкам? Тебе что, пять лет Си читали (базовый и ООП на Си)? Какая у тебя специальность?
Цитата:
Сообщение от Рак Посмотреть сообщение
Складывается ощущение, что ты из-за неполных познаний в С оторгаешь написаное и оцененое многими (в том числе и собой, раз выбрал именно этот стек). Но разглядывая чужие проекты человек учится, загляни еще в код ядра линукса, там люди уже более 25 лет полируют, то, что и так зеркально. Оно тоже на С написано, и функционал там ого-го, кстати, таку популярную cvs как git написал как раз Линус Торвальдс, когда в 2005 году понял, что при текущем положении дел никак не справится с таким большим набором патчей и веток.
Язык Си я изучал самостоятельно, сначала для PIC16 (Hi-TECH), затем для MS-DOS (BorlandTurboC), затем для M16C, R32C, затем для STM32 (ARMCC), т.е. я почти всегда изучал Си для микроконтроллеров (изредка писал на Си консольные приложения для командной строки).
Я не отторгаю, а просто не знаю той части языка Си, которая выходит за рамки чистого Си и называется объектно-ориентированный Си. Понятно, что LwIP-стек, USB-стеки, графические библиотеки его используют. И стек LwIP я специально не выбирал, он шел в примерах к моей отладочной плате. Нужно вникать в ООП на Си, а эта отдельный курс (не базовый).

После изучения базового Си я начал изучать С++, а там как раз основы ООП, затем перешел на С# и примерно в это время узнал, что есть ООП на Си, что Си не заканчивается базовым курсом и не переходит в C++, что его еще используют и много где.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 08.11.2016, 10:39   #11
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 31
Сообщений: 1,239
Вес репутации: 2022/65
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Pridnya Посмотреть сообщение
У меня специальность "проектирование и технология радиоэлектронных средств", язык Си нам давали в курсе "Основы базового программного обеспечения". Т.е. меня пять лет не учили языку Си, даже не знаю, а учат ли кого только языкам? Тебе что, пять лет Си читали (базовый и ООП на Си)? Какая у тебя специальность?
Язык Си я изучал самостоятельно, сначала для PIC16 (Hi-TECH), затем для MS-DOS (BorlandTurboC), затем для M16C, R32C, затем для STM32 (ARMCC), т.е. я почти всегда изучал Си для микроконтроллеров (изредка писал на Си консольные приложения для командной строки).
Я не отторгаю, а просто не знаю той части языка Си, которая выходит за рамки чистого Си и называется объектно-ориентированный Си. Понятно, что LwIP-стек, USB-стеки, графические библиотеки его используют. И стек LwIP я специально не выбирал, он шел в примерах к моей отладочной плате. Нужно вникать в ООП на Си, а эта отдельный курс (не базовый).
А что такое класс? Это структура, к которой привязаны определенные методы (указатели на функции), которые прораммист посчитал привязать в этим данным. Всего-то, это и есть чисты С, просто ты такого никогда ранее не встречал.
Рак вне форума   Ответить с цитированием
Старый 08.11.2016, 10:44   #12
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,208
Вес репутации: 3596/104
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Рак Посмотреть сообщение
А что такое класс? Это структура, к которой привязаны определенные методы (указатели на функции), которые прораммист посчитал привязать в этим данным. Всего-то, это и есть чисты С, просто ты такого никогда ранее не встречал.
Как только появляется слово класс, то Си превращается в С++.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 08.11.2016, 10:45   #13
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Цитата:
Сообщение от Рак Посмотреть сообщение
А что такое класс? Это структура, к которой привязаны определенные методы (указатели на функции), которые прораммист посчитал привязать в этим данным. Всего-то, это и есть чисты С, просто ты такого никогда ранее не встречал.
Про отличие класса от структуры я знаю: в классе по умолчанию методы закрытые, а в структуре открытые. Мы уже сравниваем два разных языка (в Си нет понятие класс, нет ключевого слова class, оно есть в С++, хотя кто его знает, там в терминологии запутаться можно). Я это встретил в USB-стеке, LwIP-стеке, в других работах по теме "ООП на Си".

Понятно, что на Си можно написать ООП программу, как на C++ (с наследованием...)
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 08.11.2016, 12:27   #14
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Цитата:
Сообщение от Рак Посмотреть сообщение
А что такое класс? Это структура, к которой привязаны определенные методы (указатели на функции), которые прораммист посчитал привязать в этим данным. Всего-то, это и есть чисты С, просто ты такого никогда ранее не встречал.
Все просто:
Вот простой пример: в lwip_v1.3.2 не было файлов timers.h и timers.c, они появились в lwip_v1.4.1. Файл timers.h определяет новый тип данных, все на Си.
Код:
/** Function prototype for a timeout callback function. Register such a function
 * using sys_timeout().
 *
 * @param arg Additional argument to pass to the function - set up by sys_timeout()
 */
typedef void (* sys_timeout_handler)(void *arg);

struct sys_timeo {
  struct sys_timeo *next;
  u32_t time;
  sys_timeout_handler h;
  void *arg;
#if LWIP_DEBUG_TIMERNAMES
  const char* handler_name;
#endif /* LWIP_DEBUG_TIMERNAMES */
};
Что-то я не помню ни одной книжки по Си (чистый Си), где бы про Callback-функции было написано. Ну да ладно, с ними более менее понятно.

Внутри типа данных указатель на такой же тип данных (struct sys_timeo *next) - связанные списки.

Указатель на пустой тип данных void *arg;.

Тип данных sys_timeout_handler не могу найти вообще. Или это указатель на функцию, которую я должен в проекте переписать?
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 08.11.2016 в 12:40.
Pridnya вне форума   Ответить с цитированием
Старый 08.11.2016, 12:43   #15
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 31
Сообщений: 1,239
Вес репутации: 2022/65
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Все просто:
Вот простой пример: в lwip_v1.3.2 не было файлов timers.h и timers.c, они появились в lwip_v1.4.1. Файл timers.h определяет новый тип данных, все на Си.
Код:
/** Function prototype for a timeout callback function. Register such a function
 * using sys_timeout().
 *
 * @param arg Additional argument to pass to the function - set up by sys_timeout()
 */
typedef void (* sys_timeout_handler)(void *arg);

struct sys_timeo {
  struct sys_timeo *next;
  u32_t time;
  sys_timeout_handler h;
  void *arg;
#if LWIP_DEBUG_TIMERNAMES
  const char* handler_name;
#endif /* LWIP_DEBUG_TIMERNAMES */
};
Что-то я не помню ни одной книжки по Си (чистый Си), где бы про Callback-функции было написано. Ну да ладно, с ними более менее понятно.

Внутри типа данных указатель на такой же тип данных (struct sys_timeo *next) - связанные списки.

Указатель на пустой тип данных void *arg;.

Тип данных sys_timeout_handler не могу найти вообще. Или это указатель на функцию, которую я должен в проекте переписать?
Дима, хорош придираться, callback - это понятие, присущее программированию, а не конкретно С.
Рак вне форума   Ответить с цитированием
Старый 08.11.2016, 12:49   #16
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Цитата:
Сообщение от Рак Посмотреть сообщение
Дима, хорош придираться, callback - это понятие, присущее программированию, а не конкретно С.
Первый раз я это слово встретил, когда знакомился с программирваонием на Си с использованием WinAPI для Windows. Т.е. эти калбэки как раз в Си и используются. Ни в Ассемблере, ни в C++, ни в C# упоминания про них не встречал.
Там же смысл в том, что есть некий код, который предоставляет интерфейс пользователю, а ты его (этот интерфейс) реализуешь. Это как раз из Си (ООП на Си).
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 08.11.2016, 12:54   #17
yeskela
Senior Member
 
Аватар для yeskela
 
Регистрация: 28.01.2010
Адрес: Новочеркасск
Возраст: 34
Сообщений: 1,055
Вес репутации: 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 Посмотреть сообщение

typedef void (* sys_timeout_handler)(void *arg);
....
sys_timeout_handler h;
Тип данных sys_timeout_handler не могу найти вообще. Или это указатель на функцию, которую я должен в проекте переписать?
typedef объявляет новый тип sys_timeout_handler, который есть указатель на функцию получающую один аргумент (void*) и не возвращающую ничего.


Написав свою функцию с такой сигнатурой можно взять её адрес и присвоить полю h в структуре. Тогда стек сможет эту функцию корректно вызвать.

P.S. В C# функцию callback выполняют делегаты, насколько мне помнится.
__________________
Отсутствие доступа в интернет с рабочего места очень замедляет работу. Наличие - полностью парализует её.
yeskela вне форума   Ответить с цитированием
Старый 08.11.2016, 13:00   #18
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 31
Сообщений: 2,025
Вес репутации: 3217/88
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: структура TCP/IP стека LwIP v1.3.2

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Указатель на пустой тип данных void *arg;.
Цитата:
Переменная не может иметь типа void, этот тип определён только для указателей. Пустые указатели нашли широкое применение при вызове функций. Можно написать функцию общего назначения, которая будет работать с любым типом...
... и далее.
Romantic вне форума   Ответить с цитированием
Старый 08.11.2016, 13:59   #19
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Цитата:
Сообщение от Romantic Посмотреть сообщение
Цитата:
Сообщение от yeskela Посмотреть сообщение
typedef объявляет новый тип sys_timeout_handler, который есть указатель на функцию получающую один аргумент (void*) и не возвращающую ничего.


Написав свою функцию с такой сигнатурой можно взять её адрес и присвоить полю h в структуре. Тогда стек сможет эту функцию корректно вызвать.
Спасибо обоим.
Цитата:
Сообщение от Romantic Посмотреть сообщение
P.S. В C# функцию callback выполняют делегаты, насколько мне помнится.
В C# использую делегаты. Синтаксис позволяет написать класс, который например будет выводить данные "куда-то", а в основной программе уже прописывается "куда конкретно". Class01 ничего не знает о ListBox1, но позволяет вывести в него данные. Но они ведь делегаты, а не Callback-функции.
Вот пример из моего кода:
Код:
Class01.cs
delegate void EventHandler(string Str);//Объявление делегата.

//Объявление класса с событием.
class MyClass01
{
    public event EventHandler MyEvent;  // Объвление события на основе делегата.
    ...
    MyEvent(GetTime() + "Порт " + _serialPort.PortName + " открыт!"); // Выводит строку "куда-то"
    ...
}
            
Program.cs
Class01.MyEvent += new EventHandler(MyHandler); // Для события MyEvent добавляем обработчик MyHandler.

private void MyHandler(string Str) // Реализация.
{
  listBox1.Items.Add(Str);        // Выводим строку в ListBox1.
}
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 11.11.2016, 09:05   #20
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Всем привет!
Кто-нибудь знает, зачем Адам в файле cc.h (в котором определяются компилятороспецифические опции) переопределяет стандартные типы данных (unsigned char...), а не использует стандартный файл (который должен быть везде) stdint.h и его типы данных (uint8_t...)? Вместо него вводит свои нестандартизированные типы (u8_t...). Криптограф. И такого кода у него полным полно.
Код:
typedef unsigned   char    u8_t;
typedef signed     char    s8_t;
typedef unsigned   short   u16_t;
typedef signed     short   s16_t;
typedef unsigned   long    u32_t;
typedef signed     long    s32_t;
typedef u32_t mem_ptr_t;
typedef int sys_prot_t;

#define U16_F "hu"
#define S16_F "d"
#define X16_F "hx"
#define U32_F "u"
#define S32_F "d"
#define X32_F "x"
#define SZT_F "uz"
И еще в одном файле (inet.c). Обмен байтов в полуслове (16 бит) расписал на кучу строк и имя придумал не читабельное, например SwapUint16(), а htons(). Вот это криптограф.
Цитата:
/* В файл cc.h включается cpu.h с одной строкой #define BYTE_ORDER LITTLE_ENDIAN */
/* В файле inet.h макроопределение:
#ifndef LWIP_PLATFORM_BYTESWAP
#define LWIP_PLATFORM_BYTESWAP 0
#endif
*/

/* В файле inet.c */
/**
* These are reference implementations of the byte swapping functions.
* Again with the aim of being simple, correct and fully portable.
* Byte swapping is the second thing you would want to optimize. You will
* need to port it to your architecture and in your cc.h:
*
* #define LWIP_PLATFORM_BYTESWAP 1
* #define LWIP_PLATFORM_HTONS(x) <your_htons>
* #define LWIP_PLATFORM_HTONL(x) <your_htonl>
*
* Note ntohs() and ntohl() are merely references to the htonx counterparts.
*/

#if (LWIP_PLATFORM_BYTESWAP == 0) && (BYTE_ORDER == LITTLE_ENDIAN)

/**
* Convert an u16_t from host- to network byte order.
*
* @param n u16_t in host byte order
* @return n in network byte order
*/
u16_t
htons(u16_t n)
{
return ((n & 0xff) << 8) | ((n & 0xff00) >> 8);
}
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 11.11.2016, 10:50   #21
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Может, кому пригодится: эта версия стека lwip_v1.3.2 идет в комплекте к отладочной плате DM-STF4BB для STM32F407+LAN8720A.
Disk_STM32F4DIS-BB\code\STM32F4xx_Discovery_StdPeriph_Demo\Utiliti es\lwip_v1.3.2\src\include\lwip\debug.h

В файле debug.h в многострочном макросе кто-то забыл поставить две скобки. В версии lwip_v1.4.1 эти скобки уже есть.
Код:
// #define LWIP_PLATFORM_DIAG printf 

#define LWIP_DEBUGF(debug, message) do { \
    if ( \
            ((debug) & LWIP_DBG_ON) && \
            ((debug) & LWIP_DBG_TYPES_ON) && \
            ((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \
        LWIP_PLATFORM_DIAG(message); \
        if ((debug) & LWIP_DBG_HALT) { \
            while(1); \
        } \
    } \
    } while(0)
Прикольно: в репозитариях в обоих каталогах v1.3.2 этой ошибки нет, а в каталоге с примерами к отладочной плате на CD-диске она есть. Значит кто-то (кто писал примеры) удалил скобки специально.
Ошибка проявится, когда пользователю примеров захочется включить отладку - выдачу отладочных сообщений в UART. Так она не проявляется.
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 11.11.2016 в 10:57.
Pridnya вне форума   Ответить с цитированием
Старый 11.11.2016, 11:35   #22
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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

Еще кручею Рушатся мои представления о повторном использовании кода. Сравниваю каталог lwip_v1.3.2 с диска для DM-STF4BB с каталогом с сайта (на скриншоте справа) и вижу, что все файлы разные. Слева файлы opt.h и debug.h имеют сегодняшнюю дату изменения, это я отладку пытался включить, пока ошибку не нашел в debug.h.
Миниатюры
lwip.PNG  
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 11.11.2016, 11:48   #23
yeskela
Senior Member
 
Аватар для yeskela
 
Регистрация: 28.01.2010
Адрес: Новочеркасск
Возраст: 34
Сообщений: 1,055
Вес репутации: 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_v1.3.2 с диска для DM-STF4BB с каталогом с сайта
Оно для того под git и разрабатывается, чтоб можно было изменения отслеживать и синхронизировать.



http://git.savannah.gnu.org/cgit/lwip.git/diff/

Код:
--- a/src/include/lwip/apps/mdns_opts.h
+++ b/src/include/lwip/apps/mdns_opts.h
@@ -31,7 +31,7 @@
  *
  * This file is part of the lwIP TCP/IP stack.
  *
- * Author: Erik Ekman <erik.ekman@verisure.com>
+ * Author: Erik Ekman <erik@kryo.se>
  *
Если-б вы использовали системы контроля версий как должно, просто слили бы себе изменения. А так только вручную.
__________________
Отсутствие доступа в интернет с рабочего места очень замедляет работу. Наличие - полностью парализует её.
yeskela вне форума   Ответить с цитированием
Старый 11.11.2016, 11:53   #24
yeskela
Senior Member
 
Аватар для yeskela
 
Регистрация: 28.01.2010
Адрес: Новочеркасск
Возраст: 34
Сообщений: 1,055
Вес репутации: 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 Посмотреть сообщение
Прикольно: в репозитариях в обоих каталогах v1.3.2 этой ошибки нет, а в каталоге с примерами к отладочной плате на CD-диске она есть. Значит кто-то (кто писал примеры) удалил скобки специально.

http://git.savannah.gnu.org/cgit/lwi...e74d4a1c9f0ac5

Эта ошибка, согласно логу была исправлена 08.09.2016. Скорей всего диск был записан раньше
__________________
Отсутствие доступа в интернет с рабочего места очень замедляет работу. Наличие - полностью парализует её.
yeskela вне форума   Ответить с цитированием
Старый 11.11.2016, 12:46   #25
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,132
Вес репутации: 4122/112
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 Посмотреть сообщение
Оно для того под git и разрабатывается, чтоб можно было изменения отслеживать и синхронизировать.

http://git.savannah.gnu.org/cgit/lwip.git/diff/

Код:
--- a/src/include/lwip/apps/mdns_opts.h
+++ b/src/include/lwip/apps/mdns_opts.h
@@ -31,7 +31,7 @@
  *
  * This file is part of the lwIP TCP/IP stack.
  *
- * Author: Erik Ekman <erik.ekman@verisure.com>
+ * Author: Erik Ekman <erik@kryo.se>
  *
Если-б вы использовали системы контроля версий как должно, просто слили бы себе изменения. А так только вручную.
Не умею и никогда не пользовался.

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

Эта ошибка, согласно логу была исправлена 08.09.2016. Скорей всего диск был записан раньше
Спасибо! Я только не пойму, она была исправлена 08.09.2016 в версии v1.3.2? И после исправления этой ошибки на сайте v1.3.2 будет уже без ошибки (поэтому там этой ошибки сейчас нет). Так?
Вообще я думал, что v1.3.2 оригинальная с момента первой публикации должна как-то отличаться от v1.3.2 исправленной в в 2016-м году. И почему тогда в архиве (с сайта v1.3.2) файл датирован 2009-м годом.

Отличия в размерах файлов версии с диска и с сайта на несколько сотен байтов из-за первого многострочного комментария и непечатных символов в конце каждой строки (один симол или два в зависимости от кодировки). Вообще файлы с сайта идут с кодировкой UNIX, а с диска с кодировкой Dos\Windows. Т.е. оригинальные файлы обрабатывались какой-то программой, поэтому первый многострочный комментарий другого вида - с двумя звездочками и с двумя пробелами. И отличия в дате (при обработке оригинальных файлов какая-то программа записала дату на момент обработки).
Миниатюры
Разные кодировки и первый комментарий.PNG  
__________________
Прогресс неизбежен.
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, время: 04:55.


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