roboforum.ru

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

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

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

Dmitry__ » 20 янв 2018, 02:31

Любая конструкция "if", "switch" компилятором превращается в goto, есть основание задуматься. Goto - основная команда любого контроллера :wink:
Попробуйте без goto сделать конечный автомат в прерываниях, на всех других операторах это будет быдлокод (по скорости выполнения)...

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

cheblin » 20 янв 2018, 07:13

Aseris писал(а):goto очень плохо обрабатываются анализаторами кода.

проги пишутся не для того чтобы хорошо обрабатывались анализаторами

Aseris писал(а):Динамическое использование памяти ето ад для тестов.

Обьясняю задача A хочет динамически 100 байт B - 200, C - 300, heap - 500.
a+b - ok , a+b - ok a+b+c - hard fault. А динамический анализ памяти очень нетривиальная задача для сложных систем.

Обычно выделяются статически буферы.


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

ну и как ты тут статически собираешься что-то выделять?


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

в управлениями коптерами протоколы каких гигантов используются?... а чё так?


Aseris писал(а):P.S. к наличию goto в языках - поросенок тоже дом построил из соломы :) и он даже некоторое время стоял

ТУПЫЕ...! этот аргумент уже слышали. тупые создатели С, а также примкнувшие к ним создатели C# :ROFL:

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

lorry » 20 янв 2018, 07:23

cheblin писал(а):
Aseris писал(а):goto очень плохо обрабатываются анализаторами кода.



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

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

cheblin » 20 янв 2018, 08:17

lorry писал(а):
cheblin писал(а):
Aseris писал(а):Просто применение команды goto считается в среде программистов "правилом плохого тона", из за ухудшения читаемости и понимания кода, а это, в свою очередь может привести к ошибкам в написании самого кода.


Просто применение или неправильное приенение? это важно!

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

Angel71 » 20 янв 2018, 10:18

Dmitry__, в контроллере выполнение всех инструкций это сплошные переходы, как минимум к следующей инструкции.
когда используется для пропуска куска кода, допустим идут какие-то проверки на подобии
Код: Выделить всёРазвернуть
if (State != STATE_READY)
{
  errorcode = BUSY;
  goto error;
}
а в конце
Код: Выделить всёРазвернуть
error:
  return errorcode;

в принципе вполне нормально и вполне может оказаться более приемлимым, чем куча вложеных if else. но когда этим goto по коду телепает во все стороны, далеко не всегда в таком коде разбираться, как он работает, искать ишибки и т.д.
с машинами состояний ты опять фанатично слеп (это не считая, что конечные автоматы машинами состояний не ограничиваются). когда состояний мало и/или они слабо связаны, вполне можно и на goto. но даже с ним, может быть не очень удобно. допустим нужно будет изменить порядок выполнения, добавить или удалить. так, здесь переходили на label1, меняем на label5. label3 удаляем, ищем все переходы на него и меняем на label4. :) с ростом сложности, количеством состояний и их связанностью использование goto может стать тихим ужасом, в котором долго и трудно разобраться, всё трудней переделывать порядок выполнения, добавлять/удалять "стадии выполнения", искать ошибки,... особенно количество тех же проверок чего стоят - если s=.., тогда сейчас прыгаем туда. а если s=.., но f=.., тогда прыгаем туда. а если ещё к этим условиям добавить рандомный выбор, куда прыгать, ух какое чудное поведение бибобота будет. :) ни итераторах без единого goto можно сделать просто, наглядно, с легко изменяемым порядком выполнения (хоть во время выполнения программы, без правки кода, перекомпиляции и перезаливки прошивки).

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

Dmitry__ » 20 янв 2018, 10:23

lorry писал(а):Просто применение команды goto считается в среде программистов "правилом плохого тона"

Это всего лишь парадигма, коих умерло уже вагон и маленькая тележка :)
Сейчас какой-нибудь философ придумает парадигму goto - рулез и все ломануться исполнять.
А вот код с goto в некоторых случаях читается лучше, например обработка ошибок...
Иногда goto все-же делает код читабельнее, благодаря чему он до сих пор широко используется, несмотря на все заявления его противников.

https://habrahabr.ru/post/223253/
И вот пример читаемости кода с goto:
Я чувствую, что моя версия на C ++ неправильно реализует парадигму обработки исключений; на самом деле, версия C ++ кажется еще менее читаемой и более подверженной ошибкам из-за сборки кода очистки, накапливаемого в блоках catch при увеличении функции.

http://code.i-harness.com/ru/q/1b4e07f

Для ембеддед программистов, вопрос вообще не стоит об исключении goto из практики, где каждый такт на счету, только кухарки против goto :P
Самый главный довод кухарок - при больших программах, код с goto не читаем, при этом ни один программист даже близко не подошел к порогу большой программы :D

Добавлено спустя 4 минуты 44 секунды:
Re: BlackBox: генератор исходников обработки бинарного протокола
Angel71 писал(а):допустим нужно будет изменить порядок выполнения, добавить или удалить. так, здесь переходили на label1, меняем на label5. label3 удаляем, ищем все переходы на него и меняем на label4. с ростом сложности, количеством состояний

Это говорит о полном непонимании goto :)
Создай указатель на таблицу переходов. Будет выглядеть очень читаемо, таблица будет алгоритмом конечного автомата.

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

Angel71 » 20 янв 2018, 10:38

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

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

Dmitry__ » 20 янв 2018, 10:51

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

Это второй довод кухарок - возьми камень толще, извини уж ангел :)

Я сейчас на stm32 пишу моноколесо, поверь обработка шины i2c (гироскоп mpu6050) жрет тучу ресурсов, а это всего лишь жалки 400 кгц. на шине i2c для 32-х битного контроллера на 70 мгц., Карл!. Пришлось все переводить на dma и прерывания, а обработку второго старт бита в пакете i2c делать на конечном автомате, и не поверишь - на goto. Да, можно было сделать на всяких функциях, но вот как раз вызов функций в прерываниях и есть - моветон, т.к. это компилится в call с сохранением переменных в стек и послед. восстановлением переменных из стека при return... :o

Я откопал топор войны с goto :lol:

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

Angel71 » 20 янв 2018, 11:38

весь мир кухарки, один ты граф. или до сих пор не дошло, почему существует неремонтируемая электроника, всё чаще делают выбор в сторону высокоуровневых языков высокого уровня вместо си и тем более асма, далеко не всегда используют самописные библиотеки и прочее, а выбирают что-то готовое, пусть даже и с приличным оверхедом? ну возьмёшь ты хилый проц, пару лет под него на асме ваять будешь, вылизывая до каждого байтика и тактика, а в это время у конкурентов 2я, 3я, 4я,... модель выйдет. под стм32 можно и без hal/cmsis, экономия байтиков и тактиков будет приличная, вот только далеко не всегда это приемлемо. хотя не удивлюсь, если вместо покупки нового модуля за пару баксов ты всегда будешь предпочитать часами или днями сидеть и пытаться вышедший из строя оживить.
стм32 после того, как ты на них кучу г-на вылил, постоянно заявлял, что тинек/мег на всё про всё достаточно? ыыыыы. вообще dma это очень мощная штука. когда ещё используются прерывания и/или настройка, что где взять, куда потом скопировать и т.д. как бы очень удобно и высвобождает кучу ресурсов. чуть ли не в пару строк можно взять данные с ацп и вывести на экран. или когда нужно с ацп для усреднения более одного замера. данные с энкодера без лишних телодвижений на на шим. для dac/шима данные подготовить, в дма отправить и бездельничать в вайле или ещё чем другим нагрузить. :pardon: да, удобно, ну так это ты только недавно это понял.
хз, как ты с датчиками работаешь. наверно для этого обязательно нужно асм знать, напрочь повыкидывать всякие hal/cmsis, овладеть сакральными знаниями об goto и прочие шаманства. f103c8t6, неортогональная бинс, минимум по 4 аксель/гиро/магнетометра. датчики разные, раньше почти все с i2c, сейчас есть и с spi. самая простая реализация спокойно на 103й и выгребать данные и fft и всё прочее успевает. в более сложной реализации, где для фурье и прочего ресурсов поболее надо, отдаёт данные на плату со старшим армом.
Последний раз редактировалось Angel71 20 янв 2018, 11:45, всего редактировалось 1 раз.

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

Madf » 20 янв 2018, 11:44

Dmitry__ писал(а):Любая конструкция "if", "switch" компилятором превращается в goto, есть основание задуматься. Goto - основная команда любого контроллера :wink:
Попробуйте без goto сделать конечный автомат в прерываниях, на всех других операторах это будет быдлокод (по скорости выполнения)...

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

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

Dmitry__ » 20 янв 2018, 12:17

Angel71 писал(а):весь мир кухарки, один ты граф

Я знал что тебе понравится :)
Для моноколеса мне stm32 нафиг не вперся, просто это СТАНДАРТНЫЙ контроллер для моноколес с bldc, и там stm32. Ты же помнишь, я всегда беру готовые платы и просто меняю в них прошивку на свою. И мне пофиг какой там контроллер, т.к. я граф и пишу проги для любых контроллеров :wink:
А так, никто еще лучше не сделал устройства для bldc, чем tgy, а там, о ужас - сраная avr и asm :D И вся твоя демагогия с "взять интель и высокий язык" и не париться - рушится от простой и надежной avr в bldc :D

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

Angel71 » 20 янв 2018, 12:36

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

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

Dmitry__ » 20 янв 2018, 12:54

Знатно сполз с goto :)

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

Про f303, которую ты уже удалил, должен тебя огорчить, это 8-ми битный контроллер да еще на древнем 8051 (древнее только говно мамонта) :)

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

Ой, ну не начинай про векторное управления, я хоть ел этих лобстеров :)

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

Angel71 » 20 янв 2018, 13:14

про гото тебе всё уже написал, если хочешь юзать, юзай.
f303 http://www.st.com/en/microcontrollers/stm32f303.html?querycriteria=productId=LN1531. 8бит из него делается напильником наверно, а архитектура меняется наверно кувалдой.
вот и не не начинай. различных контроллеров оборотов перепробовано прилично, на мегах ничего нормального для ла не попадалось. если на твоём колесе разницы нет или она достаточно мизерная, ну пользуйся.
Последний раз редактировалось Angel71 20 янв 2018, 13:33, всего редактировалось 1 раз.

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

Aseris » 20 янв 2018, 13:33

Вобщем все очень печально, к ембедед миру автор далек, комплексных решений не разрабатывал и на грабли с удовольствием начинает только наступать в попытке предоставить конструкционный блок. Вобщем удачи, поговорим через 3-5 лет, если они будут в ембедед, и в составе разных команд.(и побольше побольше заказчиков и менеджмента что подпишут измкнкне в проекте "еще одна маленькая кнопочка" на стадии финального тестирования). Сборник законов мерфи вам в помощь.

Dmitry__, Madf против goto в маленьких/оптимальных вещах против не имею, но нужно различать или прошивка запихивается пинками в контролер глде при -Os уровне оптимизации места нет (но обычно прямо на асме функции пишут). Либо все пишет один человек и для себя и только сейчас.

Dmitry__ писал(а):но вот как раз вызов функций в прерываниях и есть - моветон

Ага те же любимые грабли авторов компиляторов, не все правильно со стеком работабт... тот же С18 на pic18 и двух уровневом прерыванием из функции уже не вернется.

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


Rambler\'s Top100 Mail.ru counter