[Tinyos Core WG] SchedulerBasic

Martin Leopold leopold at diku.dk
Mon Feb 5 16:47:20 PST 2007


Hi All.
I seem to be having a problem with a simple test program (for my cc2430
platform). I don't have any tasks and I echo a char back over the UART
in interrupt context. If I loop forever in say in Boot.booted all is
dandy, but if I let the system boot all the way, I don't seem to get to
my interrupt handler.

If I'm not mistaken, what happens after the system boots is, that it
ends up in the taskLoop (below). If I'm reading this correctly then my
system will loop here forever with no help of recovery since interrupts
are off. 

Am I missing something obvious here or what? To me this doesn't seem
right - sleep is called with interrupts off and there is no way to post
a new task from an interrupt.


command void Scheduler.taskLoop() {
...
 atomic {
   while ((nextTask = popTask()) == NO_TASK)    {
      call McuSleep.sleep();
   }
 }

If I look at the old "TOSH_run_next_task" from 1.x interrupts would be
turned on in between calls to __nesc_atomic_sleep():

  void TOSH_run_task() {
    for (;;) TOSH_run_next_task();
  }

  bool TOSH_run_next_task () {
    ...
    fInterruptFlags = __nesc_atomic_start();
     ...
    __nesc_atomic_end(fInterruptFlags);
    ...
    func();
    return 1;
  }

-- 
Regards Martin Leopold.
Dept. of Computer Science, University of Copenhagen
http://www.diku.dk/~leopold





More information about the Tinyos-2.0wg mailing list