Thank you for explaining this, does this apply to other platforms
(telosb/micaZ) too?  

I personally think that it is better for TinyOS to unify that: the routine
inside "async command/event" should be same as routine in "atomic" ---
interrupt is disabled. So that user can develop a predictable system. If an
event/command is interrupt-enabled, let's not use "async" keyword. 

Otherwise, probably very few people know such difference -- not good for
this community

-----Original Message-----
From: Philip Levis [mailto:[EMAIL PROTECTED] 
Sent: Friday, September 08, 2006 9:24 AM
To: Adam
Cc: 'jose m'; tinyos-help@Millennium.Berkeley.EDU
Subject: Re: Rv: Re: [Tinyos-help] Interrupts and async events question

On Sep 8, 2006, at 9:16 AM, Adam wrote:

> Thanks for pointing out this. But I have traced UARTReceive.receive 
> up, the original interrupt is defined as this:

I was talking about the 2.x code.

Regardless, look at the 1.x UART code:

tos/platform/mica2/HPLUART0M.nc:

   TOSH_INTERRUPT(SIG_UART0_TRANS) {
     signal UART.putDone();
   }

   TOSH_SIGNAL(SIG_UART0_RECV) {
     if (inp(UCSR0A) & (1 << RXC))
       signal UART.get(inp(UDR0));
   }

Note that the receive interrupt is a SIGNAL, so has interrupts disabled
while it executes. In contrast, the transmit interrupt is an INTERRUPT, so
has interrupts enabled while it executes. The reason being that a reentrant
RX interrupt could cause bytes to be reordered (rate controlled by external
source), but as the TX interrupt handler is generally what triggers the next
interrupt to occur, making it reentrant isn't a big deal.

All of this is completely independent of tasks.

Phil

_______________________________________________
Tinyos-help mailing list
Tinyos-help@Millennium.Berkeley.EDU
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to