Implementación del modelo Statechart
- Tanto la semántica como la sintaxis de los Statecharts se basa en la especificación de OMG UML 2.x. Básicamente soporta:
- Pseudo-estados junction, branch, history (shallow y deep).
- Transiciones compuestas y condicionales.
- Estado sub-máquina.
- Acciones de inicialización por defecto de región de un estado compuesto como de la región raíz
- Acciones de entrada y salida de estados.
- Secuencia tradicional en la ejecución de una transición.
- Mecanismo para eventos diferidos.
- Transiciones locales, internas y de terminación.
- Estado final.
- Las transiciones por defecto pueden utilizar cualquier tipo de pseudoestado como destino.
- La codificación de los Statecharts es simple e intuitiva. El código refleja lo que el modelo indica sin ofuscación.
- La topología de los Statecharts se almacena como datos en ROM, evitando de esta manera su codificación con código condicional (if-else, switch-case), que se ofusca en la medida que aumenta la complejidad. Adicionalmente, esta estrategia de implementación es sumamente eficiente en términos de tiempo de ejecución.
- Permite utilizar eventos con y sin parámetros.
Modelo de ejecución
- Utiliza el modelo de objeto activo como unidad de concurrencia, independientemente de la política de planificación subyacente.
- La ejecución de las máquinas de estados se realiza bajo el modelo de objeto activo, el cual se constituye por una cola de eventos, un receptor de eventos (generalmente un Statechart) y un hilo de ejecución. Es importante resaltar que el comportamiento de los objetos activos no se limita a las máquinas de estados ya que RKH permite elegir de qué manera se procesan los eventos recibidos. Básicamente esto se debe a que estos son objetos polimórficos.
- Utiliza el patrón de intercambio de eventos para la comunicación entre objetos activos e ISR.
- Puede acoplarse a una aplicación funcional existente y trabajar en colaboración. Por lo general, en esta situación, la aplicación basada en RKH resuelve la parte reactiva del sistema.
Pruebas unitarias
- Provee un entorno para las pruebas unitarias de las máquinas de estados, utilizando los frameworks Unity, Cmock y Ceedling.
Calidad de código
- Su código fuente está escrito en lenguaje C basado en los principios SOLID, focalizándose en la eficiencia en términos de consumo de recursos, como RAM, ROM y tiempo de ejecución. Su footprint se extiende entre 1K a 6K de ROM.
- Todos sus módulos poseen el harness de prueba para que estos evolucionen, mediante TDD, en un ambiente controlado y seguro.
- Su estructura de archivos y directorios es simple e intuitiva.
- Posee su propio estándar de codificación, el cual puede aplicarse automáticamente a nuevos archivos fuente, mediante la herramienta uncrustify.
- Provee una serie de plantillas disponibles para comenzar la codificación de nuevos archivos fuente con las secciones y estructuras que utiliza el estándar de codificación de RKH.
- Gran parte de su funcionalidad puede especializarse, extenderse o bien reemplazarse según necesite la aplicación en cuestión.
- Permite configurarse en tiempo de compilación, para optimizar recursos.
- Provee assertion macros, como assert(), allege(), error(), require(), y ensure(), para la gestión de errores, excepciones, precondiciones y postcondiciones, favoreciendo la programación defensiva.
Transportabilidad
- Compatible con procesadores de 8, 16 y 32bits.
- A través de una capa de abstracción de plataforma (PAL), puede adaptarse a cualquier procesador, compilador y OS/RTOS.
- Crear el soporte de una nueva plataforma es un proceso simple, ya que son pocas las dependencias con esta.
- Puede acoplarse y trabajar en conjunto con cualquier OS/RTOS tradicional, heredando sus capacidades y servicios.
- En caso de operar sin OS/RTOS, incluye un mecanismo para despachar eventos según la prioridad de los objetos activos (scheduler cooperative non-preemptive).
- La capa PAL desacopla, de manera independiente, servicios nativos como la cola de eventos, el gestor de memoria dinámica, los temporizadores y el planificador, de forma tal que estos puedan ser provistos externamente, por ejemplo por un OS/RTOS tradicional.
- Permite adoptar fácilmente mecanismos para el ahorro de energía, en función de la plataforma en uso.
- Soporta diversas plataformas de uso tradicional en la industria.
Verificación y validación
- Permite verificar y validar en tiempo de ejecución, el funcionamiento de una aplicación basada en este, mediante su trazador nativo, el cual es flexible, configurable y multiplataforma.
Documentación
- Está completamente documentado en su manual de referencia, el cual incluye una serie de guías rápidas para su instalación, uso como principiante y avanzado, creación del soporte de nuevas plataformas, como así también la descripción de su estructura interna y la descripción detallada de las aplicaciones demostrativas.
Ejemplos de uso y aplicaciones demostrativas
- Posee una serie de aplicaciones demostrativas disponibles en diversas plataformas, para utilizarlas como punto de partida en la creación de una nueva aplicación.