My application uses several communications interfaces (I2C, CAN, USART) which are all implemented using some level of state machine. In addition, the application objects lend themselves to being implemented using State Machines (they all respond to external stimulus).
Up to now I have hand-coded these SMs using traditional methods (switch statements, etc.) but my application has outgrown this and I am looking for a richer State Machine environment* such as that provided by "SMC" (State Machine Compiler, Source Forge) but I fear I may be in for a steep learning curve and I do not know if SMC is suitable for the GCC/AVRMega environment (I use AVRMega1284P processors).
* some things I am looking for: "guard" functions, multiple actions per state, internal and external events, nested state machines, etc.
In a past life I wrote a State Machine compiler using yacc/lex along with an execution engine but I'm not anxious to re-do that effort.
Ideal would be something that also supports a graphical description of the state machine, produces a graphical document describing the SM, produces C++ code suitable for targeting to AVR processors, and supports state tracing, etc. for debugging on the target.