Прототипирование и моделирование встроенного программного обеспечения в Windows

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

меня особенно интересует, возможно, низкоуровневый подход, использующий чистый код C и raw Win32 API, а не MFC, .NET/C#, vxWidgets или Qt. Я также хотел бы использовать бесплатные инструменты разработки, такие как Visual C++ Express с SDK платформы и ResEdit для редактирования ресурсов.

Я ищу примеры кода для рендеринга графических ЖК-дисплеев (от монохромного до 24-битного цвета) с эффективным интерфейсом на уровне пикселей, многосегментными ЖК-дисплеями и нарисованными владельцем кнопками, которые отвечают как на "депрессивные", так и на "выпущенные" события.

4 ответов


Я удивлен, что мой вопрос вызвал столько кривотолков и негативных комментариев. Стратегия разработки глубоко встроенного кода C на одной машине (например, ПК) и его запуска на другой (встроенный микроконтроллер) называется "двойной таргетинг" и действительно довольно распространена. Например, разработка и тестирование глубоко внедренного кода на ПК является краеугольным камнем недавней книги Джеймса Греннинга "тестовая разработка для Embedded C".

избегая Узкое место целевого оборудования с двойным таргетингом

обратите внимание, что двойной таргетинг не означает, что встроенное устройство имеет какое-либо отношение к ПК. Это также не означает, что моделирование должно быть циклически точным со встроенным целевым процессором.

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

однако стратегия двойного таргетинга требует определенного способа разработки встроенного программного обеспечения, так что любые целевые аппаратные зависимости обрабатываются через четко определенный интерфейс, часто называемый пакетом поддержки платы (BSP). Этот интерфейс имеет по крайней мере две реализации: одна для реальной целью и для ПК, например, под управлением Windows. С таким интерфейсом на месте, основная часть встроенного кода может остаться совершенно не зная, с какой реализацией BSP он связан, и поэтому он может быть быстро разработан на ПК, но также может работать на целевом оборудовании без каких-либо изменений.

в то время как некоторые встроенные программисты могут рассматривать двойной таргетинг как самостоятельное бремя, более опытные разработчики в целом согласны с тем, что обращать внимание на границы между программным и аппаратным обеспечением на самом деле полезно, потому что это приводит к более модульным, более портативным и более поддерживаемого программного обеспечения с гораздо дольше срок службы. Инвестиции в двойной таргетинг также имеют немедленную окупаемость в значительно ускоренном цикле компиляции-запуска-отладки, который намного быстрее и продуктивнее на мощном ПК по сравнению с гораздо более медленным, ограниченным регрессом глубоко встроенным целевым объектом с ограниченной видимостью в работающем коде.

передняя панель Win32 GUI Toolkit

при разработке встроенного кода для устройств с нестандартными пользователей интерфейсы часто сталкиваются с проблемой представления встроенных передних панелей в качестве элементов GUI на ПК. Проблема настолько распространена, что я действительно удивлен, что никто здесь не может рекомендовать существующую библиотеку или проект с открытым исходным кодом, который обеспечил бы простой интерфейс C-only для основных элементов, таких как ЖК-дисплеи, кнопки и светодиоды. Это действительно не так сложно, но кажется, что каждый встроенный разработчик должен снова и снова изобретать это колесо.

Так, чтобы помочь встроенным разработчикам, заинтересованным в прототипировании встроенных устройств в Windows, я создал "Front Panel Win32 GUI Toolkit" и разместил его в интернете под лицензией GPL с открытым исходным кодом (см.http://www.state-machine.com/win32). Этот инструментарий опирается только на raw Win32 API в C и в настоящее время предоставляет следующие элементы:

  1. дисплей точечной матрицы для эффективных, пиксел-адресуемых дисплеев как графические ЖК-дисплеи, OLEDs, etc. с 24-битный цвет

  2. дисплей этапа для поделенного на сегменты дисплея как ЖК-дисплеи этапа, и Сид этапа с родовыми, изготовленными на заказ bitmaps для этапов.

  3. собственник-нарисованные кнопки с пользовательскими" нажатой "и" освобождены " растровые изображения и способны генерировать отдельные события при нажатии и при освобождении.

инструментарий поставляется с примером и примечанием к приложению (см. http://www.state-machine.com/win32/AN_Win32-GUI.pdf), показывая, как обрабатывать ввод от нарисованных владельцем кнопок, обычных кнопок, клавиатуры и мыши. Также вы можете посмотреть демо-ролик по http://www.state-machine.com/win32/front_panel.html.

Что касается размера и сложности "Front Panel Win32 GUI Toolkit", реализация вышеупомянутых элементов GUI занимает всего около 250 строк C. пример со всеми источниками ввода и много комментариев составляет около 300 строк C. инструментарий был протестирован с бесплатным Visual C++ Express 2010 (с SDK платформы Express Edition) и бесплатным редактором ресурсов ResEdit.

наслаждайтесь!


устройства, которые вы упоминаете в своем комментарии к вопросу, никогда не будут использовать ПК с windows, поэтому низкоуровневое программирование windows не является требованием в этом случае. На самом деле, я бы сказал, что это нежелательно. Прототипирование - это скорость. Речь идет о том, как быстро вы можете собрать что-то вместе, чтобы показать потенциальным инвесторам или высшему руководству или другому лицу, принимающему решения.

вы не хотели бы тратить дополнительное время с низким уровнем C и Win32 api до требований проекта были смыты достаточно, чтобы вы знали, что это абсолютное требование для конечных результатов проекта (возможно, инструмент мониторинга сервера / ПК?). До тех пор вы хотите скорость развития. К счастью для вас, в отрасли есть инструменты для быстрого прототипирования и разработки оборудования, как вы описываете.

мое предпочтение прототипирования со встроенной разработкой

Что касается моего мнения как разработчика, мне нравится .net microframework (.netmf) просто потому, что я уже разработчик Microsoft .Net и может передать много моих существующих навыков. Для этого я прототип с микроконтроллером FEZ с использованием C# в Visual C# Express 2010 (бесплатно, как требуется). Его быстро, легко, и вы работаете над ядром своего проекта в считанные минуты.

Если ваш опыт в качестве разработчика отличается, Вы можете искать микроконтроллер, который запрограммирован с использованием BASIC, Java или другого языка, чтобы помочь со скоростью разработки, повторно используя свой основной навык набор.

решение вашего вопроса Bounty комментарии

удивительно большие части врезанного программного обеспечения можно начать на настольном компьютере, в отличие от глубоко внедренные цели. Этот предотвращение "узкого места целевой системы" потенциально может улучшить производительность на порядок выше, если все сделано правильно. Однако разработка встроенного программного обеспечения на рабочем столе, необходимо имитировать пользовательский интерфейс компоненты, такие как дисплеи (сегментированные и в большей степени графический), Сид, ручки, и кнопки. Я ищу такой UI компоненты, написанные в простом Win32 API в C для легкой интеграции с встроенный код для разработки и тестирования на рабочем столе Windows.

Я сделал встроенную разработку полный рабочий день профессионально в течение более 4 лет, а также многие годы, окружающие эту часть времени. Хотя то, что вы сказали выше, несколько верно, это не сэкономит вам время или деньги, поэтому все путают мотивация для этой стратегии. Мы потратили годы, пытаясь выпустить эмулятор windows для аппаратных устройств этой компании, который теоретически сэкономит время для прототипирования. Это всегда было больно, и мы потратили гораздо больше часов работы, пытаясь имитировать опыт, чем если бы мы просто пошли прямо от эскизных спецификаций рисования пользовательского интерфейса к реальной разработке. Эмулятор отставал от разработки оборудования и часто не поддерживал последние функции до 6 месяцев или более после выпуска оборудования. Он было много дополнительной работы за очень низкую стоимость.

вы потратите больше времени на разработку многоразового кода платформы win32 и компонентов аппаратной эмуляции, чем на написание кода для самого основного проекта. Это имеет смысл только для поставщиков оборудования, которые предоставляют этот эмулятор как инструмент "добавления ценности" потенциальным сторонним разработчикам, но это не имеет смысла для прототипирования новых конструкций оборудования.

современные среды разработки, такие как Visual C# Express 2010 с микроконтроллером FEZ может компилироваться, выводить проект на микроконтроллер, а затем начинать отладку так же быстро или быстрее чем вы могли бы скомпилировать и запустить низкоуровневое приложение windows В C эмуляции ЖК-дисплеев или светодиодов или коммутаторов и т. д... Таким образом, ваш комментарий "повысить производительность на порядок" просто больше не соответствует современным инструментам. (Возможно, это было до последних 10 лет или около того.)

Если вы действительно просто хотите моделировать встроенное оборудование визуально на ПК использует что-то вроде adobe flash для макета пользовательского интерфейса. Но не дублируйте код, кодируя для windows, когда окончательное устройство, которое вы прототипируете, не будет работать под управлением windows (возможно, это будет, но вы этого не говорили). Используйте самые быстрые и надежные инструменты прототипирования, доступные сегодня, а именно однозначно не низкий уровень C и win32 api!

может быть, использовать StackExchange для электроники?

потому что это сайт, ориентированный на разработку, обсуждение достоинств конкретного встроенного оборудования на самом деле не актуально. Если вы решили переориентироваться на использование микроконтроллерной электроники для прототипирования (Arduino, Фес, винт, Основную Штамп, Пололу и т. д.) Вы можете попросить совета по оборудованию электроники на stackexchange для электроники. Я скажу, что большинство из этих платформ предназначены для облегчения прототипирования ЖК-дисплеев, светодиодов, кнопки и интерфейсы, как вы описали. Обычно вы можете собрать несколько готовых модулей за считанные минуты и быть готовым начать кодирование вашего проекта. Огромная экономия времени может быть здесь.


вы просите слишком много, вам нужно взглянуть @ proteus. http://www.labcenter.com/products/vsm_overview.cfm


Как сказал Махмуд, вы можете найти свое решение кода с примером прототипирования в proteus professional. Это одна из популярных программ для прототипирования, моделирования и кодирования, вы можете скачать proteus professional бесплатно и проверьте их руководство.

удачи