>...(also the simulator can not work with it)...
Why not? (And can I overcome this somehow?)
>... in most cases it is possible to wait on an event rather than polling ...
But as I understand it, the task still has to run to the end.( This has more to do with the general design philosophy than the scheduling algorithm itself.) A co-operative multitasking is just fine in most cases, and neatly avoids the complications of a pre-emptive multitasking. Still, in my opinion/application, the requirement for the task to run to end is a big, (hopefully) unnecessary complication. As you said, it can be worked around with a state machine, but when the application conducts a kind of dialog with outside world, the state machine fast gets tens, if not hundreds of states and the code is a nightmare to read and maintain. I much rather write say something-wait for response-choose action-say something more-wait new response etc. style, where at each wait, other tasks get to run.