-
- Что вы понимаете под "С++-ный подход"? И какие преимущества желаете
получить? - VladislavS.(03.03.2022 06:37)
- Подход без заморочек с упаковкой структур, но само собой с
необходимостью десериализации. Какие преимущества - не знаю,
спрашиваю. Собственно, уже подсказали. Главное - начать, там "война
план покажет". - Argon(03.03.2022 11:22)
- Хранение, передача и обработка данных (структур) определяется архитектурой железа. Язык тут вторичен. - VladislavS.(03.03.2022 14:38)
- Подход без заморочек с упаковкой структур, но само собой с
необходимостью десериализации. Какие преимущества - не знаю,
спрашиваю. Собственно, уже подсказали. Главное - начать, там "война
план покажет". - Argon(03.03.2022 11:22)
- А что мешает членом класса сделать эту самую структуру? Samx(121 знак., 01.03.2022 14:53)
- Скорее всего так и сделаю. Про 8-битность - имелось ввиду
выравнивание структур, к-рое для 8-битника вообще проблем не
создало. Argon(292 знак., 01.03.2022 15:07)
- В 8051 указатель может занимать 3 байта. Но в структуре ему не
место и, тем более, по сети его никто не передаёт. Надо делать
структуры в стиле С, независимые от языка и железа, например, как
форматы файлов, TCP/IP структуры и т.д. - Costic(01.03.2022 16:27)
- Мне в структуре нужна была ссылка на другую структуру. А точнее
головная структура данных содержит в себе массив структур, в каждой
из которых имеется ссылка на байтовый массив произвольной длины.
Как это сделать без указателя - не придумал, да и вообще криминала
в этом не вижу. Argon(183 знак., 01.03.2022 17:36)
- С помощью union выровняйте указатели до 32 бит. Но это извращение какое-то. Хост ведь внезапно и 64битным может оказаться. - =AlexD=(03.03.2022 11:28)
- Опять же по аналогии с файлами, если нужны вложенные структуры или
массивы, то их положение указывается смещением (обычно переменная
называется xxxOffset) от начала файла или от головной структуры или
от пакета. Да, аналог указателя. - Costic(01.03.2022 19:43)
- Смещением в пределах некоей однородной структуры, верно? А у меня
там по факту кучка разнородных структур разного размера. Проще
показать, чем на словах объяснять. Вот общее объявление рабочих
структур данных: Argon(809 знак., 01.03.2022 20:09)
- Извините, что не сразу ответил. Украинская тема отвлекает. Итак, не
совсем понятно - одинаковый размер структур или разный. Потому что
в коде я вижу фиксированный размер. Если структурки небольшие, то я
бы сделал _все_ одинакового размера (по максимальной). Если нужен
разный размер, то надо иметь возможность вычислять размер структур
и данных, их положение в потоке относительно исходной точки -
начала файла, пакета, заголовка (header). Возможно, потом у вас
идут структуры, Costic(355 знак., 02.03.2022 21:55)
- По факту у меня вложенные структуры, самые крайние из них имеют разный размер, который вычисляется на этапе компиляции и вставляется сюда: const uint16_t size; - Argon(03.03.2022 11:25)
- Перечитал исходный пост. Делайте классы с наследованием. Базовый
класс с сериализацией (чисто виртуальная функция, например, virtual
bool write(my_stream &)=0;) и всеми методами необходимыми. Для
каждого модуля делаете свой класс и метод записи для него. Надо
подумать над оператором копирования и конструкторами. Всё это дело
в контейнер с оператором []. Какой контейнер - сложно сразу
сказать. У стандартных аллокаторы с динамической памятью и "хвост"
зависимостей. Costic(53 знак., 02.03.2022 22:05)
- Спасибо, буду пробовать, может голова начнет работать. - Argon(03.03.2022 11:25)
- Извините, что не сразу ответил. Украинская тема отвлекает. Итак, не
совсем понятно - одинаковый размер структур или разный. Потому что
в коде я вижу фиксированный размер. Если структурки небольшие, то я
бы сделал _все_ одинакового размера (по максимальной). Если нужен
разный размер, то надо иметь возможность вычислять размер структур
и данных, их положение в потоке относительно исходной точки -
начала файла, пакета, заголовка (header). Возможно, потом у вас
идут структуры, Costic(355 знак., 02.03.2022 21:55)
- Смещением в пределах некоей однородной структуры, верно? А у меня
там по факту кучка разнородных структур разного размера. Проще
показать, чем на словах объяснять. Вот общее объявление рабочих
структур данных: Argon(809 знак., 01.03.2022 20:09)
- Делай с укаэателем. - Cкpипaч(01.03.2022 17:40)
- Мне в структуре нужна была ссылка на другую структуру. А точнее
головная структура данных содержит в себе массив структур, в каждой
из которых имеется ссылка на байтовый массив произвольной длины.
Как это сделать без указателя - не придумал, да и вообще криминала
в этом не вижу. Argon(183 знак., 01.03.2022 17:36)
- не очень понятно каким образом вы собрались сделать указатель 2x
байтным. При правильной организации, общие хедеры идут на ура! У
меня практически во всех девайсах общие хедеры и для мк и проги на
пк, естественно все структуры упакованы побайтно, летают что по
кану что по usb - Aleksey_75(01.03.2022 15:38 - 15:40)
- И на что он указывает? В данных, передаваемых по проводам? - SciFi(01.03.2022 15:39)
- В моем случае указатели при передаче данных являются
сопутствующей/лишней информацией, не используемой вовне. Являются
частью структуры профиля модуля и используются только внутри него.
Можно было бы их не передавать, но это лишние телодвижения. Argon(159 знак., 01.03.2022 15:52)
- Ад перфекциониста :-) - SciFi(01.03.2022 16:03)
- А что не так? Как раз перфекционисту общая структура обмена бы понравилась! Лишние 2 байта жалко, к-рые передаются 1 раз (или вообще не передаются, если захардкодить данные модулей в хабе)? - Argon(01.03.2022 16:10)
- поддерживать такой девайс просто пестня ))) - Aleksey_75(01.03.2022 16:05)
- ну так и называйте их счетчиками и какого хера они вдруг стали void
* ??? - Aleksey_75(01.03.2022 15:55)
- Опять понесло с "советами"? Идите в лес. - Argon(01.03.2022 15:56)
- я и так в лесу ))) - Aleksey_75(01.03.2022 16:01)
- Тогда идите в жопу! ))) Предполагаю, вы и так в жопе ))) - Argon(01.03.2022 16:14)
- Всегда!!! ))) - Aleksey_75(01.03.2022 16:16)
- Тогда идите в жопу! ))) Предполагаю, вы и так в жопе ))) - Argon(01.03.2022 16:14)
- я и так в лесу ))) - Aleksey_75(01.03.2022 16:01)
- Опять понесло с "советами"? Идите в лес. - Argon(01.03.2022 15:56)
- Ад перфекциониста :-) - SciFi(01.03.2022 16:03)
- я хз! с передачей больших объёмов данных по can есть специфика,
фактически все 8 байт сообщения использовать не получится - Aleksey_75(01.03.2022 15:43)
- Ничо подобного - у меня все 8 байт утилизируются. Адресация -
только за счет EID. - Argon(01.03.2022 15:55)
- ))) т.е. любое левое сообщение с идентичным ID выепет в рот весь
пакет ?? веселый девайс у вас получается!!! - Aleksey_75(01.03.2022 16:01)
- Кааакой вы весёлый! Во-первых откуда взяться сообщению с идентичным
ID? Во-вторых несложное шифрование никто не отменял. Я не исключаю,
что если туда полезет злоумышленник, он найдет способ испохабить
девайс. Это нормально. - Argon(01.03.2022 16:09)
- ну к примеру в одном из девайсов из проблем с питанием стек
покорёжит... вы точно разработчик ??? - Aleksey_75(01.03.2022 16:13)
- Я бесед с вами уже наелся )))) Идите в жопу! ))))) - Argon(01.03.2022 16:16)
- ну к примеру в одном из девайсов из проблем с питанием стек
покорёжит... вы точно разработчик ??? - Aleksey_75(01.03.2022 16:13)
- Кааакой вы весёлый! Во-первых откуда взяться сообщению с идентичным
ID? Во-вторых несложное шифрование никто не отменял. Я не исключаю,
что если туда полезет злоумышленник, он найдет способ испохабить
девайс. Это нормально. - Argon(01.03.2022 16:09)
- ))) т.е. любое левое сообщение с идентичным ID выепет в рот весь
пакет ?? веселый девайс у вас получается!!! - Aleksey_75(01.03.2022 16:01)
- Ничо подобного - у меня все 8 байт утилизируются. Адресация -
только за счет EID. - Argon(01.03.2022 15:55)
- В моем случае указатели при передаче данных являются
сопутствующей/лишней информацией, не используемой вовне. Являются
частью структуры профиля модуля и используются только внутри него.
Можно было бы их не передавать, но это лишние телодвижения. Argon(159 знак., 01.03.2022 15:52)
- И на что он указывает? В данных, передаваемых по проводам? - SciFi(01.03.2022 15:39)
- В 8051 указатель может занимать 3 байта. Но в структуре ему не
место и, тем более, по сети его никто не передаёт. Надо делать
структуры в стиле С, независимые от языка и железа, например, как
форматы файлов, TCP/IP структуры и т.д. - Costic(01.03.2022 16:27)
- Скорее всего так и сделаю. Про 8-битность - имелось ввиду
выравнивание структур, к-рое для 8-битника вообще проблем не
создало. Argon(292 знак., 01.03.2022 15:07)
- Не вижу смысла в лишних сущностях и абстракциях. Все равно при изменении структур данных нужно править в двух местах, значит нужно эту часть описать одинаково. Если и делать прослоечку для лучшего понимания, то уже выше принятых данных. - VLLV(01.03.2022 10:27)
- Одна-две CAN-шины всё равно не смогут загрузить микроконтроллер,
так что можно смело пользоваться десериализацией. - evgeniy1294(01.03.2022 10:06)
- Да ладно?? Вы просто не умеете готовить, я автомобильные блоки по
can вешаю только в путь !!! - Aleksey_75(01.03.2022 10:10)
- Так это я готовить не умею или блоки херовые? - evgeniy1294(01.03.2022 11:23)
- вы не умеете, как ддосят сайты так и здесь - Aleksey_75(01.03.2022 14:48)
- Так это я готовить не умею или блоки херовые? - evgeniy1294(01.03.2022 11:23)
- Да ладно?? Вы просто не умеете готовить, я автомобильные блоки по
can вешаю только в путь !!! - Aleksey_75(01.03.2022 10:10)
- За один момент зацеплюсь: "явно тормознее". А что, куда-то
опаздываем? - SciFi(01.03.2022 09:31)
- Десериализация должна успевать выполняться при непрерывном
поступлении данных. Впрочем, не исключаю, что она всего лишь
немного тормознее. Так что это может и не аргумент. - Argon(01.03.2022 09:51)
- Ничто не мешает сохранять данные в упакованные структуры а потом
передавать их классам как внешний буфер. Я такой подход практиковал
и получил все плюсы как быстрой десериализации, так и
классово-модульного подхода. - =AlexD=(01.03.2022 10:10)
- +1. Вполне годное решение. Если же хочется чтобы данные были именно
частью объекта то примерно так (для IAR): ЫЫyкпy(552 знак., 01.03.2022 14:44)
- Для кана не особо актуально, но для больших пакетов передача буфера удобна тем, что можно к разным его частям применять приведения указателя к разным типам структур, извлекая вложенные данные и продвигая по уровням OSI. При этом сам буфер не копируется, не перемещается, и даже не меняется. Единственный недостаток - зависимость от индейцев. Тоже решаемо в принципе. - =AlexD=(01.03.2022 14:47)
- спасибо, вариант - Argon(01.03.2022 13:13)
- а что со вложенными структурами? а что с массивами? а что с
массивами структур? а что если узлы с разной endianness. а как ты
узнаешь где пакет закончился и начался новый? - cheblin(01.03.2022 10:25)
- Вопрошающий спрашивал о парсинге пакетов CAN, это от 0 до 8 байт
данных. Длина пакета известна. О чём ты, дитятко? - =AlexD=(01.03.2022 10:37)
- у ethernet протокола тоже есть такое понятие как MTU которое обычно
в пределах 1518 bytes, как по этому протоколу передают гигабайты -
загадка cheblin(83 знак., 01.03.2022 11:28, ссылка)
- Наверное делают гигабайтный буфер, в который всё укладывают и только потом разбирают? ДБЛ БЛД - =AlexD=(01.03.2022 13:09)
- у ethernet протокола тоже есть такое понятие как MTU которое обычно
в пределах 1518 bytes, как по этому протоколу передают гигабайты -
загадка cheblin(83 знак., 01.03.2022 11:28, ссылка)
- Вопрошающий спрашивал о парсинге пакетов CAN, это от 0 до 8 байт
данных. Длина пакета известна. О чём ты, дитятко? - =AlexD=(01.03.2022 10:37)
- +1. Вполне годное решение. Если же хочется чтобы данные были именно
частью объекта то примерно так (для IAR): ЫЫyкпy(552 знак., 01.03.2022 14:44)
- Ничто не мешает сохранять данные в упакованные структуры а потом
передавать их классам как внешний буфер. Я такой подход практиковал
и получил все плюсы как быстрой десериализации, так и
классово-модульного подхода. - =AlexD=(01.03.2022 10:10)
- Десериализация должна успевать выполняться при непрерывном
поступлении данных. Впрочем, не исключаю, что она всего лишь
немного тормознее. Так что это может и не аргумент. - Argon(01.03.2022 09:51)
- никаких. выход только в кодогенерации. аля cheblin(17 знак., 01.03.2022 09:31, ссылка)
- Что вы понимаете под "С++-ный подход"? И какие преимущества желаете
получить? - VladislavS.(03.03.2022 06:37)