La Dulce Condena de Hacer Software Embebido
Veinte largos años llevo cavando con una cucharita en este oscuro túnel del software embebido. Un túnel que sólo parece alargarse y hacerse cada vez más oscuro y caluroso, pero del cual, por razones extrañas, todavía me rehúso a salir.
Aquellos que hacen software de alto nivel, por ejemplo software para páginas web o herramientas que corren en una PC o un servidor, se pierden la dulce miseria de vivir en la frontera caliente entre el hardware y el software, donde lo eléctrico y lo numérico se cruzan en un duelo donde lo único que siempre está en juego es la sanidad mental del programador o programadora.
En qué consiste esta suerte de religión? Aquel que abraza el esotérico culto del software embebido se pasa la vida:
Leyendo hojas de datos y manuales de referencia de microcontroladores hoja por hoja, registro por registro, bit por bit, puteando en el proceso a aquellos que eligieron subdividir una palabra de 32 bits en pedazos de 5 bits, 3 bits, 7 bits, 11 bits, etc, como para que las máscaras sean bien intrincadas
Cansándose de los manuales y dándole momentánea cabida a excéntricas herramientas de generación automática de código de “abstracción” de bajo nivel
Buscando un “blinky.c” que le dé un primer empujón
Esperando que llegue una interrupción que no llega
Confundiendo MOSI y MISO
Mandando X cantidad de bytes por una UART sólo para recibir X+/-random del otro lado y no tener idea por qué
Usando IP stacks falopa sacados “de internet”
Agregando web servers a todo lo que se mueva
Viendo como netcat recibe todo bárbaro cuando nuestro cliente TCP no recibe nada
Cayendo repetidamente en el tentador bit-banging pensando que es la mejor opción cuando en realidad es claramente la peor
Usando for loops como demoras
Yendo a modificar esos for loops cuando se usa un micro más rápido
No recordando el complemento a dos
Toqueteando header files “de sistema” (los que tienen candadito)
Observando como nuestros humildes drivers de Linux embebido mágicamente dejan de compilar de una revisión de kernel a otra, acto seguido deshabilitando cualquier update posible del kernel hasta nuevo aviso
Brickeando placas porque—otra vez—el bootloader se borró a sí mismo. Yendo a buscar el JTAG al cajón para que te mire con cara de “sabía que ibas a volver”
Copiando código desde notas de aplicación en pdf, invirtiendo más tiempo ordenando la indentación que lo que hubiese llevado escribir el código de cero
Abrazando al super loop como filosofía de vida y complicándolo al punto que llega ese momento donde está más que claro que se debería haber usado un RTOS
Usando la combinación de osciloscopio y GPIOs como único y moralmente superior in-circuit debugging
Cerrando prematuramente el pdf del esquemático sólo para tener que volverlo a abrir dos minutos después. Repitiendo este proceso las veces que haga falta
Arreglando un moco de hardware por software sólo para que el moco aparezca otra vez cuando finalmente se corrige el problema en el hardware
Desempolvando el assembler al darse cuenta que a cierta rutina escrita en C no le da el cuero con el timing
Comprobando que es imposible tener a mano el carrete de wire wrap y el de estaño al mismo tiempo. Siempre faltará uno u otro
Soldando cables de calidad grado “mirame y no me toques”
A algunos les gusta que les peguen con una fusta en las canillas o que los quemen con cera caliente. A otros nos gusta hacer software que corre en sistemas con un par de míseros bytes de RAM.
Alguien cantó una vez: me gustan los problemas, no existe otra explicación.