Делаем железку, часть 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, но кого это волнует в наше время? У большинства они уже давно стоят в системе.


Для общения с девайсом через usb в .net вы что-то используете (компонент или библиотеку) или это родная функциональность?
Родную библиотечку D2XX-драйвера от FT232RL.
Спасибо, большое за статьи.
Надеюсь будет более подробная статья про написание кода в Microsoft Visual C#. А то уже давно подумываю изучить его и потихоньку уйти от бесплатного Turbo Delphi 2006.
Синтаксис C# не сложный. Интересно именно увидеть пример приложения которое может взаимодействовать с внешними устройствами.
Так а что там писать? Синтаксис в C# и C++ один и тот же, по всему остальному надо читать книжки — мне пары дней листания томика Троелсена по C# 2008 вполне хватило для начального ознакомления.
Если со стороны железки мы используем FT232RL, то общение с ней простое до безобразия и примерно одинаковое на всех языках. У FTDI на сайте есть примеры на C#.
вероятно можно было eclipse или netbeans использовать
А толку? Для GUI всё равно останутся те же Qt и wxWidgets с убогими визуальными редакторами и обширной, но бесполезной документацией.
а почему не джава http://www.arduino.cc/playground/Interfacing/Java
Таскать с собой яву — это уже слишком тяжеловесно.
я так не считаю, в маке она уже есть, в линухах из репозитариев...
есть варианты спец. установщиков, кот. скачивают/обновляют jre
В случае с шарпеем — маловероятно что проще...
несколько версий .нет, кот. ещё могут, на хрюше, не “взлететь” (последняя по-моему)
Кого волнуют маки и линукс?..
по статистике — почти 10% америки
и около 6% волдвайд
http://marketshare.hitslink.com/report.aspx?qprid=11
и в общем — растет интерес
если рассматривать тезис глобально... — частенько слышал подобное про IE и др. браузеры... ;)
Если рассматривать тезис глобально, то все мы умрём, а прочее — суета.
“Если рассматривать тезис глобально, то все мы умрём, а прочее — суета.“
вот одна из полных версий (с другим окончанием) ;)
http://ru.wikipedia.org/wiki/%D0%9D%D0%B8%D0%BA%D0%B5%D0%BE-%D0%A6%D0%B0%D1%80%D0%B5%D0%B3%D1%80%D0%B0%D0%B4%D1%81%D0%BA%D0%B8%D0%B9_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB_%D0%B2%D0%B5%D1%80%D1%8B#.D0.A1.D0.BE.D0.B2.D1.80.D0.B5.D0.BC.D0.B5.D0.BD.D0.BD.D1.8B.D0.B9_.D0.BF.D1.80.D0.B0.D0.B2.D0.BE.D1.81.D0.BB.D0.B0.D0.B2.D0.BD.D1.8B.D0.B9_.D1.86.D0.B5.D1.80.D0.BA.D0.BE.D0.B2.D0.BD.D0.BE.D1.81.D0.BB.D0.B0.D0.B2.D1.8F.D0.BD.D1.81.D0.BA.D0.B8.D0.B9_.D1.82.D0.B5.D0.BA.D1.81.D1.82
А нахрена мне думать о nix и Mac-пользователях, если программу эту я буду делать для себя? А мне линь или мак с качестве домашней ОСи могут присниться разве что в кошмарном сне
для GUI — в нетбинс неплохой визуальный редактор (для джава-свинг)
Для тех целей которые использует Олег — с головой хватит Express версии которую бесплатно можно скачать с сайт MS. Так что eclipse и netbeans тут явно не в лучшем положении.
цели могут меняться, софт совершенствоваться и расширяться, для джава вагоны готовых библиотек и фреймворков, да и платформенной/вендорской зависимости меньше (или вовсе не будет)
аналогично и под .net можно найти тонны готовых библиотек и фреймворков. Да и платформенная зависимость это такая мелочь, особенно если при этом покрывается 90% десктопов.
слабый аргумент — мир меняется ;), по капитализации — эпл уже “толще” МС
ХП забанил слэйт на вин7 и купил палм (для опред сегмента)
Вот и пишите под айфон и вебос. При чём тут ява?
Ну и?
Вот когда рыночная доля винды упадёт до 50%, тогда и поговорим, а сейчас она в подавляющем большинстве, и всякие жабы и прочее можно смело игнорировать.
IE много времени не понадобилось ;)...
а в контексте обсуждения — arduino почему-то не придержвается такой логики ;)
часто компании/разработчики — пишут под многие платформы
во-первых экспириенс, во вторых гибкость, разделение труда (алгоритмы платформенно-независимы)
У него по этой причине только последняя версия стала нормально работать под виндой, почти не тормозя и не отключая Aero?..
вот этот вопрос не ко мне, а к разрабам (и не я выбирал arduino)
И не я приводил его как пример ява-приложения.
Причём тут IE? Достаточно иметь немного мосха чтобы понять что MS никогда не ориентировалась на малолетних дрочеров у которых встаёт от слов HTML5 и CSS3. MS ориентируется на корпоративный рынок, а там ценят стабильность, предсказуемость, надёжность, интегрируемость в инфраструктуру и прочее. Вот поэтому там в основном ползуют IE и никто не обновляется ибо и так работает и всех устраивает. В soho сегменте ситуация несколько другая, и тут уже мир захватывают альтернативные браузеры, но и они, в большинстве своём, работают на винде. Так что ваш комментарий абсолютно мимо утки.
В ближайшем будущем нужно будет делать железячку которая будет снимать показания и управлять примерно полсотней девайсов, при этом должна быть возможность управлять этой самой железячкой с компа, и возможно даже комп должен уметь сам работать с этой полсотней девайсов. И я лично подумываю посмотреть в сторону .net micro framework. Если по цене не сильно дороже в итоге получится, то это даст возможность написать код один раз и использовать его везде. Эта концепция (разделения кода) рулит ибо позволяет сэкономить время как на написание и разработку, так и на тестирование. А то что вы написали — бред.
технологии меняются, меняются подходы, если что-то статично — оно “умрёт” (потеряет рынок)
ИЕ потерял рынок — факт
и этот факт был приведен к цифре 90%. Какова является жалким оправдание привязки к винде (косорукие, как вы сказали, дрочеры/вебкодеры точили под ИЕ с темиже оправданиями)
и так, на всякий случай, те кто работает в корпорациях — ещё “живут” и “дома”...
Вот они-то и “проголосовали” — а не топы, кот. “нашкодят” и сбегут на новое место (за новыми откатами и карьерой), а корпорация могет и “потонуть” ;)
кто вам рассказал такие сказки (несбыточные теории — сродни коммунизму) про корпораци (что они ценят)... — они ценят откаты и костсэйвинг (порой — вопреки здравому смыслу). И я это знаю из реальной жизни (“каждый день” это вижу)
в данном случае .нет ничего не обуславливает, кроме венды, и библиотеки обсчения с девайсами существуют без привязки к .нет (и винде, в частности).
используюя фрэймворк кот. не привязан к винде..., в итоге тоже и получим (с разделением, джекпотом и ....). Может без гуя работать и на сервере, на кот. может и не быть винды, и не придётся переписывать (если кроссплатформенно)... — съэкономит время. То что вы “лично подумываете” — ваше право
Алаверды — “а то что вы написали — бред”
“У него по этой причине только последняя версия стала нормально работать...“
это тогда к чему, и аэро причём?
т.е. если я запущу прогу, в консоле с arduino, я должен выключить аэро?
я про использование их библиотеки, а не ИДЕ ;)
К тому, что нехрена в треде о написании GUI приводить в пример программу, у которой GUI — это самое кривая часть.
Какой нахрен библиотеки? Arduino — это IDE и простенькая плата с микроконтроллером.
в цикле “статей” была приведен “этот” тулз, и гуй (в текущей статье)
“У него по этой причине только последняя версия стала нормально работать под виндой, почти не тормозя и не отключая Aero?..“
это к чему относилось? ;)
“Какой нахрен библиотеки?” — например вот
http://www.arduino.cc/playground/Interfacing/Java
http://rxtx.qbang.org/
Теоретически, гуй, может быть привязан к любой библиотеке общения с платой (не противоречит логике)
гуй и библиотека м.б. для java (тоже нет противоречия)
так понятней? ;)
Охуенно. Во-первых, это не Arduino, во-вторых, нахрена оно мне надо? Я вообще COM-портом не пользуюсь.
Кстати, в Visual C++ 2010 Express есть визуальный редактор GUI.
Правда, я панель элементов нашёл только через неделю: в Visual C# она вызывается кнопкой у левого края экрана, а в Visual C++ эта кнопка почему-то справа.