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.