finite state machine/automaton framework?
Chris Pressey
cpressey at catseye.mine.nu
Fri Sep 3 11:18:12 PDT 2004
On Fri, 3 Sep 2004 20:05:08 +0200
"Simon 'corecode' Schubert" <corecode at xxxxxxxxxxxx> wrote:
> for example:
>
> state_idle:
> if:
> written_byte & WHATEVER_BITMASK
> newstate:
> state_program_oneshot
> output:
> this_var = that_var;
> run_foo();
static void (*state)(void);
static void
state_idle(void)
{
if (written_byte & WHATEVER_BITMASK) {
this_var = that_var;
run_foo();
state = state_program_oneshot;
return;
} else if ...
}
. ..
void
run_fsm(void)
{
state = start_state;
while (state != NULL) {
state();
}
}
This design pattern is heavily employed in the installer.
I don't think the specialized notation has many advantages over the C
version, especially in this instance. Yacc and lex are a different area
of application - they transform a regular expression or a grammar into a
DFA or a LALR table - i.e. something of significantly different
structure. On the other hand, these state descriptions look very very
similar to their C equivalents.
-Chris
More information about the Kernel
mailing list