How does Rational Statemate translate concurrent activities into a sequential language? Even though one procedure in the generated code may call another, if both are executed in the same cycle, they are concurrent.
Sometimes it seems natural to implement concurrent activities as different threads (tasks), but it is also possible to implement them as a single threaded program. Writing a single or multi-threaded embedded application is a design decision that does not affect performance or modularity. Since the underlying architecture is sequential, a multi-threaded program is actually a set of sequential pieces managed by a sequential handler.
So why is multi-threading needed at all? A multi-threading capability is needed only if a designer wants to add threads that run “concurrently” with the generated modules that execute as a single thread, denoted as the “main task.”