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

StackOverflow https://stackoverflow.com//questions/11702040

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Обратите внимание, что двойное нацеливание не означает, что встроенное устройство имеет что-либо делать с ПК. Ни это означает, что симуляция должна быть циклически точным с встроенным целевым процессором CPU.

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

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

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

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

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

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

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

  2. Отображение сегмента для сегментированного дисплея, такого как сегмент LCDS и сегментные светодиоды с обшими, пользовательские растровые изображения для сегментов.

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

  4. Toolkit поставляется с примером и приложением приложения (см. http://www.state-machine .com / win32 / an_win32-gui.pdf ), показывающий, как обрабатывать вход с помощью кнопок, нарисованных от владельцев, обычных кнопок, клавиатуры и мыши. Вы также можете просмотреть анимированную демонстрацию на http://www.state-machine.com/win32/front_panel.html < / a>.

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

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

Другие советы

Приборы, которые вы упоминаете, в вашем комментарии Разъяснение к вопросу никогда не будет использовать PC Windows, поэтому программирование Windows низкого уровня не является требованием в этом случае. На самом деле, я бы сказал, что это нежелательно. Прототипирование о скорости. Это о том, насколько быстро вы можете поставить что-то вместе, чтобы показать потенциальных инвесторов или высшего руководства или другого производителя решения.

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

Мое предпочтение для прототипирования со встроенным развитием

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

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

Обращаясь к вашему вопросу Ударные комментарии

Удивительно большие порции встроенного программного обеспечения могут быть разработаны На настольном компьютере в отличие от глубоко встроенной цели. Этот избегание «узкого места целевой системы» может потенциально улучшить Производительность по порядку величины, если сделано правильно. Однако Разработайте встроенное программное обеспечение на рабочем столе, нужно имитировать пользовательский интерфейс Компоненты, такие как дисплеи (оба сегментированы, так и все более Графические), светодиоды, ручки и кнопки. Я ищу такой интерфейс Компоненты, написанные на простых API Win32 в C для легкой интеграции с Встроенный код будет разработан и протестирован на рабочем столе.

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

Вы будете тратить больше своего времени, разрабатывающие нерезимоваривающую неразмерную платформу Win32 и компоненты эмуляции оборудования, чем фактически написание кода для самого основного проекта. Это только когда-либо имеет смысл для поставщиков оборудования, которые предоставляют этот эмулятор в качестве инструмента «Value Add», чтобы потенциальные разработчики 3-го вечеринки, но это не имеет смысла для прототипов новых конструкций оборудования.

Современные среды развития, такие как Visual C # Express 2010 с микроконтроллером FEZ, могут компилировать, толкайте вывод проекта в микроконтроллер, а затем начните отладку так же быстро или быстрее , чем вы можете компилировать и запустить низкий Уровень Windows App в EM Emagulation LCD или светодиодами или коммутаторы и т. Д. ... Так ваш комментарий, «Улучшить производительность по порядку величины», просто больше не верно с современными инструментами. (Это, возможно, было до последних 10 лет или около того.)

Если вы действительно, действительно просто хотите стимулировать встроенное оборудование визуально на ПК, используйте что-то вроде Adobe Flash, чтобы поднять UI. Но не дублируйте код, кодируя для Windows, когда окончательное устройство, которое вы прототипируете, не будут работать Windows (может быть, это будет, но вы этого не говорили). Используйте самые быстрые наиболее надежные инструменты прототипирования, доступные сегодня, что является однозначно не низкоуровневой C и Win32 API!

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

Поскольку это ориентированный на разработку сайт, обсуждение о достоинствах определенного встроенного оборудования не актуальна. Если вы решите перепрос с использованием микроконтроллеров электроники для прототипирования ( arduino , Fez , Пропеллер , Базовый штамп , Pololu и т. Д.) Вы можете задать консультацию оборудования электроники на

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top