¿De qué tamaño es el mercado? De 1980 a 2005 el volumen de líneas de código por proyecto creció a una tasa anual compuesta de 26% (los proyectos se vuelven cada vez más complejos) y el número de desarrolladores especializados en embedded ha crecido 8% anual (generando más empleos en la especialidad). En 2004 el mercado total era ya de 23 mil millones de dólares. Es un segmento de la industria del software que crece de manera más acelerada que la industria en su conjunto.
Múltiples jugadores participan en el mercado embedded de software. Microsoft (Windows CE, Windows XP Embedded), Wind River (VxWorks, Linux), Symbian (SymbianOS), Palm, y Green Hills (INTEGRITY) desarrollan sistemas operativos y herramientas de desarrollo con capacidades embedded. Cada proveedor sigue enfoques diferentes dependiendo de su experiencia y posicionamiento en el mercado. Microsoft, por ejemplo: apuesta a facilitar el desarrollo embedded al integrar sus herramientas de desarrollo para embedded dentro de su familia de herramientas de desarrollo para el escritorio (Visual Studio). Otros proveedores, como Wind River o Green Hills se especializan en este espacio buscando ganar, ofreciendo estabilidad y calidad técnica en sus productos, atributos fundamentales en el mundo embedded.
Atributos del Desarrollo Embedded
El desarrollo de embedded software presenta retos para los desarrolladores de software que son diferentes a los que se presentan en el desarrollo tradicional para computadoras o servidores. Los tres atributos que típicamente tienen consideraciones especiales en el desarrollo de software embedded son: confiabilidad, limitaciones en recursos de hardware, y respuesta en tiempo real. La figura 1 ilustra y explica de forma más detallada dichos retos.
Adicionalmente, cada vez son más los clientes que solicitan sistemas de este tipo, esperando obtener también los mismos atributos que cualquier proyecto de software. En particular, conforme el software se vuelve un componente más importante del costo de muchos artículos, los clientes desean obtener características como alto grado de reuso, mantenibilidad, y flexibilidad que históricamente no han sido prioridad en el desarrollo de software embedded. La posibilidad de combinar todos estos atributos presenta dificultades de ingeniería de software y hay algunas tendencias interesantes al respecto. Todas estas tendencias comparten la búsqueda de mayores niveles de abstracción en el desarrollo de software embedded.
Tendencias
Conforme el hardware en general continúa su inexorable mejora en la relación poder/precio, empieza a ser posible utilizar cada vez más hardware de propósito general en lugar de hardware dedicado para una solución vertical específica. Cada vez son más los dispositivos embedded que utilizan arquitecturas SoC (System-On-Chip) en lugar de circuitos integrados especializados. El uso de hardware de propósito general simplifica enormemente la portabilidad del software embedded entre diferentes dispositivos.
Los sistemas operativos embedded son compactos y altamente eficientes. Por lo mismo en algunos casos no ofrecen al desarrollador muchas de las facilidades que sí se encuentran en sistemas de escritorio. Conforme los usuarios demandan más funcionalidad en sus dispositivos, los sistemas operativos han aumentado su complejidad y las funciones que ofrecen. Sin embargo, es fundamental que mantengan un núcleo altamente confiable y predecible. Por esta razón los sistemas operativos embedded más complejos (como Windows XP Embedded, Windows CE y Linux Embedded) son también altamente modulares, permitiendo al desarrollador elegir únicamente aquellas funciones que son necesarias para una solución específica. La modularidad en los sistemas operativos facilita el desarrollo de aplicaciones cada vez más complejas limitando las consecuencias en deterioro de confiabilidad que son críticas en sistemas embedded.
Los lenguajes utilizados para desarrollar sistemas embedded son de alto nivel. Éstos permiten a los desarrolladores ser más productivos y ofrecer más funcionalidad por hora/hombre trabajada. En las fronteras del desarrollo embedded, como el desarrollo para teléfonos y PDAs de consumidor final (donde más se parece al desarrollo de software para computadora personal) podemos encontrar ya ambientes virtuales de ejecución como el Microsoft .NET Micro Framework, Microsoft .NET Compact Framework o el Java Platform Micro Edition. Estos ambientes facilitan enormemente el desarrollo de soluciones embedded para los desarrolladores que están acostumbrados al desarrollo tradicional. No obstante, para aplicaciones embedded donde se requiere un nivel de precisión y control elevado, aún no son adecuados. Lo que es particularmente cierto para las llamadas aplicaciones de tiempo real.
En muchas aplicaciones embedded se presenta el concepto de ejecución en tiempo real. Por ejemplo: en un motor de auto funcionando a 6 mil revoluciones por minuto, el cigüeñal da una vuelta en exactamente 10 milisegundos. Una computadora de administración de la electrónica del motor se enfrenta a límites inamovibles en cuanto al tiempo que puede utilizar para calcular funciones como por ejemplo: determinar en qué momento la bujía de un cilindro debe disparar su chispa.
Para poder enfrentar estos requerimientos necesitamos un sistema operativo de tiempo real. Los sistemas operativos de este tipo pueden garantizarnos tiempos precisos de respuesta para cada una de sus funciones en un hardware determinado. Los sistemas de tiempo real pueden ser duros o suaves.

Construir una aplicación con requerimientos de tiempo real duro que además sea reusable, portable y de fácil mantenimiento, en definitiva no es una tarea trivial. Para contribuir a lograrlo, en el año 2000 el proyecto Giotto de la Universidad de California en Berkeley creó el concepto de tiempo lógico de ejecución (Logical Execution Time): una abstracción del tiempo físico real de ejecución que permite construir sistemas que garanticen un tiempo de ejecución de manera independiente del hardware.
La siguiente lista resume las principales tendencias involucradas en el desarrollo de software embedded:
• Circuitos dedicados > Hardware de propósito general
• Lenguaje ensamblador > Lenguajes de alto nivel y ambientes virtuales de ejecución
• Tiempo real físico > Tiempo real lógico
• Sistemas operativos compactos > Sistemas operativos modulares
Todas estas tendencias que hemos considerado para el desarrollo de software embedded tienen el mismo objetivo: aumentar la productividad de los desarrolladores de software embedded manteniendo a salvo los atributos fundamentales que han diferenciado históricamente a las aplicaciones embedded. Podemos esperar que estas tendencias se intensifiquen en el futuro del desarrollo embedded, como parte de la inexorable búsqueda por ofrecer más y mejor funcionalidad a nuestros usuarios en cada vez menos tiempo.
Fig 1. Retos para el Desarrollo de Software Embedded.

Fig 2. El concepto de tiempo lógico de ejecuciòn.
Referencias
• Henzinger, T. A. (2000). “The Fixed
Logical Execution Time Assumption”.
• Jerraya, A. A. (2005). “Longterm Trends for Embedded Software Design”. CEPA 2 Workshop. Brussels.
• Pree, D. W. (2005). “Trends in
Embedded Software Engineering”. Salzburg: Universität Salzburg.
• Venture Development Corporation. (2004). “Embedded Software Trends”.
Acaerca del autor
Héctor Obregón (msdnfan.blogspot.com) es fundador y Director General de emLink (www.emlink.com.mx), empresa de desarrollo de software que implementa soluciones en clientes corporativos como Televisa, Comex, MetLife y SAM’s Club, entre otros. Adicionalmente, Héctor es Microsoft MSDN Regional Director, Microsoft MVP para Windows Embedded y miembro del comité de dirección de la Comunidad .NET de México D.F.
- Log in to post comments