Pregunta

Estoy buscando herramientas y técnicas para la creación de prototipos (prototipos virtuales), simulación y pruebas de profundamente incrustado el código C en el escritorio de Windows, incluyendo la construcción realista incrustado paneles frontales que consta de botones, LEDs, LCD y pantallas (tanto segmentado y gráfico).

Estoy especialmente interesado en una posible bajo nivel de enfoque, el uso de código C puro y crudo API de Win32 lugar de MFC, .NET/C#, vxWidgets o Qt.También me gustaría usar gratis las herramientas de desarrollo, tales como Visual C++ Express con el SDK de la Plataforma y ResEdit para la edición de recursos.

Estoy buscando ejemplos de código para representar gráfica Lcd (de monocromo a color de 24 bits), con un eficiente a nivel de píxel de la interfaz, multi-segmento de las pantallas Lcd, y dibujado por el propietario de los botones que responden tanto a la "depresión" y "liberado" de los eventos.

¿Fue útil?

Solución

Estoy sorprendido de que mi pregunta original provocado tantos malos entendidos y comentarios adversos.La estrategia de desarrollo profundamente incrustado el código C en una máquina (por ejemplo, un PC) y que se ejecuta en otro (integrado en el microcontrolador) que se llama "doble orientación" y es muy común.Por ejemplo, el desarrollo y las pruebas profundamente incrustado código en el PC es la piedra angular de la reciente libro "Test-Driven Development for Embedded C" por James Grenning.

Evitar el Hardware de Destino cuello de Botella con la Orientación Dual

Por favor, tenga en cuenta que la orientación dual no significa que el dispositivo incrustado tiene nada que ver con el PC.Tampoco significa que la simulación debe ser el ciclo exacto con el objeto incrustado de la CPU de destino.

La orientación Dual significa, simplemente, que desde el primer día, su código embebido (normalmente en C) está diseñado para ejecutarse en al menos dos plataformas:el objetivo final del hardware y su PC.Todo lo que necesitas para esto es dos compiladores de C:uno para el PC y otro para el dispositivo embebido.

Sin embargo, la doble estrategia de focalización requiere una forma específica de diseñar el software incorporado de tal manera que cualquier hardware de destino dependencias son manejados a través de una bien definida la interfaz a menudo llamado el Apoyo de la Junta directiva del Paquete (BSP).Esta interfaz tiene al menos dos implementaciones:uno para el objetivo real y uno para el PC, por ejemplo, la ejecución de Windows.Con dicha interfaz en el lugar, la mayor parte de el código embebido puede permanecer completamente inconsciente de que BSP aplicación está vinculada a y lo que puede ser desarrollado rápidamente en el PC, pero también se puede ejecutar en el hardware de destino sin cambios.

Mientras que algunos incrustados los programadores pueden ver la orientación dual como una auto-infligida carga, el más experimentado de los desarrolladores generalmente están de acuerdo que prestar atención a los límites entre el software y el hardware es realmente beneficioso, ya que los resultados en más modular, más portátil, y más fácil de mantener software con mucho más tiempo de vida útil.La inversión en la orientación dual tiene también una inmediata recuperación de la inversión en la sumamente acelerado de compilación-ejecución de depuración del ciclo, que es mucho más rápido y más productivo en el PC potente en comparación a mucho más lento, recurso-limitados profundamente incrustado de destino con visibilidad limitada en la ejecución de código.

Panel frontal Win32 GUI Toolkit

Cuando en desarrollo de código incrustado para los dispositivos con los no-trivial de interfaces de usuario, a menudo se ejecuta en el problema de la representación, integrado en el frontal de los paneles como los elementos de la GUI en el PC.El problema es tan común, que estoy realmente sorprendido de que nadie podría recomendar una biblioteca existente o un proyecto de código abierto, lo que proporcionaría una simple C-interfaz solamente a los elementos básicos, tales como pantallas Lcd, botones y LEDs.Esto no es realmente complicado, sin embargo, parece que cada incrustado desarrollador tiene que re-inventar la rueda una y otra vez.

Así que, para ayudar a incrustados los desarrolladores interesados en la generación de prototipos de dispositivos integrados en Windows, he creado un "Panel Frontal de Win32 GUI Toolkit" y lo he publicado en internet bajo la licencia GPL licencia de código abierto (ver http://www.state-machine.com/win32).Este conjunto de herramientas se basa sólo en el raw de Win32 API en C y en la actualidad proporciona los siguientes elementos:

  1. Pantalla de matriz de puntos para una eficiente, pixel-direccionable muestra como la gráfica de las pantallas Lcd, Oled, etc.con hasta 24 bits de color

  2. Segmento de la pantalla para la visualización segmentada como el segmento de las pantallas Lcd, y el segmento de LEDs con los medicamentos genéricos, la costumbre de mapas de bits de los segmentos.

  3. Dibujado por el propietario de los botones con la costumbre de "deprimido" y "liberado" mapas de bits y capaz de generar eventos separados cuando deprimido y cuando se libera.

El kit viene con un ejemplo y una Aplicación de la Nota (ver http://www.state-machine.com/win32/AN_Win32-GUI.pdf), que muestra cómo controlar la entrada de la dibujado por el propietario de los botones, regular los botones, el teclado y el ratón.También puede ver una demostración animada en http://www.state-machine.com/win32/front_panel.html.

En cuanto al tamaño y la complejidad de la "Panel Frontal de Win32 GUI Toolkit", la aplicación de los citados elementos de la GUI tiene sólo alrededor de 250 líneas de C.El ejemplo con todas las fuentes de entrada y una gran cantidad de comentarios que asciende a unos 300 líneas de C.El kit de herramientas ha sido probado con la versión gratuita Visual C++ Express 2010 (con la Edición Express de la Plataforma SDK) y la libertad de ResEdit editor de recursos.

¡A disfrutar!

Otros consejos

Los aparatos que menciona en su comentario La aclaración a la pregunta nunca utilizará una PC con Windows, por lo que la programación de Windows de bajo nivel no es un requisito en ese caso. De hecho, diría que es indeseable. La prototipación es de velocidad. Se trata de lo rápido que puede juntar algo para mostrar posibles inversionistas o alta gerencia o algún otro tomador de decisiones.

No querría gastar el tiempo extra con la API de bajo nivel C y Win32 hasta que los requisitos del proyecto se eliminaran lo suficiente como para saber que fue un requisito absoluto para los entregables del proyecto final ( Tal vez un servidor / PC ¿Herramienta de monitoreo? ). Hasta entonces quieres la velocidad de desarrollo. Lucky para usted, la industria tiene herramientas para prototipos rápidos y desarrollo de hardware como usted se describe.

Mi preferencia por prototipos con desarrollo incrustado

En cuanto a mi opinión como desarrollador, me gusta el .NET MICROFRAMEWARK (.NETMF) simplemente porque ya soy un desarrollador de Microsoft .NET y puede transferir muchas de mis habilidades existentes. Estoy prototipo con un microcontrolador de Fez utilizando C # bajo Visual C # Express 2010 (gratis como se requiere). Es rápido, fácil y está trabajando en el núcleo de su proyecto en minutos.

Si su experiencia como desarrollador es diferente, puede buscar un micro controlador que esté programado usando Basic, Java o algún otro idioma para ayudar con la velocidad de desarrollo al reutilizar su conjunto de habilidades básicas.

Direccionando su pregunta Bounty Comments

Se pueden desarrollar porciones asombrosas de software incrustado en la computadora de escritorio en lugar del objetivo profundamente incrustado. Esto evitar el "cuello de botella del sistema objetivo" puede mejorar potencialmente Productividad por un orden de magnitud, si se hace bien. Sin embargo, a Desarrollar software incrustado en el escritorio, uno necesita simular la UI. componentes, como pantallas (tanto segmentados como cada vez más). Gráficos), LEDs, perillas y botones. Estoy buscando tal ui componentes escritos en la API de Win32 simple en C para una fácil integración con Código integrado para ser desarrollado y probado en las ventanas de escritorio.

Hice un desarrollo integrado a tiempo completo profesionalmente durante más de 4 años, así como muchos años que rodean ese tiempo parcial. Si bien lo que dijiste anteriormente es algo cierto, no le ahorrará tiempo ni dinero, por lo que todos se confunden con la motivación de esta estrategia. Pasamos años tratando de sacar un emulador de Windows para los dispositivos de hardware de esta compañía que teóricamente ahorrarían tiempo para prototipar. Siempre fue un dolor y pasamos muchas más horas de trabajo tratando de emular la experiencia que si acabamos de ir directamente desde las especificaciones de dibujo de la UI esbozados hasta el desarrollo real. El emulador se rezagó detrás del desarrollo de hardware y, a menudo, no apoyaría las últimas características hasta los 6 meses o más después de que se liberara el hardware. Fue mucho trabajo extra por muy poco valor.

Gastará más de su tiempo desarrollando componentes de emulación de hardware y código de plataforma WIN32 no reutilizables que en realidad escribir el código para el propio proyecto central. Esto solo tiene sentido para los vendedores de hardware que brindan a este emulador como una herramienta de "valor agregado" a potenciales desarrolladores de terceros, pero no tiene sentido para prototipos de nuevos diseños de hardware.

Los entornos de desarrollo modernos como Visual C # Express 2010 con un microcontrolador de FEZ pueden compilar, presione la salida del proyecto al microcontrolador y luego comience a depurarse tan rápido de o más rápido de lo que podría compilar y ejecutar un bajo Aplicación de nivel de Windows en C LCDS o LED o interruptores, etc., por lo que su comentario ", mejore la productividad por un orden de magnitud", simplemente ya no es cierto con las herramientas modernas. (Puede haber sido antes de los últimos 10 años más o menos.)

Si realmente, realmente quiere simular el hardware incrustado visualmente en una PC, use algo como Adobe Flash para burlarse de una UI. Pero no duplique el código mediante la codificación de Windows cuando el dispositivo final que está prototipo no ejecutará Windows (tal vez será, pero no dijo eso). Utilice las herramientas de prototipos más rápidas más confiables disponibles en la actualidad, que es inequívocamente no de bajo nivel C y Win32 API!

Tal vez use StackExchange para la electrónica?

Porque este es un sitio orientado al desarrollo, la discusión sobre los méritos del hardware incrustado específico no es realmente relevante. Si decide reenviarse al usar la electrónica de microcontrolador para prototipos ( arduino , fez , propulsor , sello básico , pololu , etc.) Podría solicitar consejos de hardware de electrónica en

> StackExchange para electrónica .Diré que la mayoría de esas plataformas están diseñadas para facilitar el prototipado de LCD, LED, botones e interfaces como lo describió.Por lo general, puede ensamblar algunos módulos pre-construidos en cuestión de minutos y estar listos para comenzar a codificar su proyecto.Enormes ahorros de tiempo se pueden tener aquí.

Usted está pidiendo demasiado que necesita para echar un vistazo a Proteus. http://www.labcenter.com/products/vsm_overview.cfm

Como dijo Mahmoud, puede encontrar su solución de código con el ejemplo prototipado en Proteus Professional .Es uno de software popular para prototipos, simulación y codificación, puede Descargar Proteus Professional de forma gratuita y verifique su manual.

la mejor de las suertes

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top