roboforum.ru

Технический форум по робототехнике.

BlackBox: генератор исходников обработки бинарного протокола

BlackBox: генератор исходников обработки бинарного протокола

cheblin » 12 янв 2018, 15:24

BlackBox поддерживает все примитивные типы данных, дву/одно байтовые символы строк, битовые поля, обязательные и необязательные поля. Многомерные массивы этих типов данных с фиксированными и динамическими измерениями. Генерирует исходный код на следующих языках программирования JAVA, C#, C. Планируется поддержка SWIFT.

На данный момент, кодогенератор BlackBox построен как SaaS.
Для получения сгенерированного и оттестированного кода необходимо:

Создать спецификацию протокола. По сути это обычный исходник на java. Вот например как он выглядит для демо проекта управления с Android миганием светодиода на борде под STM8S103F3P6 через Bluetooth UART на HC 08. При написании спецификации необходимо к java проекту подключить набор аннотаций описывающих характеристики данных, а также, следуя[urlhttp://www.unirail.org/?lang=ru] небольшому набору правил[/url] описать пакеты, каналы, хосты, коммуникационные интерфейсы, топологию сети

Проверить, что спецификация успешно компилируется, и послать её исходник, в виде аттачмента письма на почтовый адрес OneBlackBoxPlease@outlook.com. Сервер периодически забирает присланные спецификации из этого ящика, проверяет их корректность. Генерирует заказанный в спецификации исходный код на требуемых языках программирования. После этого создается несколько тестов и исходники прогоняются через них. Если все тесты прошли успешно, то сгенерированный код, последний прошедший тест, а также пример использования заказанного API упаковывается в архив и высылается адресату. В случае обнаружения ошибки, отправитель уведомляется о возможной задержке и служба поддержки BlackBox разбирается с возникшим затруднением.

Тут можно найти пример высылаемого сгенерированного кода, а тут использование этого кода в выше упомянутом, демонстрационном проекте управления с андроида вспышками светодиода на демоплате собранной на STM8.
Используя BlackBox вы сможете с лёгкостью наладить связь не только между микроконтроллерами, мобильными устройствами но и обычными компьютерами. И что важно, с минимальными затратами времени и сил. Фактически код сгенерированный BlackBox может стать каркасом Вашего распределенного приложения. Программисту останется просто добавить обработчики на события приёма пакета, а также логику создания пакета, заполнения его данными и отправки его получателю.

BlackBox является достойной альтернативой популярному протоколу MavLink

Re: BlackBox: генератор исходников обработки бинарного прото

setar » 14 янв 2018, 17:54

это вообще что?
из какой области, какое применение, какой функционал реализует.
Кому и для каких задач может понадобиться?

У меня вроде кругозор не маленький, но я не понимаю из какой это области.
Сделайте вводную какую то

Re: BlackBox: генератор исходников обработки бинарного прото

Aseris » 14 янв 2018, 22:45

Вас любой чекер кода пошлет далеко и надолго с такими конструкциями генерируемого с кода.
особенно радует использование goto, calloc... :o Особенно в ембедед мире.

ИМХО костыли яля ардуино для любителей

Re: BlackBox: генератор исходников обработки бинарного прото

cheblin » 16 янв 2018, 11:35

setar писал(а):это вообще что?
из какой области, какое применение, какой функционал реализует.
Кому и для каких задач может понадобиться?


вероятно в ваш кругозор не входило создание сложных коммуникационных протоколов граунд контрола с коптером, и не приходилось использовать что нибудь типа MavLink.

если вы подумали "да ну его..." я таким сложным никогда не буду заниматься. то напрасно.
необходимость в написании протоколов обмена возникают очень часто.
мне удалось сделать написание таких протоколов обмена простым. таким же простым как написание кода VBA в Excel

подробнее можно прочитать тут

об одном повсеместном применении BlackBox тут

Добавлено спустя 6 минут 37 секунд:
Aseris писал(а):Вас любой чекер кода пошлет далеко и надолго с такими конструкциями генерируемого с кода.
особенно радует использование goto, calloc... :o Особенно в ембедед мире.
ИМХО костыли яля ардуино для любителей


спасибо за ревизию кода. чем плохи языковые конструкции С11: goto, calloc? Особенно в ембедед мире.
вероятно, вместо calloc, есть более правильные способы выделения памяти проинициализированную заданными значениями?
какие?
спасибо за ответ.

Re: BlackBox: генератор исходников обработки бинарного прото

Angel71 » 16 янв 2018, 13:43

мавлинк это как раз очень простой протокол.
goto это призрак времён бейсика и паскаля. сейчас использование goto считается очень плохим стилем.
каллок это динамическое выделение памяти, что очень тесно связано с такой штукой, как фрагментации памяти. т.е. нужно быть осторожней и хорошо понимать, что делаешь и как это будет работать. по возможности стараются статически выделять память. а [пере]инициализация перед использованием, так примитивная же задачка, да и не всегда в этом есть необходимость.

Re: BlackBox: генератор исходников обработки бинарного прото

cheblin » 16 янв 2018, 14:14

Angel71 писал(а):мавлинк это как раз очень простой протокол.

базовый дескриптор mavLink,возможно это не сложно, допускаю даже что элементарно. тогда хотелось бы взглянуть на сложный протокол. или лев толстой?

Angel71 писал(а):goto это призрак времён бейсика и паскаля. сейчас использование goto считается очень плохим стилем.

кем считается? програмистами Unix? Загляните в исходники Linux, они доступны. А програмисты языков с автоматической сборкой мусора считают указатели плохой практикой. закрываемся? я всегда использую РАЗУМНО все инструмены которые мне предоставляет язык. Тем более, что на сгенерированный BlackBox код генерится куча тестов, через которые код прогоняется. Так что все ОК.

Angel71 писал(а):каллок это динамическое выделение памяти, что очень тесно связано с такой штукой, как фрагментации памяти. т.е. нужно быть осторожней и хорошо понимать, что делаешь и как это будет работать.


спасибо КО. и да. я знаю, что я делаю.

Angel71 писал(а):примитивная же задачка, да и не всегда в этом есть необходимость.


"примитивная задачка" заключается в том, что прилетают пакеты. Соответственно, сколько пакетов, какие они и как быстро их удасться обработать неизвестно. ваши действия?

Re: BlackBox: генератор исходников обработки бинарного прото

Madf » 16 янв 2018, 14:50

cheblin, не тратте силы на Angel71 - это местный, знатный тролль. :D
Есть поколение выросшее на "окнах" (форточники), они даже не понимают, что все ща "технологии" построены на маркетинге (от сюда сразу куча проблем с безопасностью и понятиями "goto - это а-я-я-й", хотя у самих в недрах - это всё присутствует).

Re: BlackBox: генератор исходников обработки бинарного прото

cheblin » 16 янв 2018, 15:22

Madf писал(а):cheblin, не тратте силы на Angel71 - это местный, знатный тролль. :D
Есть поколение выросшее на "окнах" (форточники), они даже не понимают, что все ща "технологии" построены на маркетинге (от сюда сразу куча проблем с безопасностью и понятиями "goto - это а-я-я-й", хотя у самих в недрах - это всё присутствует).


пишется не совсем для него.
в таких публичных местах 90% - молчаливые читатели.
а они-то прекрасно видят аргументы сторон и сами формируют мнение на основе прочитанного.

своим появлением и бугуртом такие персонажи привлекают внимание.
примерно как громкие крики клоуна из-за стены: "а вот - и - я"...
и многие из тех, кто был "мимоходом" заглядывают на "огонёк"... так это ж хорошо.

Re: BlackBox: генератор исходников обработки бинарного прото

Angel71 » 16 янв 2018, 18:33

записать нули в область памяти это сложная задачка? не прикалывайся. и ещё раз могу повторить - инициализировать нужно не всегда, тем более когда печёшся о тактиках. допустим "супер-пупер сложный" пакет мавлинка. накука вообще фигнёй страдать и нолики записывать в только что выделенный блок памяти, что бы после этого поверх этих ноликов записать пришедшие байтики? в подобных случаях абсолютно не нужно.
когда память сильно ограничена, один из вариантов - это статически выделять буфер. к примеру в стеке lwip динамически выделяется память, а в более простом uip статически.
сколько пакетов прилетит, успеет ли мк обработать это слегка и что делать это слегка весёлый вопрос. смотри, восстановление данных кодом рида-соломона. в пакете данные переменной длины. для части пакетов отправляется потверждение доставки. пакеты могут быть с условно (что делать, когда "абонент не абонент" решает уже не библиотека) гарантированной доставкой. обнаружение коллизий, т.к. делается для общего канала (однопроводное соединение или радиоканал, где приём и передача на одной частоте) со множественным доступом. так вот, что за сколько отработает можно определить - сколько на прерывание (добавление байта в буфер), обнаружение/восстановление данных в хедере и данных (раздельно, это небольшая оптимизация - выловил хедер, определил, что это другому устройству и дальше уже не нужно возиться ни с закидыванием в буфер, ни с поиском и восстановлением ошибок) и т.д. т.е. можно примерно сориентироваться, сколько максимум пакетов может переварить. без оптимизаций пока даже намёка нет, что не будет успевать пакеты обрабатывать. по памяти тоже решаемо. в кольцевом буфере есть счётчик переполнения - переполняется, значит увеличивается буфер. в чём проблема сделать тесты и определиться, сколько пакетов вытягивает? да это не роутер, не свич и прочая подобная узкоспециализированная штуковина в железе, тут как бы ещё есть код пользователя. ну так тут никакая реализация не спасёт, если он пол часа в своём коде часами в прерывании торчать будет или в основном цикле вовремя не вызовет библиотечную ф-ю (если такие есть в реализации этого чёрного ящика).
погугли, почему и когда goto считается плохим стилем, все за и против его использования. уверен, что в данном случае приемлемо, да дело твоё.
реализации айпи стеков. некоторые промышленные протоколы, допустим из семейства can (из программных как минимум стек canopen). есть много очень увесистых и далеко не примитивных стеков, особенно беспроводных (zigbee, thread и т.д.).

Re: BlackBox: генератор исходников обработки бинарного прото

cheblin » 16 янв 2018, 20:27

Angel71 писал(а):записать нули в область памяти это сложная задачка? не прикалывайся. и ещё раз могу повторить - инициализировать нужно не всегда, .

а когда нужно используем calloc. я всё правильно говорю?


Angel71 писал(а): что бы после этого поверх этих ноликов записать пришедшие байтики? в подобных случаях абсолютно не нужно.

если ты думаешь, что мне всё ещё неизвестно про наличие malloc, я тебы разочарую, известно. поэтому использую всё по месту. хочется предметно говорить? открой мой код и натыкай меня в места где goto либо calloc используется не по месту либо не верно. без сферических коней.

Angel71 писал(а):
когда память сильно ограничена, один из вариантов - это статически выделять буфер. к примеру в стеке lwip динамически выделяется память, а в более простом uip статически.

... а в BlackBox когда нужно, статически, когда нужно динамически.

Angel71 писал(а):сколько пакетов прилетит, успеет ли мк обработать это слегка и что делать это слегка весёлый вопрос. смотри, восстановление данных кодом рида-соломона. в пакете данные переменной длины. для части пакетов отправляется потверждение доставки. пакеты могут быть с условно (что делать, когда "абонент не абонент" решает уже не библиотека) гарантированной доставкой. обнаружение коллизий, т.к. делается для общего канала (однопроводное соединение или радиоканал, где приём и передача на одной частоте) со множественным доступом. так вот, что за сколько отработает можно определить - сколько на прерывание (добавление байта в буфер), обнаружение/восстановление данных в хедере и данных (раздельно, это небольшая оптимизация - выловил хедер, определил, что это другому устройству и дальше уже не нужно возиться ни с закидыванием в буфер, ни с поиском и восстановлением ошибок) и т.д. т.е. можно примерно сориентироваться, сколько максимум пакетов может переварить. по памяти тоже решаемо. в кольцевом буфере есть счётчик переполнения - переполняется, значит увеличивается буфер. в чём проблема сделать тесты и определиться, сколько пакетов вытягивает? да это не роутер, не свич и прочая подобная узкоспециализированная штуковина в железе, тут как бы ещё есть код пользователя. ну так тут никакая реализация не спасёт, если он пол часа в своём коде часами в прерывании торчать будет или в основном цикле вовремя не вызовет библиотечную ф-ю (если такие есть в реализации этого чёрного ящика).
я тебе про прилетающие пакеты сказал в контексте того, что пакет прилетел, ему место надо? надо! предлагаешь статически выделить место? а сколько на каждый тип пакета по 10 мест? харе теоретизировать. открой МОЙ код и побольше конкретики.

Angel71 писал(а):погугли, почему и когда goto считается плохим стилем, все за и против его использования. уверен, что в данном случае приемлемо, да дело твоё.

ясное дело моё. темболее на JAVA код генерится без goto их там не существует, а на С я сделал с goto и это выглядит понятнее. НаC# goto есть. Могло бы и не быть, но есть. Догадываешься почему? Ага, чтобы привнести немного плохого стиля. :ROFL:
кроме того пока ты бегаешь и НЕ думая изучаешь чужие методички, я такие методички пишу. поинтересуйся моим SlimEnum если только в JAVA сечёшь. так вот моя реализация круче канонической и лучше чем костыль от группы разрабов Android

Angel71 писал(а):реализации айпи стеков. некоторые промышленные протоколы, допустим из семейства can (из программных как минимум стек canopen). есть много очень увесистых и далеко не примитивных стеков, особенно бtспроводных (zigbee, thread и т.д.).


разберись для чего и какие задачи решает MavLink и для чего BlackBox прежде чем писать про can...

ты ж смешно выглядишь, ну перестань...ведь интернет все помнит, тебя же в твои кучки потом тыкать будут.
не потому ли у тебя такой ущербный профайл, ни имени ни фамилии, ни чего сделал... или стыдно мамкиному хакеру?

Re: BlackBox: генератор исходников обработки бинарного прото

Angel71 » 16 янв 2018, 21:17

накой в твоём коде копаться, когда описание "протокола" до сих пор на яве и вся эта коробочка станет тыквой без вашего почтового саас? или из-за покопаться в потрохах, может ещё и ведроид студию поставить, а потом на почту что-то там отсылать? мммм...
когда и для чего лучше кан, мавлинк, тред, модбас, protobuf, wcf,... использовать, реализация каких уровней osi в них и прочее, это как раз понятно. а вот на кой этот чёрный ящик, это уже другой момент. вот и разберитесь сначала сами, оставить такое поверхностное описание "вы даже со смартфона поуправлять светодиодиком сможете. а после долгих копаний в исходниках может быть даже поймёте, что это за чёрный ящик, для чего он и нужен он вообще вам или нет" или всё-же есть заинтересованность в популяризации этого непойми чего.
Последний раз редактировалось Angel71 16 янв 2018, 21:54, всего редактировалось 1 раз.

Re: BlackBox: генератор исходников обработки бинарного прото

Romikgy » 16 янв 2018, 21:32

в контексте к 8 битным процам (ведь про них вроде речь в топике)
использование malloc\calloc это работа с динамической памятью (что плохо для 8 битных систем , ее там мало )
это может и правильно , но быстродействие такого кода .... даже при хороших прохождение тестов будет хуже!!!
ИМХО у вас проблема в том что вы пришли ( и кичитесь этим , что не есть хорошо...) с Явы (Андроида) , в андрюше почти нет ограничений по производительности и размеру памяти , то же и по си шарпу... а на 8 битной системе все грустно с памятью и быстродействием ... каждая задача имеет свой круг решения ! Может ваш вариант и хорош , в качестве "правильности" кода и он безопасен и перепроверен много раз... но быстродействие по сравнению с си вариантом будет проигрывать ... а с асмом ...
PS любые задачи можно решить на любых языках и процессорах , вопрос лишь в целесообразности ... запустили даже линукс на z80 ... только смысл в этом?

Re: BlackBox: генератор исходников обработки бинарного прото

cheblin » 16 янв 2018, 22:12

Angel71 писал(а):накой в твоём коде копаться, когда описание "протокола" до сих пор на яве?

предпочитаешь копаться в XML как в MavLink? месье знает толк.... я уж не говорю что в мавлинке нет наследования пакетов от базового пакета...

Angel71 писал(а):или из-за покопаться в потрохах, может ещё и ведроид студию поставить, а потом на почту что-то там отсылать? мммм... в концепции изьянов не находишь?

для тебя отправить на почту это только открыть почтовую прогу и приаттачить файл? ну там IMAP, SMTP клиенты... ты програмист или банщик?

Angel71 писал(а):когда и для чего лучше кан, мавлинк, тред, модбас, protobuf, wcf,... использовать, какие уровни в них реализованы и прочее, это как раз понятно. а вот на кой этот чёрный ящик, это уже другой момент.


понятно. ниосилил.

Добавлено спустя 12 минут 17 секунд:
Romikgy писал(а):в контексте к 8 битным процам (ведь про них вроде речь в топике)


да разговор про них.STM8 достаточно восьмибитный?

Romikgy писал(а):использование malloc\calloc это работа с динамической памятью (что плохо для 8 битных систем , ее там мало )
это может и правильно , но быстродействие такого кода .... даже при хороших прохождение тестов будет хуже!!!

вы допускаете, что есть моменты когда без динамического выделения кода никак? вот это именно тот случай!

Romikgy писал(а):ИМХО у вас проблема в том что вы пришли ( и кичитесь этим , что не есть хорошо...) с Явы (Андроида) , в андрюше почти нет ограничений по производительности и размеру памяти , то же и по си шарпу...


да, програмирую одинакого хорошо на многих языках програмирования. мой любимый SCALA. создание кодогенераторов - это другой уровень програмирования, требуется глубокие знания не одного, а нескольких языков, и знание предмета.
давайте без теорий, откройте код по ссылке, и предметно критикуйте. я только за.
более того... готов платить за хорошие предложения по улучшению кода. готовы?

Romikgy писал(а): Может ваш вариант и хорош , в качестве "правильности" кода и он безопасен и перепроверен много раз... но быстродействие по сравнению с си вариантом будет проигрывать ... а с асмом ...
PS любые задачи можно решить на любых языках и процессорах , вопрос лишь в целесообразности ... запустили даже линукс на z80 ... только смысл в этом?


вот этого я ваще не понял. к чему этот поток сознания? а?

Re: BlackBox: генератор исходников обработки бинарного прото

Angel71 » 16 янв 2018, 22:17

можешь павлин-мавлин xml, json, ppm/pwm или ещё что, мне единообразно. для коммуникации между модулями давно где только можно (если есть возможно поменять электронику, допустим как в сервах, она меняется) использую передачу бинарных данных и ничего менять не собираюсь.
да не, дело в общем - возни много, а зачем в этих исходниках копаться, не очевидно.

Re: BlackBox: генератор исходников обработки бинарного прото

setar » 16 янв 2018, 22:37

мне одному кажется что коллега MQTT разрабатывает ?


Rambler\'s Top100 Mail.ru counter