Escritura de software integrado sin hardware

8

Considere que el equipo de hardware tardará 2 meses en desarrollar un poco de hardware, pero para ese momento necesitaré tener el software listo.

Mi pregunta es ¿cómo puedo escribir el software y probarlo sin tener el hardware?

¿Hay algún estándar / s a seguir? ¿Cómo lo haces?

    
pregunta anishkumar

6 respuestas

33

No se tiene hardware durante las etapas iniciales del desarrollo del firmware. Las estrategias comunes para lidiar con esto son:

  1. Dedica tiempo al diseño del sistema antes de escribir cualquier código. Por supuesto, debes hacer esto de todos modos, pero en este caso es incluso más importante de lo habitual. Es mucho más fácil depurar un software bien pensado que un desastre basado en pasta.

  2. Modular todo correctamente, minimizando las interfaces entre los módulos. Esto ayudará a contener los errores de los módulos individuales y permitirá una prueba más sencilla de los módulos individuales.

  3. Escriba el código de abajo hacia arriba, los controladores que tocan el hardware van primero, la lógica de la aplicación de alto nivel es la última. Esto permite descubrir inconvenientes impuestos por la arquitectura desde el principio. No tenga miedo de cambiar la arquitectura ya que las realidades del hardware salen a la luz, pero asegúrese de que toda la documentación se actualice en consecuencia.

  4. simular. La mayoría de las compañías de microcontroladores proporcionan simuladores de software de sus microcontroladores. Estos solo pueden llegar muy lejos, pero pueden ser muy útiles. Simular las entradas y medir las salidas del hardware puede ser difícil, pero verificar la lógica de nivel superior de esta manera no debería ser demasiado difícil.

    Aquí es donde el diseño modular ayuda de nuevo. Si no puede simular razonablemente algunas interacciones de hardware de bajo nivel, utiliza una versión diferente del módulo que toca ese hardware pero que pasa sus propias acciones simuladas a los niveles superiores. Los niveles superiores no sabrán que esto está sucediendo. No verificará el módulo de bajo nivel de esta manera, pero casi todo lo demás.

En resumen, use buenas prácticas de diseño de software, que por supuesto debería hacer de todos modos.

    
respondido por el Olin Lathrop
13

Sin tener una idea de qué es lo que está desarrollando, o en qué familia de microcontroladores se basará su hardware, la mayoría de las familias de microcontroladores tienen sistemas de desarrollo de bajo costo disponibles que tienen un conjunto de periféricos comunes, que pueden le permite simular al menos parte de su hardware objetivo final.

    
respondido por el Techydude
2

Dependiendo de qué tan dependiente sea el hardware de la aplicación, podría comenzar a implementar el proyecto en una PC estándar (Windows, Linux ...). La mayoría de los accesos periféricos se deben abstraer de todos modos, por lo que no es un gran problema implementar algunas funciones ficticias, que se reemplazarán más adelante. Si no es posible simular algún comportamiento, al menos podría hacer una simulación del sistema (API ...), por lo que la implementación real será mucho más rápida y clara, tan pronto como el hardware esté listo.

Por supuesto, hay muchas cosas que no se pueden simular, como el comportamiento en tiempo real o los controladores de hardware complejos. Por otro lado, un ADC controlado por interrupciones se puede simular fácilmente usando un hilo que lee valores de un archivo o un puerto de red.

Por supuesto, todo esto depende en gran medida de varios factores:

  • ¿Puede usar la misma cadena de herramientas / similar en el controlador y la PC (por ejemplo, gcc)?
  • ¿Cómo depende el hardware del sistema?
  • ¿Cuánta experiencia tiene con la programación de PC?

Yo, por un lado, estoy diseñando casi todos los módulos de firmware en una PC primero.

    
respondido por el erebos
1

Intenta conseguir un simulador para tu chip. Debe simular todas las entradas esperadas y algunas inesperadas también. Modularice / abstraiga todo lo que pueda y escriba pruebas unitarias. Si puede, esas pruebas pueden convertirse en parte de su código real y se convierten en una función (autoprueba de placa).

Si no puede obtener un simulador, abstraiga todo lo que pueda a través de una HAL (capa de abstracción de hardware). Todos los conductores se ponen detrás. Intente abstraer todo el conjunto específico de la plataforma detrás de una llamada a la función C y piense en ellos como controladores también. Escriba el resto como código C / C ++ portátil y haga una HAL delgada para x86 y ejecútela en su máquina con todos los casos de prueba.

De esa manera, cuando obtenga el hardware, solo tendrá que depurar la HAL. Cuanto más delgado sea, más rápido lo depurará y hará que todo funcione. Recuerda que si utilizas un ensamblaje específico de la plataforma para operaciones más rápidas, QUIERES MUCHO para obtener pruebas de bits exactos .

    
respondido por el Ronan Paixão
1

Tu pregunta es un poco amplia. Hardware (HW) puede significar desarrollo ASIC / FPGA personalizado completo, DSP programados por el ensamblador, o "solo" un sistema embebido típico basado en microprocesadores / microcontroladores / SoC estándar (etc.) (por supuesto, un SoC también puede contener un DSP que es posible que desee programar ....). Para grandes cantidades de venta, no es raro que sea un ASIC.

Pero para un proyecto de 2 meses espero que se base en algún microcontrolador:

En cualquier caso, debe insistir en que el equipo de hardware le dé un prototipo para que pueda comenzar a probar su código antes de la fecha límite absoluta. Esto podría consistir en una placa de desarrollo genérica, como ya han mencionado algunas personas, pero en mi opinión Es su trabajo proporcionarle el correcto, y posiblemente también algunos periféricos requeridos / similares para la prueba.

Los simuladores también son posibles hasta cierto punto, pero es posible que aún debas caracterizar algunos sensores / datos del mundo real que puedas obtener. Aquí, el equipo de hardware también necesita al menos ayudarlo.

Además de eso, el diseño del software ya se puede hacer y todos los módulos de alto nivel pueden implementarse (y deberían ser) implementados y probados sin el hardware real. Idealmente, también definirá una API junto con el equipo de hardware, y le proporcionarán las funciones de nivel más bajo, por lo que cualquier cambio que hagan en el lado del hardware allí (por ejemplo, simplemente redefinir qué pines de puerto usan), no siempre será Sé crítico para ti.

En todos los casos, la comunicación es clave.

    
respondido por el bluesceada
0

Sí, puede desarrollar su código para su tablero de destino antes de que se fabriquen.

¿Cómo?

Primero tienes que saber el objetivo principal de ese sistema. De este modo, puede elegir el controlador adecuadamente de una amplia fuente de disponibilidad como digikey, mouser.

Y elige simulador como Proteus. Esto simulará el procesador / controlador exacto ahora que puede comenzar su codificación. Pero no puedes esperar la precisión como en el hardware.

    
respondido por el Photon001

Lea otras preguntas en las etiquetas