Subject:
|
Swan scheduling bug?
|
Newsgroups:
|
lugnet.robotics.rcx
|
Date:
|
Thu, 22 Sep 2005 14:06:42 GMT
|
Viewed:
|
4690 times
|
| |
| |
I'm starting to use the swan firmware and I'm having a problem with the
scheduling. It seems like a task with a long wait does not yield properly to
other tasks. Here the NQC code sample:
task taska()
{
WaitMS(150);
AddToDatalog(9900);
}
task main()
{
CreateDatalog(100);
ClearTimer(0);
start taska;
repeat(5) {
AddToDatalog(FastTimer(0));
WaitMS(50);
}
}
This gives the following datalog:
Variable 1: 0
Variable 2: 9900
Variable 1: 15
Variable 1: 20
Variable 1: 25
Variable 1: 30
Notice that task main yielded at the first wait in the loop but taska did not
yield at its wait so the rest of task main did not get a chance to run until
taska finished.
I found one workaround. If I replace the long wait with short wait inside a
repeat loop then it yields properly. Like this:
task taska()
{
repeat(3) {
WaitMS(50);
}
AddToDatalog(9900);
}
With this code I get the following, correct datalog:
Variable 1: 0
Variable 1: 5
Variable 1: 10
Variable 2: 9900
Variable 1: 15
Variable 1: 20
Gus Jansson
|
|
1 Message in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|