www.open-tager.ru http://www.open-tager.ru/forum/ |
|
Система Caustic http://www.open-tager.ru/forum/viewtopic.php?f=5&t=4128 |
Страница 105 из 108 |
Автор: | Alexies [ 15 фев 2017, 22:59 ] |
Заголовок сообщения: | Re: Система Caustic |
Pingvin писал(а): Пакеты по 32 байта гонять научился. Давайте обсудим структуру пакета. Цитата: RCSP-сообщения ... Тут какой уровень описан? Не вижу ни адреса отправителя, ни адреса получателя... Это что-то вроде "прикладного уровня". То есть, уже полезная нагрузка пакета. Или содержимое файла, или RFID-карты, да чего угодно. Сетевой уровень подробно опишу в ближайшем будущем. Если кратко, то вот тут описание заголовока пакета: https://github.com/DAlexis/caustic-lase ... er.hpp#L40 . Он состоит из адресов отправителя и получателя, а также структуры PackageDetails, в которой, в свою очередь, уникальный идентификатор пакета (генерируется случайно и нужен, например, чтобы 2 раза не принять одно и то же), TTL и флаг запроса на подтверждение. Обратите внимание, используется относительно малоизвестная возможность языка C - битовые поля (про неё в этой статье есть: https://habrahabr.ru/post/142662/ ) |
Автор: | Pingvin [ 16 фев 2017, 06:17 ] |
Заголовок сообщения: | Re: Система Caustic |
Хорошо, а адреса устройств откуда берутся? И вот в этом месте Код: struct PackageDetails { PackageDetails(uint16_t id, uint8_t ack = 0, uint16_t ttl = 0) : packageId(id), TTL(ttl), needAck(ack) {} PackageDetails() { TTL = 0; needAck = 0; } PackageId packageId; uint8_t TTL : 7; uint8_t needAck : 1; }; что означает объявление Код: PackageDetails(uint16_t id, uint8_t ack = 0, uint16_t ttl = 0) : packageId(id), TTL(ttl), needAck(ack) {} Функция, как поле структуры? Что означает двоеточие? Ну тут понятно Код: uint8_t TTL : 7; это значит размер поля 4 бита. Опять же Код: packageId(id), TTL(ttl), needAck(ack) это вызов функций? В структуре? Ничего не понятно... |
Автор: | Alexies [ 16 фев 2017, 10:56 ] |
Заголовок сообщения: | Re: Система Caustic |
Pingvin писал(а): Хорошо, а адреса устройств откуда берутся? Адреса устройств берутся из конфига каждого устройства с SD-карты и назначаются при запуске. Все, что связано с сетью, лежит в папке network (она есть в include и в src) Pingvin писал(а): И вот в этом месте что означает объявление Код: PackageDetails(uint16_t id, uint8_t ack = 0, uint16_t ttl = 0) : packageId(id), TTL(ttl), needAck(ack) {} это вызов функций? В структуре? Ничего не понятно... Это прямая инициализации членов класса (или структуры) в конструкторе. Почитайте, как работают конструкторы классов в C++, например в MSDN: https://msdn.microsoft.com/ru-ru/library/s16xw1a8.aspx . Это основы C++. Если кратко, это то же самое, как внутри конструктора написать Код: packageId = id; TTL = ttl; needAck = ack; но правильней в силу некоторых причин. |
Автор: | Pingvin [ 16 фев 2017, 11:37 ] |
Заголовок сообщения: | Re: Система Caustic |
Что такое конструкторы и деструкторы я знаю. Но я не знал, что это применимо и к структурам. |
Автор: | Alexies [ 16 фев 2017, 12:02 ] |
Заголовок сообщения: | Re: Система Caustic |
Pingvin писал(а): Что такое конструкторы и деструкторы я знаю. Но я не знал, что это применимо и к структурам. Структуры и классы в С++ - полностью одно и то же, за исключением того, что в классе по-умолчанию все поля private (если не указать явно иное), а в структуре - public. Все остальное, включая принципы наследования и полиморфизма - идентично. Структура и класс могут наследоваться друг от друга в любой комбинации. |
Автор: | Pingvin [ 16 фев 2017, 13:39 ] |
Заголовок сообщения: | Re: Система Caustic |
Код: PackageDetails(uint16_t id, uint8_t ack = 0, uint16_t ttl = 0) : packageId(id), TTL(ttl), needAck(ack) {} PackageDetails() { TTL = 0; needAck = 0; } Два конструктора, что ли? Код: PackageDetails() { TTL = 0; needAck = 0; } Это тоже конструктор, что ли? Это если структура создается без указания параметров? |
Автор: | Alexies [ 16 фев 2017, 14:10 ] |
Заголовок сообщения: | Re: Система Caustic |
Pingvin писал(а): Это тоже конструктор, что ли? Это если структура создается без указания параметров? Конечно. Обычная перегрузка конструктора. Причем я уже не помню, зачем сделал второй конструктор без параметров. Возможно он нужен для каких-то операций с контейнерами... А может его можно убрать. |
Автор: | Pingvin [ 17 фев 2017, 07:10 ] |
Заголовок сообщения: | Re: Система Caustic |
Мне бы структуру заголовка и всего пакета в простом наглядном виде - как Си структуры. |
Автор: | Alexies [ 17 фев 2017, 15:15 ] |
Заголовок сообщения: | Re: Система Caustic |
Pingvin писал(а): Мне бы структуру заголовка и всего пакета в простом наглядном виде - как Си структуры. Так я же Вам эти структуры показал: https://github.com/DAlexis/caustic-lase ... er.hpp#L40 , там все, как есть. Поля пакета - это структура-адрес отправителя, структура-адрес получателя, структура-заголовок и массив с данными. Структура-заголовок описана прям в этом же файле, структура-адрес - в https://github.com/DAlexis/caustic-lase ... -types.hpp . Если нужно найти, в каком файле что определено, и у вас не настроена среда, можно воспользоваться Код: grep -rnI "строка" Вот я максимально упростил код - все константы и методы убраны. Тут все должно быть ясно: Код: struct DeviceAddress { uint8_t address[3]; }; struct PackageDetails { PackageId packageId; uint8_t TTL : 7; uint8_t needAck : 1; }; struct Package { DeviceAddress sender; DeviceAddress target; PackageDetails details; uint8_t payload[23]; }; Чтобы было совсем сишно, нужно struct заменить на typedef struct, и имя в конец |
Автор: | Pingvin [ 17 фев 2017, 16:56 ] |
Заголовок сообщения: | Re: Система Caustic |
Так понятней. PackageId - это uint16_t ? Значит "полезная нагрузка" - 23 байта? |
Страница 105 из 108 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |