rusEfi автомобильный блок управления: улучшили железо, теперь будем писать к нему софт

    Два месяца назад мы остановились на том, что rusEfi стал полнофункциональным блоком управления — вот только аппаратная часть напоминала взрыв на макаронной фабрике. Напомню, rusEfi — это автомобильный блок управления с открытым кодом и железом на платформе stm32.

    Мы не сидели сложа руки и сфокусировались как раз на аппаратной стороне вопроса: задача была сделать шаг вперёд по железу, и я думаю прогресс на лицо:

    Было no name v3:

    image

    Стало Франкенштейт 0.1:

    image

    Понятно что и это еще исключительно инженерная платформа, а не конечный продукт — но главное, что прогресс есть :)

    Плата естественно работает:



    10 плат “Франкенштейн 0.1” уже изготовлены, еще 10 плат — заказаны. Сейчас мне нужно собрать две платы и послать одну в Канаду, а вторую в Словакию — вот такой у нас проект интернациональный. Исходники платы кстати тут.

    Разработку железа поставили на паузу и возвращаемся к софту и внедрению. С точки зрения самого управления двигателем прошивка вперёд не продвинулась — прошивка продвинулась вперёд в плане настраивоемости и удобства отладки: появилась поддержка HD44780 символьного экранчика, резко уменьшилось количество условной компиляции — значительно больший процент настроек теперь можно изменять на лету, через нашу отладочную консоль или через популярную универсальную программу настройки ЭБУ. Появился SD слот. Появилась CAN шина — которая по большому счёту нам пока не нужна. Появился драйвер популярного GPS модуля — который на текущий момент вообще чистой воды баловства :) Одним словом, мы строили фундамент — и мне кажется мы его построили.

    Теперь можно заняться самым вкусным — теперь из всего этого можно сделать удобный, универсальный и простой автомобильный блок управления.

    Лично я в первую очередь — опытный программист, так что прошивку будем писать основательно:
    Юнит тесты & непрерывная интеграция.
    Три дня назад перешли с C на С+ — будет совсем немного ООП, так что пока будем считать только один плюс в слове “C+”.
    Неделю назад появилась возможность компилировать основную логику прошивки под Windows — из этого должно скоро получиться автоматизированное функциональное тестирование.

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

    Так что пока программировать нейронные сети немного рано, пока нужно допрограммировать весь фундаментальный функционал. Да, пока задачи относительно скучные — но интерес добавляют требования кристальной чистоты коды и удобства для пользователя.

    Так что если здесь есть педантичные программисты-перфекционисты, которые хотят научиться чему-то новому — присоединяйтесь.

    Ссылки по теме:
    http://rusefi.com/wiki/index.php?title=Main_Page/ru
    http://rusefi.com/forum/

    PS: поступила просьба конкретнее озвучить стоящие задачи по программированию.
    Итак, мотор уже работает — т.е. сами управляющие процессы в режиме прототипа, с привязкой под конкретный мотор есть. Улучшить нужно параметризацию этих процессов — т.е. во-первых конфигурация должна полностью изменяться через последовательный порт, а во-вторых параметры новые должны видимо начать применяться без перезапуска программы. Это самое важное на данный момент.

    Следующий этап — усложнение управляющих процессов. Например входным параметром 'нагрузка' должен быть не медленный аналоговый датчик, а быстрый аналоговый датчкик — который нужно опрашивать только внутри конкретного окна времени и усреднять. Алгоритм поддержания холостых оборотов сейчас более чем наивный — нужно что-то делать. Алгоритм обработки двойного датчика положения дроссельной заслонки, и так далее и так делее. Алгоритм управления электронной дроссельной заслонкой плюс электроника этого упарвления. А еще в какой-то момент нужно переменные времени со странных тиков в секунды/миллисекунды. И так далее.

    Я начну с автоматизированного функционального тестирования — мне спокойнее что-то рефакторить, когда оно само проверяет, что внешнее поведение не меняется неожиданно.
    Поделиться публикацией
    Комментарии 52
      +6
      прошивку будем писать основательно:
      Юнит тесты & непрерывная интеграция.

      Если основательно, то где тогда слова про MISRA-C и MISRA-C++?
        +1
        Вы знаете правильные слова, вот только какое моё отношение к автомобильной индустрии? Никакого.

        Стандартизация нужна там, где она нужна — для сертификации и для взаимоотношений b2b. Если Вы думаете увидеть промышленное качество на общественных началах, то так не бывает.
          +5
          MISRA-C с 2004 года именуется «Guidelines for the use of the C language in critical systems», да и первая версия (хотя и была разработана автомобильными компаниями) была стандартом программирования, а не конкретно автомобильной индустрии.

          MISRA-C — это задокументированный здравый смысл разработчика встраиваемых систем. Согласитесь, что, например, требование не использовать рекурсию (привет stack overflow) для микроконтроллеров довольно разумно. Также разумно, например, требование использовать обозначения типов, которые однозначно определяют их разрядность signed/unsigned — для разработчиков под микроконтроллеры это естественное требование и ничего сверхъестественного в нём нет. Также кроме правил из MISRA-C стоит включить все-все-все варнинги и не отключать ни одного (кроме случаев когда это требуется и это не ошибка, а так надо).

          Ещё очень хорошо о MISRA-C высказался Chris Hills.
            0
            Ой как хорошо, оказывается я как минимум до некоторых пунктов здравого смысла сам дошёл своим умом :)

            Я подозреваю, что там наверное и валидаторы автоматические есть или настройки компилятора или компилятор особый? Если если возможность натравить что-то на svn.code.sf.net/p/rusefi/code/trunk/firmware/ — буду очень благодарен!
              0
              Есть как отдельно статические анализаторы с проверкой правил MISRA-C, так и компиляторы со встроенной проверкой.
              На википедии приведены самые известные.
                –1
                У меня сейчас нет времени просто, я лично эту задачу отложу — вот, могу тикет завести: sourceforge.net/p/rusefi/tickets/54/

                Если есть возможность помочь — было бы супер :)
          0
          Кстати, есть ли свободные (или хотя бы бесплатные) статические анализаторы поддерживающие misra-c?

          В том же сонаре (sonarqube) поддержка C/C++ стоит 7000 евро, что для энтузиаста дороговато.
            0
            Open-source или freeware, к сожалению, не видел.

            В IAR Embedded Workbench, да и во многих из списка есть полнофункциональный триал.
            В PC-Lint есть, он тоже платный, не сильно дорогой (по сравнению с 7к евро), про него даже есть статья на хабре.
              –1
              Супер! IAR даёт какую-то надежду.
          –2
          «Юнит тесты & непрерывная интеграция.» — и вы считаете это обоснованием основательности подхода к разработке? Может быть, в данном случае толку от этого мало… а просто используете то что уже знаете. Есть какие-то результаты по которым можно судить об эффективности подхода к разработке?
            +2
            Уважаемый, вы выдёргиваете слова и мне кажется балансируете на грани перехода на личности?

            Мой опыт использования этого подхода позитивен. Слава богу, что я никому не должен ничего доказывать :)
              –1
              юнит-тесты и непрерывная интеграция — это как «мойте руки перед едой, регулярно принимайте душ» и прочие элементарные правила гигиены.

              Есть много противников, и они даже как-то это всё обосновывают, но практика показывает, что такого рода вещи гораздо проще соблюдать, чем выяснять, насколько реальный эффект это дает, сколько будет экономии, если этого не делать.
              0
              Проект очень интеречен, особенно интересна цена. Сможете ли вы конкурировать с знаменитым MegaSquirt? Насколько сложно будет настроить его для конретно своей машины?
                0
                уточните в данном случае термин 'конкурировать' что значит?

                Конечно же надежда сделать лучше, потенциал есть сделать лучше — на нашей стороне новое поколение процессора. А на их стороне — 10 лет :)
                А вот как получится — покажет время. Или взлетит, или я брошу через год.
                +6
                К сожалению свистелки и перделки начались раньше, чем появилось нормальное управление двигателем :(
                  –1
                  Рома, к сожалению ты от нас ушёл — так что я боюсь твои комментарии не совсем объективны.

                  Ты не совсем прав, давай спор на этом остановим? Пожалуйста.
                    +3
                    Конечно ушел. Теперь это взгляд со стороны, зная, что происходит внутри. Так что очень даже и вполне объективны.

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

                    Это не спор.
                      –1
                      Прости меня — я мало успеваю. Я программирую сейчас почти один, пока я программирую почти один — я могу только то, что я могу. На С++ мне пришлось фрилансера нанимать — потому что на этот переход у меня времени не было.

                      Ты не прав, С++ — это фундамент, это не балкон. ООП нужен в том числе и для того, чтоб улучшить дизайн.
                      Ты не прав, экранчик нужен для отображения критической ошибки. По USB критическую ошибку не передать — usb многопоточный драйнер, он из halt не работает. UART тоже не совсем вариант для передачи критической ошибки в момент смерти, так что получается — экранчик. Экранчик это еще и удобство внедрения.

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

                      Ты прав, CAN баловство. Хотя нет, ты не прав — CAN это PR, чтоб привлекать людей, потому что один я много не напишу, см. пункт первый.
                        +3
                        Сколько моторов работает на этой системе сейчас? Сколько машин на этой системе используются энтузиастами повседневно, чтобы оперативно отлавливать проблемы и фиксить их?

                        — С++ крайне спорный момент. Нужен он или нет очень даже открытый вопрос.
                        — Экранчик не нужен. Когда совсем все плохо есть uart (он есть) и есть светодиоды.
                        — GPS не нужен никому кроме тебя лично.
                        — CAN не нужен даже в роли пиара. Нахера нужен CAN, если на этой системе нельзя даже мотор завести без ковыряния в коде по локти?

                        Ты наверное забыл, что главное в системе управления двигателем — это сделать так, чтобы работал двигатель. GPS и CAN с экранчиком очень слабо помогают двигателю работать. Чтобы двигатель работал, работал надежно и адекватно во всех режимах нужны совсем другие вещи. Они есть? Они есть хотя-бы в планах?
                          0
                          rusefi.com/wiki/index.php?title=Manual:Current_Status/ru
                          Всего двигателей заведено: 1

                          Я сегодня буду паять две платы, как раз чтоб заводили два человека два мотора. Людям оказалось проще заплатить мне, чем паять самим — те, кто умеют заводить моторы не хотят паять мелкую пайку, там надо пасту покупать по уму и фен.

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

                          Ты меня не слышишь — ты почему-то считаешь что я обязан быть максимально эффективным, именно в твоём видении эффективности? Так я напоминаю — никто никому к сожалению ничего не должен, я имею право немного развеяться и поиграться с CAN, если мне это интересно.
                            0
                            Всего двигателей заведено: 1

                            Это отличный результат, конечно. Наверное это и есть твое видение эффективности?

                            я имею право немного развеяться и поиграться с CAN, если мне это интересно.

                            Отличный пиар. Двигателей заведено один, ты играешься с CAN вместо того, чтобы заниматься тем, что имеет отношение к работе двигателей и потом приглашаешь кого-то присоединиться?
                            Это очень сомнительная трата собственного времени. Я сейчас про мое время. Была команда, которая разрабатывала железо, ты их (нас) игнорил и вот не прошло и пол года, как допилил свой франкенштейн. Вместо работы над кодом, который отвечает за работу двигателя приоритеты ушли в сторону свистелок и перделок.

                            Если ты хочешь, чтобы тебе помогали, мне кажется, что действовать следует несколько иначе. Сейчас ничего не располагает тебе помогать. Ни лицензия, ни отношение к работе, ничего.
                              –1
                              Рома, если мы заведём еще два двигателя — я пост про это посвящу тебе.

                              Если 31ого декабря 2014 года будет заведено меньше четырёх двигателей — пост о закрытие проекта я посвящу тоже тебе.

                              С позиции критикана ты в любом раскладе в выигрыше :)
                                0
                                Мда. Я тебе о реальных проблемах говорю, ты меня критиканом называешь.
                                  –1
                                  Очень может быть, что мы друг друга не слышим, потому что буковками переговариваемся. Я тоже человек, мне тоже обидно за некоторые вещи.

                                  Ты во многом прав, ответ только один — надо работать, работать и работать — и станет лучше. Я знаю, что могу — делаю.
                                    –1
                                    ответ только один — надо работать, работать и работать — и станет лучше.

                                    Может быть стоит сначала пилу заточить, или так и будешь продолжать тупой пилой пилить?
                                    Танцы на граблях.
                                      +3
                                      Я не могу понять, какой именно смысл ты пытаешься в слова вложить — но по сумме твоего ухода и моих личных комплексов я слышу, что мне нужно просто убить себя об стену.

                                      Если у тебя есть какие-то конкретные идеи — я буду очень им рад на rusefi.com/forum/
                                      Где репозиторий ты знаешь. Мой скайп ты знаешь. Я думаю здесь достаточно бельё полоскать.
                                        0
                                        По-моему, он как раз пилу и затачивает. Добавление базовых функций для отладки хотя бы. Так что фундаментальный функционал реально нужен. Я вот, к примеру, рад тому, что это направление развивается — опен-сорс приходит в наши жизни ещё лучше.
                                          0
                                          Инструментов для отладки более чем достаточно. Даже больше скажу — уже сегодня на этой системе (и на нормальном железе) могло работать от трех до пяти моторов минимум. Там начата база, и очередным этапом была выбрана разработка части отвечающей за speed density. Это то, без чего остальным участникам проекта никак не завести свои моторы, maf не интересен никому. Вот конкретная задача в которую упирается даже теоретическая возможность запустить еще моторы. Для решения этой задачи не нужно было новое железо или человеко-год времени. Работы там меньше, чем нужно на can или gps. Но были выбраны can и gps, которые к фундаментальному функционалу не имеют вообще никакого отношения.
                                            0
                                            Я правильно понимаю, что Вы отвечали за железо, а andrey239 — за софт? И что он отказался от разработки соответствующей софтовой части, предпочитая описанное в статье?
                                              0
                                              Нет, я не отвечал за железо, да и немного моего кода в rusefi есть. Пытался организовать группу понимающих в железе людей для разработки платы под этот конкретный проект. Андрей сказал, мол, делайте что хотите, я буду привлекать народ для разработки таких вот франкенштейнов, а вы делайте что хотите, полноценная плата без дискавери (на которой гироскоп и микрофон) сейчас не приоритетна. Каждый сам по себе.
                                              Вроде как и не плохо, но работая совместно можно было достичь больших результатов и достичь их быстрее. При нормальном подходе та версия железа была бы уже готова. Разработка той версии железа над которой работали мы заглохла, так как я бросил постоянно тыкать палочкой народ. Есть схемы, но нужно организовывать людей для дальнейшей работы, а на это ведь тоже нет времени :).
                                              Можно было закончить работу над той версией железа, которая не подразумевала в своем составе отладочной платы, но часть обстоятельств от проекта меня оттолкнули.
                                              И не в последнюю очередь неприятная ситуация, когда Андрей мог привлечь к проекту разработчика имеющего опыт в разработке железа автомобильных мозгов, но не сделал этого.
                                              –1
                                              Абалдеть. Пять мотогов могло быть? Но коварный Костя сделал GPS, и всё пошло крахом…

                                              Да, ты раскрыл тайну — на самом деле я хочу проекту только плохого, я просто коварно сабатирую :)
                                    0
                                    А вот поподробнее о лицензии, пожалуйста! Это не open hardware/source?

                                    Если нет, то это коммерческое предприятие в классическом его виде: есть люди, работающие за зарплату и есть люди владеющие долями. И тут как бэ о какой помощи речь? За рыночную зарплату, даже я из Нью-Йорка готов приехать и помочь. На з.п. делаешь, что говорит начальство, либо увольняешься… Если работаешь за долю, то голосуешь по вопросам своей долей. Если не хватает доли, чтобы продавить свою точку зрения, то не повезло — в следующий бизнесс надо вкладываться больше.

                                    Если там все open hardware/source, то andrey239 (школа 239 что ли?) прав. В open source все занимаются чем хотят. Другое дело, что не все попадает в основную ветку. А что попадет, решается очень авторитарно Линусом Торвальдсом ответственными отцами-основателями.

                                    Развели тут говносрач по очевидному вопросу…
                                      –1
                                      rusefi.com/wiki/index.php?title=License:general

                                      239 — ну конечно.
                                        0
                                        Вторая попытка — rusefi.com/wiki/index.php?title=License:general
                                          0
                                          Ну значит второй сценарий! В опен сорсе все свободны! И никто никому ничего не должен. И иногда это за гранью разумного. Такой опен сорс!
                                          Никто же не запрещает команде KDE Dolphin перепесывать по шестому разу, хотя могли бы наверное поконтрибутить время и силы в более важный Wayland. Ну и таких примеров море.

                                          Единственное, замечание — то, что у вас там написано, лицензией назвать нельзя. Понятие «open source» — это не лицензия. Перестаньте позориться и для обеих частей (софтовой и железной) выберите известные во всем мире, устраивающие вас лицензии. Для софта походу вам подойдет GPL v3. Можно там к нему доавить 2 предложения о том, что нельзя запускать код на железе с проприетарным дизайном, ну или как-то так. Точнее запускать то вы не можете запретить, можете запретить продавать ваш код в комбинации с проприетарным железом. Перспективы этого запрета, кстати, очень туманны.

                                          Успехов вам!
                                            +3
                                            Насколько я понял общаясь с Андреем по поводу лицензии, единственное почему он не взял популярную широко применяемую лицензию — он хочет оставить за собой право потом взять все эти наработки и использовать в своем закрытом (и наверное же платном) проекте. Так как решение на этот счет принимает он единолично возможен такой сценарий, например. Андрей делает форк, объявляет его закрытым (железо/софт), при этом свободно из открытой части проекта может использовать наработки в своем закрытом форке. Из закрытой в открытую часть, естественно, можно ничего не пускать, иначе кто будет покупать закрытое, если можно взять открытое бесплатно? Сообщество разрабатывает открытый проект, все наработки перетекают в закрытый + собственные наработки в закрытом. Удобно.

                                            Да, он вложил много усилий в этот проект, но сценарий от этого не становится невозможным. Вот по этому я и сказал, что эта лицензия мне не нравится.
                                              –1
                                              А нет ли некоторого противоречия между двумя тезисами:

                                              Первый тезис — «Андрей был обязан сделать фичу MAP, но не сделал её в приемлимые сроки»
                                              и
                                              Второй тезис — «Сообщество разрабатывает открытый проект, как Андрей смеет не отказываться полностью от своих авторских прав»
                                              ?
                                                +1
                                                Вы цепляетесь к словам сейчас. Человек вам конкретно говорит, что у вас лицензия не ясная. А другой вас прямо обвиняет в том, что вы хотите нажиться на open source сообществе. А вы тут начинаете какую-то ахинею с противоречиями.

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

                                                Вобщем, нажалуюсь про вас Ричарду Столману и он предаст вас анафеме. И школу свою не позорили бы! Хотя может это там (в 239) вас так коварничать научили?!
                                                  0
                                                  спокойно, выдыхаем. Лицензия мутная — нужно будет прояснять, я завёл тикет sourceforge.net/p/rusefi/tickets/57/

                                                  Про охинею и медведя не понял.

                                                  Давайте на личности не будет так банально переходить и тему школы закроем здесь, заранее спасибо :)
                                                +1
                                                А ну тогда объясняется эта бредовая лицензия «open source». В реальности очень трудно будет использовать в закрытом отрывки кода, которые были сделаны посторонними людьми и закоммичены в проект. Люди скажут, что это их интелектуальная собственность, а при той лицензии, что там сейчас, проект никак не защищен вообще. Любой ресурс после предъявления претензий забанит им репозиторий, и любой суд признает, что лицензия была не ясна — права сохраняются за авторами кода.

                                                Вообще, конечно, динозавры опен сорса за милю такие лажевые лицензии по запаху определяют. Не получит Андрейка помощи от сообсвщества… :)
                                                  –1
                                                  Уже 'Андрейка'?

                                                  Ну это же просто тупо так себя вести :(
                                                    –1
                                                    Похоже проблематика достаточно типичная и решается она двойной лицензией —
                                                    producingoss.com/en/dual-licensing.html

                                                    С судом мы немного забегаем вперёд, а вот пожертвования кода придётся действительно начать подкреплять подписью. См. rusefi.com/forum/viewtopic.php?t=325

                                                      –2
                                                      Лицензия на прошивку стала GPL 3.0

                                                      Но про Андрейку всё равно оскорбительно и тупо.
                                                      0
                                                      Нужно понимать, что даже с GPL 3.0 за мной ровно это же право и остаётся — не очень многое с переходом на GPL 3.0 меняется. Но с GPL 3.0 конечно же всё намного чище и понятнее.
                                                      –1
                                                      Кстати да, понятие «open source» в лицензии использовать нельзя, это мутный термин. Значит лицензию нужно уточнять — sourceforge.net/p/rusefi/tickets/57/
                                                      Спасибо за мудрое замечание!
                                                  0
                                                  Лицензия на прошивку стала GPL 3.0 — спасибо, что допинал меня хоть так разобратсья в вопросе :)
                                          +1
                                          PS: а еще лучше — вернись к нам! У нас платка есть, её можно юзать. Из 10 штук в РФ должно скоро появится.
                                        +1
                                        Я как ярый пользователь T5Suite на Саабах и Megasquirt на хондах всегда заинтересован в подобных начинаниях. Я постарался поискать на сайте, но не нашел ответа: Вы как будете реализовывать knock detection? Будет датчик типа микрофона или что-то вроде ionic sensing как на Саабах? Зажигание будет реализованно индивидуально или wasted spark? В принципе, готов как минимум поконсультировать по некоторым отдельным аспектам.
                                          0
                                          Будем рады на rusefi.com/forum/ — основная тусовка там

                                          Детонация: у меня уже два месяца в столе лежит плата rusefi.com/forum/viewtopic.php?f=4&t=400 — для HIP9011 (это чип для работы с пьезо датчиком) но времени спаять её и тем более запрограммировать пока нет. Это типичный пример того, что сейчас нам нужны руки, у которых бы было время :)

                                          До ионик ionic sensing нам примерно как до звезды сейчас, у нас один двигатель заведён. Зажигание — да абсолютно как угодно, это очень мелкая деталь имплантации, софту абсолютно всё равно — этот вопрос железом диктуется.
                                            0
                                            Закончится 8-е марта — зарегистрируюсь. Интересно. Жаль что сейчас мне не на чем даже думать об опробовать — дизель однопроводный у меня сейчас, да и тот провод аж открывает топливный клапан. Так-что я разве-что в роли консультанта.
                                              0
                                              8-е закончилось :)
                                                0
                                                Вот только сегодня и закончилось. Ох-уж этот понедельник после 8-го марта… Иду региться как из гаража вернусь.

                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                        Самое читаемое