Resource arbitration between CC2420 and Uart0 on Telosb
2008-06-30 23:32:51 GMT
Hello, guys,
I’m making a program which uses radio and uart0 on the telosb mote.
Since the radio and uart0 share bus on telosb, I had to deal with resource arbitration.
The thing is, when I made an uart0 manager like this, it dosen’t work.
More specifically, after some time, I never receive sendDone() signal after I send() and got a SUCCESS return value,
So the entire program is collapsed.
----------------------------------------------------------------------------------
task void requestTask()
{
call UartResource.request();
}
async event void UartRequested.requested()
{
UartResource.releaseTask();
post requestTask();
}
async event void UartRequested.immediateRequested()
{
UartResource.releaseTask();
post requestTask();
}
----------------------------------------------------------------------------------
I know it’s greedy, because everytime it releases, it requests again.
But as I know about CC2420 on telosb, it should work.
Anyway, I tried another case like following, and it works!
----------------------------------------------------------------------------------
event void RadioSend.sendDone[am_id_t id](message_t* msg, error_t error) {
post requestTask();
}
task void requestTask()
{
call UartResource.request();
}
async event void UartRequested.requested()
{
UartResource.releaseTask();
}
async event void UartRequested.immediateRequested()
{
UartResource.releaseTask();
}
----------------------------------------------------------------------------------
It seems much less greedy since it only tries to grab the resource after sendDone() has signaled.
Does anybody can answer me about the problem with case 1?
And in addition, why the CC2420 releases the resource between send() and sendDone()?
Thanks.
With Kind Regards,
Kirak
<div>
<div class="Section1">
<p class="MsoNormal">Hello, guys,<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">I’m making a program which uses radio and uart0 on the
telosb mote.<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">Since the radio and uart0 share bus on telosb, I had to deal
with resource arbitration.<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">The thing is, when I made an uart0 manager like this, it
dosen’t work.<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">More specifically, after some time, I never receive
sendDone() signal after I send() and got a SUCCESS return value, <p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">So the entire program is collapsed.<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">----------------------------------------------------------------------------------<p></p></p>
<p class="MsoPlainText"> task void requestTask()<p></p></p>
<p class="MsoPlainText"> {<p></p></p>
<p class="MsoPlainText"> call
UartResource.request();<p></p></p>
<p class="MsoPlainText"> }<p></p></p>
<p class="MsoPlainText"><p> </p></p>
<p class="MsoPlainText"> async event void UartRequested.requested()<p></p></p>
<p class="MsoPlainText"> {<p></p></p>
<p class="MsoPlainText">
UartResource.releaseTask();<p></p></p>
<p class="MsoPlainText"> post requestTask();<p></p></p>
<p class="MsoPlainText"> }<p></p></p>
<p class="MsoPlainText"><p> </p></p>
<p class="MsoPlainText"> async event void
UartRequested.immediateRequested()<p></p></p>
<p class="MsoPlainText"> {<p></p></p>
<p class="MsoPlainText">
UartResource.releaseTask();<p></p></p>
<p class="MsoPlainText"> post requestTask();<p></p></p>
<p class="MsoPlainText"><p> </p></p>
<p class="MsoPlainText"> }<p></p></p>
<p class="MsoNormal">----------------------------------------------------------------------------------<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">I know it’s greedy, because everytime it releases, it requests
again.<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">But as I know about CC2420 on telosb, it should work.<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">Anyway, I tried another case like following, and it works!<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">----------------------------------------------------------------------------------<p></p></p>
<p class="MsoPlainText"> <p></p></p>
<p class="MsoPlainText"> event void RadioSend.sendDone[am_id_t
id](message_t* msg, error_t error) {<p></p></p>
<p class="MsoPlainText"><p> </p></p>
<p class="MsoPlainText"> post
requestTask();<p></p></p>
<p class="MsoPlainText">}<p></p></p>
<p class="MsoPlainText"><p> </p></p>
<p class="MsoPlainText"> task void requestTask()<p></p></p>
<p class="MsoPlainText"> {<p></p></p>
<p class="MsoPlainText"> call
UartResource.request();<p></p></p>
<p class="MsoPlainText"> }<p></p></p>
<p class="MsoPlainText"><p> </p></p>
<p class="MsoPlainText"> async event void UartRequested.requested()<p></p></p>
<p class="MsoPlainText"> {<p></p></p>
<p class="MsoPlainText">
UartResource.releaseTask();<p></p></p>
<p class="MsoPlainText"> }<p></p></p>
<p class="MsoPlainText"><p> </p></p>
<p class="MsoPlainText"> async event void UartRequested.immediateRequested()<p></p></p>
<p class="MsoPlainText"> {<p></p></p>
<p class="MsoPlainText">
UartResource.releaseTask();<p></p></p>
<p class="MsoPlainText"> }<p></p></p>
<p class="MsoNormal">----------------------------------------------------------------------------------<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">It seems much less greedy since it only tries to grab the
resource after sendDone() has signaled.<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">Does anybody can answer me about the problem with case 1?<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">And in addition, why the CC2420 releases the resource
between send() and sendDone()?<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">Thanks.<p></p></p>
<p class="MsoNormal"><p> </p></p>
<p class="MsoNormal">With Kind Regards,<p></p></p>
<p class="MsoNormal">Kirak<p></p></p>
</div>
</div>
RSS Feed