Ir al contenido principal

Entradas

Prueba de máquinas de estados planas y jerárquicas mediante casos de prueba

El artículo explora una serie de estrategias, como punto de partida, para probar software que representa máquinas de estados tanto tradicionales (o planas) como de estados anidados (o jerárquicas). Estas últimas también conocidas como Statecharts [5] o máquinas UML. Dichas estrategias se aplican bajo conceptos como el desacople de módulos, el uso de stub , spy y mock [1][6], los casos de prueba unitarios y sus fases , entre otros, los cuales permiten aplicar de manera inmediata el desarrollo de software dirigido por pruebas ( TDD ), en este caso para las máquinas de estados, con los beneficios que ello implica. Aunque lamentablemente poco explorado para la aplicación en software dirigido por eventos (reactivo). Cada una de las estrategias expuestas se respalda con ejemplos de código fuente, escritos en lenguaje C para el framework de prueba Unity y Cmock , aunque pueden extrapolarse fácilmente a otros similares.  Finalmente, el presente artículo muestra una estrateg...

Especificación de Máquinas de Estados UML y Compatibilidad en RKH

El presente artículo describe en detalle la semántica y notación de cada uno de los elementos que constituyen las máquinas de estados especificadas por UML, las cuales se basan en el modelo de comportamiento dinámico Statechart escrito por el profesor David Harel [1]. Adicionalmente, describe la compatibilidad y grado de cumplimiento de la versión 2.4.4 o superior del framework RKH [2] con la especificación de máquinas de estados definida por OMG, en la especificación “OMG Unified Modeling Language”, Version 2.5 , Capítulo 14 “StateMachine”, pág. 319 [3]. Si bien la especificación UML de OMG es libre y pública, dista bastante de ser fácil de leer e interpretar, por aquellas personas que no se dedican exclusivamente a estos temas, pero si requieren formalizar la manera en que desarrollan software, en especial aquel aplicado a los embedded systems . Por tal motivo, el objetivo fundamental del presente artículo, es acercar la especificación (semántica y notación) de U...

Modularidad, abstracción y múltiples instancias en C para Embedded Software

Está claro que la modularidad, el encapsulamiento y la abstracción fomentan la producción de software reutilizable, escalable, flexible, transportable y sumamente legible. Generando sistemas de software óptimos respecto del uso de memoria de datos y programa, menos complejos, fáciles de mantener y escalar. El presente artículo aborda estos principios y los aplica a un ejemplo concreto muy tradicional en los embedded systems , específicamente la estructura de datos queue , proveyendo diversas técnicas de programación no sólo para la construcción de este tipo de estructuras, sino también para la construcción de todo tipo de módulos de software genéricos, flexibles y escalables, desde la definición de su interfaz hasta su implementación en lenguaje C. Lo que implica generalizar, parametrizar e instanciar una solución general a un problema específico. Adicionalmente, el artículo describe la implementación de varios patrones para instanciar la entidad que encapsula los atributos del módu...

Principios de OOP aplicados en C para Embedded Systems

Los principios del diseño orientado a objetos [1,2] aplicados a la programación, no son propios de un lenguaje o herramienta particular, sino más bien, son una manera disciplinada de organizar, diseñar y codificar software. Estos son: el encapsulamiento, la herencia y el polimorfismo. Su aplicación, en sistemas de software, incluyendo los embedded systems , tiene grandes beneficios, ya que fomenta la producción de software modular, reutilizable, flexible, transportable y sumamente legible. Además, facilita y naturaliza, el uso de lenguajes de modelado de software como UML [1,2]. Este nos ayuda a describir y diseñar el sistema, por medio de una serie de notaciones gráficas estandarizadas, como los diagramas de estados Statecharts [3], los diagramas de secuencia, entre otros. Fundamentalmente, UML nos proporciona un conjunto herramientas conceptuales para representar o modelar el sistema.

Modelo de transacción fiable en sistemas intercomunicados

Los embedded systems utilizan los protocolos de comunicación para enviar y recibir información crítica, tanto entre procesadores internos, como con actores externos. Dentro del mismo sistema, algunos mensajes pueden ser más críticos que otros, requiriendo un alto nivel de fiabilidad en su transferencia al medio. Para aumentar este factor en un medio poco fiable o cuando se requiere una fiabilidad extraordinaria, puede recurrise al mecanismo de transacción, el cual disminuye la probabilidad de ocurrencia de ciertos problemas, que en determinados sistemas, como los médicos, pueden incurrir en fallas muy severas. El presente artículo describe la aplicación del mecanismo de transacción "exactamente una vez" (EO - exactly once) [3], sobre un sistema que controla un motor, monitorea su velocidad de salida, su temperatura y su presión de aceite, y provee una interfaz al usuario. El sistema en cuestión intercambia información entre sus actores, utilizando el par...

Statecharts implementados mediante tablas de estados

El presente artículo tiene por objetivo mostrar las bases de una implementación de máquina de estados Statechart [2,3,5,6] en lenguaje C (compatible con C++), cuyo objetivo fundamental es lograr una representación en código fuente simple, directa, transparente, legible, flexible y compacta, que permita determinar de un sólo vistazo la topología del diagrama que representa, y así lograr una implementación sencilla de modificar, mantener e interpretar. Incluso que facilite la generalización, la reutilización, la transportabilidad, como así también la generación de código automático. Si bien dicha implementación busca maximizar la legibilidad, no descuida ni la eficiencia en el uso de recursos ni la velocidad de ejecución.

Identificación de respuestas a comandos AT en ISR. Intérprete de comandos.

Gestionar un módulo GSM por comandos AT, recibir, buscar e interpretar tanto las respuestas a comandos como las no solicitadas (URC) no es una cuestión menor si se requiere una solución eficiente, robusta y flexible. Sabiendo que cada comando AT tiene por resultado un conjunto posible de respuestas y que estas se representan por cadenas de caracteres codificadas en ASCII, en principio, el software que las recibe tiene por objetivo identificarlas de acuerdo al comando enviado, sin olvidar la detección de aquellas no solicitadas, aún cuando aguarda la respuesta a un comando enviado. También se lo conoce como intérprete de comandos AT. La intención del presente artículo es proponer una solución a esta problemática, siguiendo las ideas de la publicación Administración de módulos GSM en sistemas reactivos , basada en la estructura de datos tipo árbol y los autómatas finitos, también conocidas como máquinas de estados finitas.