Prefacio

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Me encantan los sistemas embebidos. La primera vez que un motor giró porque yo se lo ordené, me enganché. Rápidamente me alejé del software puro y me adentré en un campo en el que puedo tocar el mundo. Justo cuando dejaba el software, se hizo el trabajo seminal sobre patrones de diseño.1 Mi equipo repasó el libro, discutiendo los patrones y dónde consideraríamos utilizarlos.

A medida que me adentraba más en los sistemas embebidos, me encontré con compiladores que no podían manejar la herencia C++, procesadores con cantidades absurdamente pequeñas de memoria en los que implementar los patrones, y todo un nuevo conjunto de problemas en los que los patrones de diseño no parecían aplicables. Pero nunca olvidé la idea de que existen patrones en nuestra forma de hacer ingeniería. Aprendiendo a reconocer los patrones, podemos utilizar las soluciones robustas una y otra vez. Gran parte de este libro examina los patrones estándar y ofrece algunos nuevos para el desarrollo de sistemas embebidos. También he completado varios capítulos con otra información útil que no se encuentra en la mayoría de los libros.

Acerca de este libro

Después de ver sistemas embebidos en dispositivos médicos, coches de carreras, aviones y juguetes infantiles, he encontrado muchos puntos en común. Hay cosas que me gustaría haber sabido entonces sobre cómo diseñar e implementar software para un sistema embebido. Este libro contiene parte de lo que he aprendido. Es un libro sobre el éxito del diseño de software en entornos con recursos limitados.

También es un libro para entender lo que buscan los entrevistadores cuando solicitas un empleo en sistemas empotrados. Cada sección termina con una pregunta para la entrevista. Por lo general, no son específicas del lenguaje, sino que intentan deducir cómo piensas. Las preguntas de entrevista más útiles no tienen una única respuesta correcta. En lugar de intentar documentar todos los caminos, las notas que aparecen después de cada pregunta proporcionan pistas sobre lo que un entrevistador podría buscar en tu respuesta. Tendrás que conseguir el trabajo (y las respuestas) por tus propios méritos.

Una nota, sin embargo: mis sistemas embebidos no tienen sistemas operativos (SO). El software se ejecuta sobre el metal desnudo. Cuando el software dice "enciende esa luz", se lo dice al procesador sin intermediarios. Este no es un libro sobre cómo trabajar con un SO integrado. Pero los conceptos se trasladan a los procesadores que ejecutan SO, así que si te quedas, puede que también aprendas sobre los entresijos de los SO. Trabajar sin uno te ayuda a apreciar realmente lo que hace un SO.

Este libro describe los arquetipos y principios que se utilizan habitualmente en la creación de software de sistemas embebidos. No cubro ninguna plataforma, procesador, compilador o lenguaje en particular, porque si obtienes una buena base de este libro, los detalles específicos pueden venir después.

A quién va dirigido este libro

Escribí esto para algunas personas con las que trabajé en el pasado.

Sarah era una ingeniera de software junior que se unió a mi equipo de sistemas integrados. Era brillante y estaba interesada, pero no sabía manejar el hardware.

Josh era un ingeniero electromecánico experimentado que necesitaba escribir software. Podía escribir algo de código, pero se atascaba en el diseño del sistema, la depuración de problemas de memoria y la reutilización del código.

Normalmente, en la escuela sólo aprendemos software o hardware; no aprendemos a hacer que funcionen juntos. Mi objetivo es aprovechar los conocimientos que tienes para llenar las lagunas.

Sobre el autor

En el campo de los sistemas embebidos, he trabajado en escáneres de ADN, unidades de medición inercial para aviones y coches de carreras, juguetes para niños en edad preescolar, un sistema de localización de disparos para atrapar delincuentes y diversos dispositivos médicos, científicos y de consumo.

Me he especializado en procesamiento de señales, integración de hardware, diseño de sistemas complejos y rendimiento. Tras haber pasado por los procesos de certificación de la FAA y la FDA, comprendo la importancia de producir diseños de alta calidad y cómo conducen a implementaciones de alta calidad.

He pasado varios años en puestos directivos, pero me gusta la ingeniería práctica y la emoción de ofrecer productos excelentes. Me alegra decir que dejar la dirección no ha disminuido mis oportunidades de ofrecer liderazgo y tutoría.

Tras la primera edición de este libro, empecé el podcast Embedded.fm para hablar de sistemas embebidos con otras personas. A lo largo de cientos de episodios, he aprendido cómo resuelven problemas otros ingenieros, sobre las nuevas tecnologías que se están desarrollando y sobre otras trayectorias profesionales.

Organización de este libro

Leo libros de no ficción para entretenerme. Leo mucha más ficción que no ficción, pero aun así, me gusta cualquier buen libro. Escribí este libro para que se leyera casi como una historia, de principio a fin. La información es técnica (extremadamente técnica en algunos puntos), pero la presentación es informal. No necesitas programar con él para entender el material (aunque probar los ejemplos y aplicar las recomendaciones a tu código te dará una comprensión más profunda).

Esto no pretende ser un manual técnico en el que puedas saltar a la mitad y leer sólo lo que quieras. Es decir, puedes hacerlo, pero te perderás mucha información con el método de buscar y destruir. También te perderás los chistes, que es lo que realmente me parecería mal. Espero que leas el libro en orden. Luego, cuando estés hasta las caderas de caimanes y necesites implementar una función rápidamente, coge el libro, hojea el capítulo adecuado y, como un mago, improvisa una tabla de comandos o una implementación de punto fijo de la varianza.

O puedes saltar de un lado a otro, leyendo sobre soluciones a tu crisis de la semana. Lo comprendo. A veces sólo tienes que resolver el problema. Si es así, espero que encuentres el capítulo lo suficientemente interesante como para volver cuando hayas terminado de apagar ese fuego.

El orden de los capítulos es

Capítulo 1, "Introducción"

Este capítulo describe qué es un sistema embebido y en qué se diferencia su desarrollo del software tradicional.

Capítulo 2, "Crear una arquitectura del sistema"

Tanto si intentas comprender un sistema como si quieres crear uno desde cero, hay herramientas que te ayudarán.

Capítulo 3, "Poner las manos en el hardware"

La integración de hardware y software durante la puesta en marcha de la placa puede dar miedo, pero hay algunas formas de hacerla más fácil.

Capítulo 4, "Entradas, salidas y temporizadores"

La versión para sistemas embebidos de "Hola Mundo" es hacer parpadear un LED. Puede ser más complejo de lo que esperas.

Capítulo 5, "Interrupciones"

Las interrupciones son uno de los temas más confusos en los sistemas embebidos: código que se llama de forma asíncrona ante sucesos que ocurren dentro del procesador. Para facilitar esta tarea, se utiliza un pollo.

Capítulo 6, "Gestionar el flujo de actividad"

Este capítulo describe métodos para configurar el bucle principal de tu sistema, dónde utilizar interrupciones (y cómo no hacerlo), y cómo hacer una máquina de estados.

Capítulo 7, "Comunicación con los periféricos"

Los diferentes métodos de comunicación serie rigen los sistemas embebidos: UART, SPI, I2C, USB, etc. Aunque puedes buscar los detalles de cada uno de ellos, este capítulo examina en qué se diferencian unos de otros y cómo hacer que funcionen de forma más eficiente.

Capítulo 8, "Montar un sistema"

Los periféricos comunes, como las pantallas LCD, los ADC, la memoria flash y los sensores digitales, tienen necesidades de implementación comunes, como el manejo de búferes, los requisitos de ancho de banda y las canalizaciones.

Capítulo 9, "Meterse en líos"

Depurar es una habilidad que todo desarrollador necesita. Averiguar cómo se causan los problemas te enseñará a resolver bugs, problemas de pila, fallos duros e ingenio.

Capítulo 10, "Construir dispositivos conectados"

Tanto si tienes dispositivos IoT de consumo como sistemas industriales en red, gestionar muchos dispositivos significa ocuparse de las actualizaciones de firmware, la seguridad y el monitoreo de la salud.

Capítulo 11, "Hacer más con menos"

La optimización no es para los débiles de corazón. Este capítulo muestra métodos para reducir el consumo de RAM, espacio de código y ciclos de procesador.

Capítulo 12, "Matemáticas"

La mayoría de los sistemas embebidos necesitan realizar algún tipo de análisis. Comprender cómo funcionan (y no funcionan) las operaciones matemáticas y los puntos flotantes hará que tu sistema sea más rápido y robusto.

Capítulo 13, "Reducir el consumo de energía"

Desde reducir los ciclos del procesador hasta sugerencias sobre la arquitectura del sistema, este capítulo te ayudará si tu sistema funciona con pilas.

Capítulo 14, "Motores y movimiento"

Este capítulo es una introducción básica a los motores y el movimiento. (O posiblemente la introducción a un libro totalmente nuevo).

La información se presenta en el orden en que quiero que mis ingenieros empiecen a pensar en estas cosas. Puede parecer extraño que la arquitectura sea lo primero, teniendo en cuenta que la mayoría de la gente no llega a ella hasta más adelante en su carrera. Pero quiero que la gente piense en cómo encaja su código en el sistema mucho antes de preocuparse por la optimización.

Terminología

Un microcontrolador es un procesador con extras incorporados, como RAM, espacio para código (normalmente flash) y varias interfaces periféricas (como líneas de E/S). Su código se ejecuta en un procesador, o unidad central de procesamiento (CPU). Un microprocesador es un procesador pequeño, pero la definición de "pequeño" varía.

Un DSP(procesador digital de señales) es una forma especializada de microcontrolador que se centra en el procesamiento de señales, normalmente muestreando señales analógicas y haciendo algo interesante con el resultado. Normalmente, un DSP es también un microcontrolador, pero tiene ajustes especiales para que realice operaciones matemáticas más rápidamente (en particular, multiplicaciones y sumas).

Cuando escribí este libro, quise utilizar la terminología correcta para que te acostumbraras a ella. Sin embargo, con tantos nombres para la pieza del sistema que ejecuta tu código, no quería añadir confusión cambiando el nombre. Así que me quedo con el término procesador para representar lo que sea que estés utilizando para implementar tu sistema. La mayor parte del material es aplicable a lo que tengas en realidad.

Convenciones utilizadas en este libro

En este libro se utilizan las siguientes convenciones tipográficas:

Cursiva

Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.

Constant width

Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.

Consejo

Este elemento significa un consejo o sugerencia.

Nota

Este elemento significa una nota general.

Advertencia

Este elemento indica una advertencia o precaución.

Utilizar ejemplos de código

Este libro está aquí para ayudarte a hacer tu trabajo. En general, puedes utilizar el código de este libro en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir un CD-ROM de ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.

Este libro tiene un repositorio GitHub para código, herramientas y punteros a más información.

Agradecemos, pero no exigimos, la atribución. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Making Embedded Systems por Elecia White (O'Reilly). Copyright 2024 Elecia White, 978-1-098-15154-6".

Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en permissions@oreilly.com.

Aprendizaje en línea O'Reilly

Nota

Durante más de 40 años, O'Reilly Media ha proporcionado formación tecnológica y empresarial, conocimientos y perspectivas para ayudar a las empresas a alcanzar el éxito.

Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita https://oreilly.com.

Cómo contactar con nosotros

Dirige tus comentarios y preguntas sobre este libro a la editorial:

Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en https://oreil.ly/making-embedded-systems-2.

Para obtener noticias e información sobre nuestros libros y cursos, visita https://oreilly.com.

Encuéntranos en LinkedIn: https://linkedin.com/company/oreilly-media.

Míranos en YouTube: https://youtube.com/oreillymedia.

Agradecimientos

Este libro no surgió en el vacío. Empezó con un colega que me dijo: "Oye, ¿conoces un libro que pueda regalar a uno de mis ingenieros junior?". De esa semilla plantada surgieron meses de escritura; aprendí a apreciar de verdad a los amigos comprensivos (y alentadores). Luego estaban los ingenieros que dedicaron su tiempo a revisar el material técnico (cualquier problema pendiente es culpa mía, no suya, por supuesto). Por último, O'Reilly me proporcionó un apoyo tremendo durante todo el proceso.

Dar las gracias a cada persona como se merece me llevaría páginas y páginas, así que me limitaré a repasarlas todas de un tirón, sin ningún orden en particular: Phillip King, Ken Brown, Jerry Ryle, Matthew Hughes, Eric Angell, Scott Fitzgerald, John Catsoulis, Robert P. J. Day, Rebecca Demarest, Jen Costillo, Phillip Johnston, Rene Xoese Kwasi Novor y Chris Svec. Estas personas marcaron la diferencia en el sabor de este libro. Hay otros agradecimientos repartidos por el libro, en los que obtuve ayuda de una persona concreta en un área determinada, así que es posible que vuelvas a ver estos nombres (o algunos diferentes).

Por último, los autores siempre dan las gracias efusivamente a sus cónyuges; es un tópico. Sin embargo, después de haber escrito un libro, veo por qué. Christopher White, mi batería, físico e ingeniero de sistemas embebidos favorito, gracias sobre todo. Por todo.

1 Erich Gamma, et al., Patrones de diseño: Elements of Reusable Object-Oriented Software (Addison-Wesley).

Get Creación de sistemas empotrados, 2ª edición now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.