- 1. Desarrollo de requisitos de producto
- 2. Diseño de sistemas y desarrollo de algoritmos
- 3. Codificación para firmware integrado
- Prueba de firmware integrado
El desarrollo de software es generalmente difícil, pero para un sistema integrado, se encuentra en un nivel de dificultad completamente nuevo. Los desarrolladores de firmware deben tener un buen conocimiento sobre el desarrollo de hardware y comprender el funcionamiento interno de un procesador integrado. Para el artículo de hoy, compartiré herramientas y consejos que podrían usarse para lograr un alto nivel de eficiencia y eliminar algunas de las cosas que hacen que el desarrollo de firmware sea tedioso.
El desarrollo de software integrado pasa por un proceso de desarrollo similar al del desarrollo de software "ordinario". Independientemente del modelo de desarrollo / gestión adoptado, el desarrollo de software integrado generalmente implica los siguientes pasos:
- Desarrollo de requisitos de producto
- Diseño de sistemas y desarrollo de algoritmos
- Codificación
- Pruebas
Examinaremos algunas de las dificultades que surgen con estas etapas y algunas de las herramientas que podrían aumentar la eficiencia y la productividad.
1. Desarrollo de requisitos de producto
Las especificaciones del producto a menudo se hacen teniendo en cuenta a los diseñadores de la placa. Por lo general, contiene poca información que podría ayudar al desarrollo de firmware, por lo tanto, el desarrollador de software integrado termina con un documento defectuoso de 250 páginas (promedio) que no se puede usar como referencia y, si no se considera cuidadosamente, podría conducir fácilmente a descuidos en el diseño que, a su vez,, llevar a que el plazo del proyecto se extienda si no al fracaso general del proyecto. Los documentos rara vez contienen información sobre registros o sus campos de bits.entre otras cosas, y esto cuesta a los desarrolladores de firmware varias horas de trabajo mientras buscan en el documento para identificar cosas como qué registro pertenece a qué grupo y qué campo de bits pertenece a qué registro. A continuación se presentan algunos consejos que podrían considerarse para asegurar el desarrollo de documentos de especificación de proyecto más útiles.
Uso de descripciones de registros
Como se mencionó anteriormente, los desarrolladores de firmware deben comprender las complejidades de todos los registros, memorias, etc. de todos los elementos de control (CPU, MCU, etc.) en un proyecto para poder controlar eficazmente todas las partes del sistema. Para poner esto en práctica, los desarrolladores de firmware pueden asegurarse de que el documento de especificación incluya una descripción adecuada de los registros junto con los mapas de memoria. A todos los registros en el elemento de control se les podría asignar un nombre distintivo que los haga fáciles de identificar en todo el documento y todos podrían estar vinculados de manera que conduzcan a una lista dentro del documento que indique el nombre, la ubicación, el bloque y la dirección de cada registro.
Descripciones de tareas
Otra forma mediante la cual los documentos de especificación pueden resultar útiles para los desarrolladores de software integrado es describiendo lo que se supone que debe hacer cada bloque y cómo debe hacerlo. También en esta etapa, debería haber planes para el manejo de errores en cada bloque. Básicamente, esto se parece a lo que dice el desarrollador de firmware; “Cuando llegue aquí, debo hacer esto, esto y esto, asegurándome de que esto, esto y aquello, no ocurra”. Esto ayuda a guiar el trabajo del desarrollador y ayuda a evaluar el proyecto incluso antes de que comience el diseño para identificar posibles errores y errores, lo que ahorra un tiempo y dinero valiosos.
Hay otros factores que incluyen la estructura del documento, el uso de fuentes fáciles de leer (algo con lo que los desarrolladores pueden trabajar incluso cuando están fatigados), gráficos e imágenes cuando sea posible, que podrían aumentar la eficiencia del equipo de firmware después de esta etapa.
2. Diseño de sistemas y desarrollo de algoritmos
Esta etapa involucra el desarrollo de los pseudocódigos, diagramas de flujo, máquinas de estado y todo lo relacionado con el diseño de lo que es el firmware. Para esta etapa, se pueden usar varias herramientas para ayudar a organizar pensamientos, explorar software heredado / escrito previamente en torno al proyecto y desarrollar su propio diagrama de flujo, máquina de estados, etc. Algunas de estas herramientas se describen a continuación.
PIM
En esta etapa del desarrollo del producto, los desarrolladores tienden a garabatear mucho a medida que recopilan recursos en el proyecto, desde enlaces web hasta fórmulas, etc. Una de las mejores formas de realizar un seguimiento de esta información para que sea útil más adelante es mediante el uso de PIM. (gestión de información de productos) herramientas. Hay bastantes PIM, pero mencionaré algunos con algunas características sobresalientes.
1. Evernote
Evernote te ayuda a tomar notas que están disponibles en cualquier plataforma para que puedas verificar la nota que hiciste en tu PC mientras estás en el autobús a casa. Las notas están bien organizadas y se pueden buscar por completo, por lo que siempre encontrará lo que necesita.
2. TrunkNote
Trunk note es una aplicación para tomar notas similar a una Wiki. Aporta todo el poder organizativo de los wikis a la toma de notas. Es una aplicación basada en teléfonos móviles, pero se puede sincronizar fácilmente con una PC a través de WIFI.
Otros tipos de PIM como Tiddlywiki, etc. Cada uno de ellos viene con características que pueden hacerlo más atractivo para individuos específicos y pueden tomar algunas muestras antes de que finalmente se decida por uno.
Comprensión del código heredado
Otro grupo de herramientas que resultan muy útiles durante la etapa de diseño son las herramientas para comprender códigos heredados. En situaciones en las que el producto que se está diseñando es una versión mejorada de un producto anterior, el desarrollador puede encontrar útil revisar el trabajo que ya se ha realizado para obtener algunas ideas y tal vez fragmentos de código para este nuevo proyecto. Este puede ser un camino bastante largo, especialmente si no fue parte del equipo que construyó el software anterior. Existe una gran cantidad de software que ayuda a construir árboles, crear documentación y diagramas de flujo a partir del código ya escrito.
1. Doxygen
Doxygen es una herramienta bastante poderosa que ayuda a crear documentación a partir de códigos fuente. Fue diseñado principalmente para trabajar con C ++ pero también funciona con C, Python y algunos otros lenguajes. Tiene la capacidad de extraer la estructura del código de cualquier código, proporcionando gráficos de dependencia generados automáticamente y diagramas de herencia para ayudar a visualizar el código.
2. Graphviz
Según su sitio web, graphviz ayuda a presentar información estructural como diagramas de gráficos abstractos y redes. Se puede utilizar junto con Doxygen para comprender mejor los gráficos que produce.
3. Srecord
Srecord es una poderosa herramienta para manipular imágenes de firmware y convertir entre diferentes formatos de archivo. Se puede utilizar para calcular y hacer CRC y sumas de comprobación en bloques de bytes, corregir archivos de error creados debido a cadenas de herramientas con errores y filtrar o mover secciones de archivos, entre otras cosas. Puede encontrar más información sobre su uso en su página de SourceForge.
Algunas otras herramientas que se incluyen en esta categoría son CrystalRev y Hexplorer, entre otras.
Desarrollando algoritmos
Toda la investigación y la toma de notas se agregan al desarrollo de algoritmos que derivan en pseudocódigos y diagramas de flujo para el proyecto. Existen varias herramientas para desarrollar diagramas de flujo y, si bien la mayoría de ellas no son exclusivas del desarrollo de firmware, brindan características útiles e importantes que simplemente hacen el trabajo y también ayudan a mantener los gráficos durante todo el ciclo de desarrollo del producto. A continuación se muestran algunas de las mejores herramientas disponibles para crear diagramas de flujo.
1. QFSM
QFSM es una herramienta gráfica para diseñar y simular máquinas de estados finitos. Su capacidad para simular los diseños lo hace mucho mejor que la mayoría del otro software de este grupo. Es particularmente útil cuando está diseñando máquinas de estado para FPGA y hardware de destino similar.
2. Gráfico lúcido
Lucid Chart es posiblemente el mejor y más flexible software de diagrama de flujo que existe. Está basado en la web y tiene funciones de equipo que le permiten trabajar entre múltiples dispositivos y colaborar en tiempo real con sus compañeros de equipo.
3. Microsoft Visio
Visio es una de las mejores herramientas gráficas actualmente. Tiene una variedad de objetos de diferentes campos que facilita la descripción de cualquier cosa. Sin embargo, no incluye funciones que mejoren la colaboración entre equipos y solo se puede utilizar en una máquina con Windows en la que esté instalado.
4. Presentaciones de Google
Una de las cosas clave en el desarrollo de productos en el mundo actual es el uso de herramientas que permiten a los equipos colaborar de manera efectiva desde donde se encuentren y eso es algo que Google Slides trae a bordo. Se puede utilizar para desarrollar todo tipo de gráficos, desde diagramas de flujo de software hasta organigramas y mapas mentales. Está basado en la nube y funciona en casi todos los navegadores populares.
Existen varias otras herramientas para la creación de diagramas de flujo y el desarrollo de algoritmos generales, como es habitual, cada una con sus pros y sus contras.
3. Codificación para firmware integrado
Todo lo que se ha mencionado hasta este punto conduce aquí. En el mundo de los SDK e IDE, la elección de las herramientas en esta etapa depende del dispositivo de destino y las funciones que se integrarán en el dispositivo, por esta razón, excluiré los SDK e IDE populares como MPLAB, etc. de la discusión y simplemente me quedaré a herramientas que son de naturaleza más complementaria.
1. QT (desarrollo de GUI)
Las pantallas (interactivas o no) son los medios más populares para proporcionar comentarios a los usuarios en estos días y el SDK de QT es uno de los mejores que existen y probablemente no sea ajeno a nadie dentro del círculo integrado. Proporciona funciones de "arrastrar y soltar" que facilitan el desarrollo de aplicaciones complejas basadas en GUI para dispositivos integrados, independientemente de la plataforma de destino o del lenguaje de programación que se utilice para el desarrollo general del proyecto. Básicamente, elimina el estrés asociado con el uso de código para crear interfaces de usuario.
2. (Creación rápida de prototipos)
Uno de los mayores cuellos de botella en el desarrollo de software integrado es el hecho de que el hardware no suele estar disponible para probar cosas sobre la marcha mientras se desarrolla el software. A menudo, cuando está disponible, los desarrolladores de firmware deben esperar todo el tiempo que tarda el hardware en estar listo para hacer poco o nada. Esto aumenta el tiempo de espera y no crea espacio para el tipo de sincronización entre los ingenieros de hardware y los desarrolladores de firmware que habría aumentado la calidad del producto. Para ayudar a resolver este problema, los chicos de VaST crearon una plataforma de prototipos virtuales a nivel de sistemas electrónicos que podría usarse para crear un prototipo de hardware virtual. sobre qué software integrado se puede ejecutar para determinar el rendimiento de los sistemas antes de que el hardware esté listo.
3. Doxygen (documentación)
Una de las partes más importantes de la escritura de cualquier código es la documentación y una de las herramientas más populares para ello es Doxygen. Además de su uso para comprender el software heredado, Doxygen tiene la capacidad de extraer automáticamente comentarios de un código y crear documentación que lo incluya. Las estructuras de Doxygen incluyen archivos gráficamente y crean referencias para cada función, variable y macro utilizada en su código. Los diagramas de flujo y los diagramas de flujo de datos también se pueden incorporar en la documentación combinando Doxygen con graphviz.
4. GIT (sistemas de control de versiones)
Es difícil creer que alguien desarrolle software de cualquier tipo sin algún tipo de sistema de control de versiones en estos días, pero en caso de que lo haga, es una idea bastante mala que podría llevar a errores que le costarán tiempo y dinero. Git se destaca entre todas las herramientas de control de versiones que existen por varias razones. Es de código abierto, rápido, eficiente y principalmente local. Aparte de Git, también vale la pena mencionar herramientas como la subversión.
Prueba de firmware integrado
Las pruebas son una parte importante del proceso de desarrollo para cualquier cosa. Las empresas pierden miles de dólares cuando los dispositivos se retiran del mercado debido a errores de firmware, por lo que es una parte del desarrollo que debe tomarse muy en serio. A menudo se hace, de la mano, con la codificación y el primer conjunto de herramientas para la prueba de código, son probablemente los depuradores dentro del IDE o SDK que se utilizan para el proyecto. Las pruebas vienen en diferentes formas y se realizan en diferentes etapas, como tal, involucran diversos tipos de herramientas. Las herramientas de prueba desde el desarrollo de firmware van desde la validación del diseño hasta el análisis estático y las herramientas de prueba en tiempo de ejecución. A continuación se muestran algunas herramientas que encuentro realmente útiles.
1. Crystal REV
Crystal revs es una herramienta para estudiar código. Se puede usar para generar un diagrama de flujo a partir de código C / C ++, lo que lo convierte en una gran herramienta para revisar su propio código y ver si el diseño preliminar es lo que se implementó. Con crystal rev, podrá ver rápidamente la diferencia entre el diseño y la implementación. Su capacidad para generar diagramas de flujo, datos y flujo de llamadas a partir de códigos también lo convierte en una herramienta útil para analizar código heredado.
2. PC- Pelusa
PC-lint es una de las herramientas de prueba de firmware más antiguas que existen. Es capaz de analizar software para identificar errores, vulnerabilidades de seguridad y garantizar que el código se haya escrito de acuerdo con los estándares de la industria. Herramientas similares incluyen polyspace y LRDA, Eggplant y Tessy, entre otras.
3. Wireshark
Esto resulta útil al crear dispositivos de red. Es esencialmente un rastreador de paquetes y podría ayudar a ver los datos que está transmitiendo su dispositivo. Esto podría ayudar a asegurar el dispositivo.
4. Controlador de puerto serie virtual
El software VSPD by eltima es una herramienta que me presentó recientemente un amigo. Resulta muy útil cuando se trabaja con controladores de dispositivos y otros desarrollos relacionados con puertos de comunicación. El puerto de comunicaciones serie virtual le brinda la capacidad de probar el comportamiento de los puertos de comunicaciones sin el dispositivo de destino. Puede crear un número ilimitado de puertos que sea capaz de emular todas las configuraciones de puertos de comunicaciones reales. El software también viene con características como división de puertos serie, fusión de puertos COM, uso de conexiones de puertos COM entre otras características interesantes.
Eso es todo por este artículo, gracias por tomarse un tiempo para leer. Si bien es imposible enumerar todas las herramientas que existen, espero que algunas de estas herramientas le resulten útiles.