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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 14.10.2016, 11:16   #1
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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
Возраст: 44
Сообщений: 431
Вес репутации: 1021/52
bzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud of
Отправить сообщение для 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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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,261
Вес репутации: 2068/66
Рак 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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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,261
Вес репутации: 2068/66
Рак 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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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,261
Вес репутации: 2068/66
Рак 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,245
Вес репутации: 3684/106
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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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,261
Вес репутации: 2068/66
Рак 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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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,072
Вес репутации: 3454/72
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
Адрес: Ленинград
Возраст: 32
Сообщений: 2,081
Вес репутации: 3340/90
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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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,072
Вес репутации: 3454/72
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,072
Вес репутации: 3454/72
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
Возраст: 38
Сообщений: 4,357
Вес репутации: 4216/116
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, время: 16:47.


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