Делаем железку, часть 5: пишем ПО

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

Как и в случае с ассемблером на микроконтроллерах, прогресс в этой области сделал ряд шагов в сторону простого пользователя: если вы уже пробовали в молодости читать «Programming Windows», но после этого вам долго снились кошмары, можете расслабиться — чтобы написать хорошую и красивую программу для своих нужд, WinAPI изучать практически не придётся. По крайней мере, не в той части, которая касается рисования окон, обработки сообщений и прочего интерфейса.

Для создания приложений под Windows есть целый ряд средств быстрой разработки, полностью — или почти полностью — скрывающих от вас всю внутреннюю кухню: вы рисуете в графическом редакторе окошки, размещая на них кнопки, картинки, графики и что вам ещё надо, а потом пишете обработчики событий типа «пользователь жамкнул эту кнопку => увеличиваем переменную X на 3,14 и выводим её значение вон в той надписи». Какие кульбиты придётся проделать системе, чтобы сначала нарисовать эту кнопку в нужном виде в нужном месте, потом определить, что кто-то жамкнул, причём именно по ней, а потом ещё и отобразить нужную надпись нужным шрифтом, вас уже не касается ни в какой степени. Да, исполняемый файл получится большим и потащит за собой пачку библиотек, но кого в наше время волнует, мегабайтом там больше или мегабайтом меньше?

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

Из всего, чем я пробовал пользоваться, для непрофессионала нет ничего лучше, чем пакеты C++ Builder или Delphi компании, текущее название которой я помню не очень уверенно, но раньше она называлась Borland. Они громоздки, дороги, в них периодически встречаются разные ошибки, но по краткости пути к «хочу, чтобы у меня вот тут нарисовалось вот это» им нет равных.

Увы, бесплатных версий у них нет, а платные стоят неразумно для домашнего использования. Если этот факт вас не смущает — пользуйтесь.

Из бесплатных на ум в первую очередь приходят продукты open source — казалось бы, всё открыто и доступно, пользуйся сколько угодно и чем угодно. Увы, как показала моя практика общения с wxWidgets и Qt, всё это рассчитано на профессиональных программистов, а не на людей, которым надо сделать что-нибудь своё, сильно не заморачиваясь. Документации и примеров много, но без хороших знаний в объектно-ориентированном программировании вы в них погрязнете. Графические редакторы интерфейса убоги, тормозны и требуют регулярного допиливания руками. В качестве компилятора предлагается gcc, который после включения всех оптимизаций под Windows производит на свет файлы ровно в два раза крупнее, чем компилятор Microsoft. Последний в принципе прикручивается, но — опять же, руками. Можно частично обойти убогость средств разработки — делать GUI в специализированном редакторе, а сам код писать и компилировать в MS Visual С++, но про «интеграцию» одного с другим без кавычек писать трудно.

Короче всего результат был сформулирован на каком-то форуме: «Как нарисовать на окошке загогулину, в Delphi я понял через 15 минут, в wxWidgets — через полдня, а насчёт Qt до сих пор не уверен».

В общем, моим выбором — бесплатным и нормально работающим — оказался очередной продукт Мирового Зла, то есть, Microsoft Visual C#. От бесплатного Visual C++ он отличается как раз наличием визуального редактора GUI, ну а язык... А что язык — после C++ впечатление от C# весьма приятное, переход происходит без особых проблем, а насильственное приобщение программиста к объектной модели идёт только во благо. У дельфистов, конечно, может случиться ломка, они до сих пор с тем, что где-то можно переменные прямо внутри цикла for объявлять, не до конца свыклись, а тут вообще хедеры запретили — но, право слово, кто в наше время обращает внимание на мнение дельфистов?

MS Visual C# Express

Разумеется, за собой ваша программа будет тянуть библиотеки .NET, но кого это волнует в наше время? У большинства они уже давно стоят в системе.

  1. Для общения с девайсом через usb в .net вы что-то используете (компонент или библиотеку) или это родная функциональность?

    Thumb up 0 Thumb down 0

  2. avatar
    aleks-chk
    23 Июнь 2010 в 02:56 | #3

    Спасибо, большое за статьи.
    Надеюсь будет более подробная статья про написание кода в Microsoft Visual C#. А то уже давно подумываю изучить его и потихоньку уйти от бесплатного Turbo Delphi 2006.
    Синтаксис C# не сложный. Интересно именно увидеть пример приложения которое может взаимодействовать с внешними устройствами.

    Thumb up 0 Thumb down 0

    • Так а что там писать? Синтаксис в C# и C++ один и тот же, по всему остальному надо читать книжки — мне пары дней листания томика Троелсена по C# 2008 вполне хватило для начального ознакомления.

      Если со стороны железки мы используем FT232RL, то общение с ней простое до безобразия и примерно одинаковое на всех языках. У FTDI на сайте есть примеры на C#.

      Thumb up 0 Thumb down 0

  3. вероятно можно было eclipse или netbeans использовать

    Thumb up 0 Thumb down 0

    • А толку? Для GUI всё равно останутся те же Qt и wxWidgets с убогими визуальными редакторами и обширной, но бесполезной документацией.

      Thumb up 0 Thumb down 0

    • Для тех целей которые использует Олег — с головой хватит Express версии которую бесплатно можно скачать с сайт MS. Так что eclipse и netbeans тут явно не в лучшем положении.

      Thumb up 0 Thumb down 0

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

        Thumb up 0 Thumb down 0

        • аналогично и под .net можно найти тонны готовых библиотек и фреймворков. Да и платформенная зависимость это такая мелочь, особенно если при этом покрывается 90% десктопов.

          Thumb up 0 Thumb down 0

          • слабый аргумент — мир меняется ;), по капитализации — эпл уже “толще” МС
            ХП забанил слэйт на вин7 и купил палм (для опред сегмента)

            Thumb up 0 Thumb down 0

            • по капитализации — эпл уже “толще” МС
              ХП забанил слэйт на вин7 и купил палм (для опред сегмента)

              Вот и пишите под айфон и вебос. При чём тут ява?

              Thumb up 0 Thumb down 0

            • Ну и?
              Вот когда рыночная доля винды упадёт до 50%, тогда и поговорим, а сейчас она в подавляющем большинстве, и всякие жабы и прочее можно смело игнорировать.

              Thumb up 0 Thumb down 0

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

                Thumb up 0 Thumb down 0

                • а в контексте обсуждения — arduino почему-то не придержвается такой логики ;)

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

                  Thumb up 0 Thumb down 0

                • IE много времени не понадобилось ;)...

                  Причём тут IE? Достаточно иметь немного мосха чтобы понять что MS никогда не ориентировалась на малолетних дрочеров у которых встаёт от слов HTML5 и CSS3. MS ориентируется на корпоративный рынок, а там ценят стабильность, предсказуемость, надёжность, интегрируемость в инфраструктуру и прочее. Вот поэтому там в основном ползуют IE и никто не обновляется ибо и так работает и всех устраивает. В soho сегменте ситуация несколько другая, и тут уже мир захватывают альтернативные браузеры, но и они, в большинстве своём, работают на винде. Так что ваш комментарий абсолютно мимо утки.

                  во-первых экспириенс, во вторых гибкость, разделение труда (алгоритмы платформенно-независимы)

                  В ближайшем будущем нужно будет делать железячку которая будет снимать показания и управлять примерно полсотней девайсов, при этом должна быть возможность управлять этой самой железячкой с компа, и возможно даже комп должен уметь сам работать с этой полсотней девайсов. И я лично подумываю посмотреть в сторону .net micro framework. Если по цене не сильно дороже в итоге получится, то это даст возможность написать код один раз и использовать его везде. Эта концепция (разделения кода) рулит ибо позволяет сэкономить время как на написание и разработку, так и на тестирование. А то что вы написали — бред.

                  Thumb up 0 Thumb down 0

                  • технологии меняются, меняются подходы, если что-то статично — оно “умрёт” (потеряет рынок)
                    ИЕ потерял рынок — факт
                    и этот факт был приведен к цифре 90%. Какова является жалким оправдание привязки к винде (косорукие, как вы сказали, дрочеры/вебкодеры точили под ИЕ с темиже оправданиями)

                    и так, на всякий случай, те кто работает в корпорациях — ещё “живут” и “дома”...
                    Вот они-то и “проголосовали” — а не топы, кот. “нашкодят” и сбегут на новое место (за новыми откатами и карьерой), а корпорация могет и “потонуть” ;)

                    кто вам рассказал такие сказки (несбыточные теории — сродни коммунизму) про корпораци (что они ценят)... — они ценят откаты и костсэйвинг (порой — вопреки здравому смыслу). И я это знаю из реальной жизни (“каждый день” это вижу)

                    в данном случае .нет ничего не обуславливает, кроме венды, и библиотеки обсчения с девайсами существуют без привязки к .нет (и винде, в частности).

                    используюя фрэймворк кот. не привязан к винде..., в итоге тоже и получим (с разделением, джекпотом и ....). Может без гуя работать и на сервере, на кот. может и не быть винды, и не придётся переписывать (если кроссплатформенно)... — съэкономит время. То что вы “лично подумываете” — ваше право

                    Алаверды — “а то что вы написали — бред”

                    Thumb up 0 Thumb down 0

  4. “У него по этой причине только последняя версия стала нормально работать...“
    это тогда к чему, и аэро причём?
    т.е. если я запущу прогу, в консоле с arduino, я должен выключить аэро?

    Thumb up 0 Thumb down 0

    • я про использование их библиотеки, а не ИДЕ ;)

      Thumb up 0 Thumb down 0

    • К тому, что нехрена в треде о написании GUI приводить в пример программу, у которой GUI — это самое кривая часть.

      Какой нахрен библиотеки? Arduino — это IDE и простенькая плата с микроконтроллером.

      Thumb up 0 Thumb down 0

      • в цикле “статей” была приведен “этот” тулз, и гуй (в текущей статье)

        “У него по этой причине только последняя версия стала нормально работать под виндой, почти не тормозя и не отключая Aero?..“
        это к чему относилось? ;)

        “Какой нахрен библиотеки?” — например вот
        http://www.arduino.cc/playground/Interfacing/Java
        http://rxtx.qbang.org/

        Теоретически, гуй, может быть привязан к любой библиотеке общения с платой (не противоречит логике)

        гуй и библиотека м.б. для java (тоже нет противоречия)

        так понятней? ;)

        Thumb up 0 Thumb down 0

        • RXTX is a Java library, using a native implementation (via JNI), providing serial and parallel communication for the Java Development Toolkit (JDK).

          Охуенно. Во-первых, это не Arduino, во-вторых, нахрена оно мне надо? Я вообще COM-портом не пользуюсь.

          Thumb up 0 Thumb down 0

  5. avatar
    Дмитрий Касьянов
    27 Июнь 2010 в 13:44 | #33

    Microsoft Visual C#. От бесплатного Visual C++ он отличается как раз наличием визуального редактора GUI

    Кстати, в Visual C++ 2010 Express есть визуальный редактор GUI.
    Правда, я панель элементов нашёл только через неделю: в Visual C# она вызывается кнопкой у левого края экрана, а в Visual C++ эта кнопка почему-то справа.

    Thumb up 0 Thumb down 0

Вы должны войти, чтобы написать комментарий.