On Jun 12, 2006, at 7:29 AM, Andres Aberasturi wrote:
Hi all,
We have been working with TinyOs and NesC some few months, but we
still have some doubts. We want to ask you the following three
questions:
1.- In some places, we have read that events can call commands,
post tasks and signal other events. Also, we have read that
commands can call lower level commands. Then, a command cannot post
a task? or signal an event? is it right? We thought command can do it.
The only operation that issues a warning is when an async function
calls a sync function. For simplicity, sync functions are only safe
to call when the root of the call graph is a task. Async functions
can also have interrupt handlers are their root.
In practice, it is bad practice to signal an event (signal xxxx)
inside a command. There is nothing that prevents you from doing so,
however. It is bad practice because it can easily lead to infinite
call loops. For example:
call Foo.send();
event void Foo.sendDone();
commmand void Foo.send() {
signal Foo.sendDone();
}
The TinyOS programming manual goes into detail on this and other good/
bad programming practices.
2.- We have read that there are two level scheduling: events and
tasks. We know TinyOs scheduler manages tasks which are posted, so
does TinyOs scheduler manage events? or are events managed like
commands?
The distinction is sync/async. The term "event" was overloaded in the
original TinyOS paper to mean both "callback" and "interrupt." The
command/event distinction means the former, the task/event
distinction means the latter. The nesC paper and the TinyOS
programming guide are good resources for learning about the details.
3.- If you have a task posted, could you post the same task other
time? We mean if we have a task in the task qeue, could we post the
same task again? Perhaps it is a simple question, but we think it
is possible that if the task is in the task qeue, we couldn't post
it again.
This depends on what version of TinyOS you're using. In 1.x, a
single task can have multiple outstanding posts in the task queue. In
2.x, a task can only have one outstanding post. This latter behavior
turns out to have a lot of nice isolation and fairness properties.
TEP 106 has a good discussion of the tradeoffs.
Phil
_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help