The Distributed Finite State Machine Project (dFSM Project) aims to develop a platform that allows to develop an application composed of some distributed modules, were every module is designed with the finite state machine (FSM) paradigm. The platform also offers a communication mechanism between modules that is based on events exchange.
The finite state machine paradigm has been largely used in lexical interpreters, but is has been also used in general software development because lots of process can be model as finite state machines. This project is focused in the embedded area, were we usually need to develop applications that can be divided in simple modules and every one can be modeled as a FSM.
The development is done in a Linux system. Every module in the dFSM Project can be implemented as a single process, totally isolated from others modules, or it can be implemented as a thread if memory map shading is needed. The dFSM offers a simple object oriented C++ interface that simplifies enormously the coding phase. The events communication mechanism is based in a message exchange approach were every event (message) is identified by the information type it carries and not by the sender-receiver pair address. This is possible because every module has prior to register to desired events and an automatic event handler mechanism will catch the events until it is processed. The basic idea it that the status transfers are triggered by events.
With the dFSM the analysis process will follow the steps:
Divide the application between modules.
Model every module as a FSM. Define the states set, the transitions set and plasm all in the State Transition Diagram (STD).
Define the events that will be send between modules and will occasion state transitions.
Then we can afford the code process by writing the code associated to every state with a object oriented approach. The entire API is encapsulated in a shared library and is licensed under the GNU LESSER GENERAL PUBLIC LICENSE.
This product uses software developed by Spread Concepts LLC for use in the Spread toolkit. For more information about Spread see http://www.spread.org