From: nobody on 18 Jun 2010 17:10 larwe wrote: > On Jun 17, 5:06 pm, nobody <nob...(a)nowhere.com> wrote: > > >>>When rewriting the different states would you use the goto keyword or try to >>>rewwrite all with if, if-else? >> >>None. State/Event matrix and function pointers > > > Is this actually better than a switch statement, though? Switch often > compiles to much the same thing, plus it lets you use fallthrough if > you want, and it has implicit bounds checking on the state variable. > I'm used to work in Ada so bounds checking is nothing I think specially about. It has one advantage. Constant dispatch time. It always takes the same time to translate a state and an event into a new state. With two nested case (switch?) statements the time will vary depending on which branches you end up in.
From: D Yuniskis on 18 Jun 2010 17:30 nobody wrote: > It has one advantage. Constant dispatch time. It always takes the same > time to translate a state and an event into a new state. With two nested > case (switch?) statements the time will vary depending on which branches > you end up in. This forces you to make very *big* tables and/or preprocess events to reduce the number of stimuli that the FSM responds to. E.g., build a FSM that will successfully parse messages of the form: "The battery voltage is +#.###\n" and "Power has failed at XX:XX:XX\n" Silly examples (?) but they illustrate the point. I've found the "present_state x input_stimulus = next_state" table approach rarely justifies the speed/spade tradeoff for anything but trivial automata. YMMV.
From: larwe on 18 Jun 2010 19:57 On Jun 18, 5:10 pm, nobody <nob...(a)nowhere.com> wrote: > > Is this actually better than a switch statement, though? Switch often > > compiles to much the same thing, plus it lets you use fallthrough if > > It has one advantage. Constant dispatch time. It always takes the same > time to translate a state and an event into a new state. With two nested > case (switch?) statements the time will vary depending on which branches > you end up in. Maybe. Depends on how smart your compiler is. The difference is probably in the order of 10-15 instructions though at most. I try not to write code in any HLL that's going to get that tight on the jitter introduced by different branches through the code. Seems like a recipe for horror every time you upgrade your compiler. Also, in the systems where I need to worry about it, I usually have factors orders of magnitude greater that are affecting code execution determinism - caches and DMA bus contention, for instance.
From: Albert van der Horst on 19 Jun 2010 08:53 In article <4c1943ba$0$286$14726298(a)news.sunsite.dk>, Mith <mith(a)no.no> wrote: >I'm converting assembly code to C and there is a lot of branches/jumps (it >is a big state machine). > >When rewriting the different states would you use the goto keyword or try to >rewwrite all with if, if-else? If it is a state machine I would try to rewrite it as a switch, and keep the remainder as goto (for starters). > > -- -- Albert van der Horst, UTRECHT,THE NETHERLANDS Economic growth -- being exponential -- ultimately falters. albert(a)spe&ar&c.xs4all.nl &=n http://home.hccnet.nl/a.w.m.van.der.horst
First
|
Prev
|
Pages: 1 2 3 Prev: Display protection/longevity Next: Press Release - Ada-Europe launches Programming Contest |