Considere que el equipo de hardware tardará 2 meses en desarrollar algo de hardware, pero para ese tiempo 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?
No tener hardware durante las etapas iniciales del desarrollo del firmware sucede. Las estrategias comunes para lidiar con esto son:
Aquí es donde el diseño modular ayuda nuevamente. Si no puede simular razonablemente algunas interacciones de hardware de bajo nivel, use 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 comprobará el módulo de bajo nivel de esta manera, sino casi todo lo demás.
En resumen, use buenas prácticas de diseño de software, que por supuesto debería estar haciendo de todos modos.
Sin ninguna 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 en ellos, lo que puede permitirle simule al menos parte de su eventual hardware de destino.
Dependiendo de cuán dependiente del hardware vaya a ser la aplicación, puede comenzar a implementar el proyecto en una PC estándar (Windows, Linux...). La mayoría de los accesos periféricos deben abstraerse de todos modos, por lo que no es gran cosa 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 maqueta 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 controladores de hardware complejos. Por otro lado, un ADC controlado por interrupciones se puede simular fácilmente usando un subproceso que lee valores de un archivo o un puerto de red.
Por supuesto, todo esto depende en gran medida de varios factores:
Yo, por mi parte, estoy diseñando casi todos los módulos de firmware en una PC primero.
Trate de obtener un simulador para su chip. Debe simular todas las entradas esperadas y también algunas inesperadas. Modularice/abstraiga tanto como pueda y escriba pruebas unitarias. Si puede, esas pruebas pueden convertirse en parte de su código real y convertirse en una función (autoprueba de la 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 lo respaldan. Intente abstraer todo el ensamblaje específico de la plataforma detrás de alguna llamada de función C y piense en ellos también como controladores. Escriba el resto como código portátil C/C++ y cree un HAL delgado para x86 y ejecútelo en su máquina con todos los casos de prueba.
De esa manera, cuando obtenga el hardware, solo tendrá que depurar el HAL. Cuanto más delgado sea, más rápido lo depurará y todo funcionará. Recuerde que si utiliza el ensamblaje específico de la plataforma para operaciones más rápidas, DESEA MUCHO obtener pruebas con precisión de bits .
a == b
comparaciones con flotantes, pero todavía las usan sin pensar con números de punto fijo.Tu pregunta es un poco amplia. El hardware (HW) podría significar desarrollo ASIC/FPGA totalmente personalizado, DSP programados por ensamblador o "solo" un sistema integrado típico basado en microprocesadores/microcontroladores/SoC, etc. disponibles en el mercado (por supuesto, un SoC también puede contener un DSP que tal vez quieras programar...). Para grandes cantidades de venta, convertirlo en un ASIC no es raro.
Pero para un proyecto de 2 meses, espero que se base en algún microcontrolador:
En cualquier caso, debe enfatizar al equipo de hardware para que le proporcione un prototipo, puede 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 algunas personas ya han mencionado, pero en mi opinión es su trabajo para proporcionarle el adecuado y, potencialmente, también algunos periféricos requeridos/similares para la prueba.
Los simuladores también son posibles hasta cierto punto, pero es posible que deba caracterizar algunos sensores/datos del mundo real que pueda obtener. Aquí el equipo de hardware también necesita al menos ayudarlo.
Aparte de eso, el diseño del software ya se puede hacer y todos los módulos de alto nivel se pueden (y deberían) implementar y probar 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á ser crítico contigo.
En todos los casos, la comunicación es clave.
Sí, puede desarrollar su código para su tablero de destino antes de que se fabriquen.
Cómo ?
Primero hay que saber cuál es el objetivo principal de ese sistema. Entonces, a partir de esto, puede elegir el controlador de manera adecuada de una amplia fuente de disponibilidad como digikey, mouser.
Y elige un simulador como Proteus. Esto simulará el procesador/controlador exacto ahora que puede comenzar su codificación. Pero no puede esperar la precisión como en el hardware.
Mástil
brahans
isanae
exit()
porque intentaba mmmap direcciones codificadas en /dev/mem.Lame caliente