[Tinyos-devel] ctp vs other radio clients

Philip Levis pal at cs.stanford.edu
Sat Dec 6 08:52:53 PST 2008


On Dec 6, 2008, at 8:40 AM, Philip Levis wrote:

>
> On Dec 6, 2008, at 8:06 AM, Geoffrey Werner-Allen wrote:
>
>> Couldn't this happen if, as Brany suggests, another component is
>> using the radio stack?  I've also used CTP with other protocols
>> (including FTSP) and recall seeing it hit this corner. We were
>> implementing reliability at a higher level so it wasn't fatal, but I
>> believe I tracked it down to CTP trying to forward a packet while
>> FTSP broadcast messages were being sent. With LPL these occupy the
>> stack for a potentially long period of time (half a second at our
>> duty cycle), and so the chances of DefaultLPLP.nc returning BUSY
>> from Send.send() was pretty high. (I believe the default FTSP
>> traffic rate is one global message / 10 seconds, so using a sleep
>> interval of 1/2 second this means that you have a 1/20 chance of
>> colliding with a FTSP broadcast message.)
>>
>> Best,
>
> No. Please read TEP 116. Each AMSenderC has a reserved slot in the AM
> transmit queue. AMSend.send returns EBUSY iff there is an outstanding
> AMSend.send. The text reads:
>
> The ``Send`` and ``AMSend`` interfaces have an explicit queue of
> depth one.
>
> The implementation:
>
>     command error_t Send.send[uint8_t clientId](message_t* msg,
>                                                 uint8_t len) {
>         if (clientId >= numClients) {
>             return FAIL;
>         }
>         if (queue[clientId].msg != NULL) {
>             return EBUSY;
>         }
>
> Of course, a very busy link layer causes longer delays between send
> and sendDone, such that it's more likely the higher layer will issue a
> second send before the sendDone comes in. But if it hasn't called
> send(), then it should not get EBUSY.

NB:

If the underlying AM layer can return EBUSY when there is no  
outstanding packet transmission (no pending sendDone), then this could  
occur (AMQueueImpl.nc:110). This might also make sense given Brano's  
earlier observation that adding the retransmit timer solved the  
problem. So I'm going to look into the CC2420 stack. It would also  
explain why the problem occurs on motes but not in TOSSIM.

Phil


More information about the Tinyos-devel mailing list