Are you using the passing the same TOS_Msg into QueuedSend each time?
QueuedSend only stores pointers to messages to queue up. So if you really
want to write more than one message at once, I think you have to be writing
to more than one TOS_Msg. I've only rarely used QueuedSend, so someone can
correct me if I'm wrong. But I think you may be mangling the send data
while it's being sent.
Here's something you may be interested in... I uploaded a Transceiver
component to tinyos-1.x/contrib/rincon/tos/lib that provides the
functionality you are probably looking for.
This Transceiver component combines the functionality of GenericComm,
UARTComm, AMStandard, and QueuedSend into one clean, compact component.
It's a single interface to use to send/receive messages over Radio and UART
while decreasing RAM consumption for applications by providing a circular
buffer of TOS_Msg's set at compile time. Said another way, each component
in your application that sends messages doesn't need to allocate its own
TOS_Msg.
Read the README.txt in that contrib/rincon/tos/lib directory for more
information, and there are example implementations provided in
/contrib/rincon/apps
* Example usage:
* <code>
* TOS_MsgPtr *tosPtr; // global
* YourStruct *yourStruct; // global
*
* // Easy way to allocate and initialize a message for
* // your whole application:
* result_t newMessage() {
* if((tosPtr = call Transceiver.requestWrite()) != NULL) {
* yourStruct = (YourStruct *) tosPtr->data;
* yourStruct->msgID = msgID++; // auto init example
* yourStruct->from = TOS_LOCAL_ADDRESS; // auto init example
* return SUCCESS;
* }
* return FAIL;
* }
*
* void sendSomethingOverRadio() {
* if(newMessage()) {
* // This AM type has a message allocated and initialized
* yourStruct->value = getCurrentReading(); // example.
* call Transceiver.sendRadio(TOS_BCAST_ADDR, sizeof(YourStruct));
* }
* }
*
* void sendSomethingOverUart() {
* if(newMessage()) {
* call Transceiver.sendUart(sizeof(YourStruct));
* }
* }
* </code>
-David
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Matthew S.
Nassr
Sent: Wednesday, March 08, 2006 11:44 AM
To: [email protected]
Subject: [Tinyos-help] QueuedSend deadlock problem update
In a previous message I assumed that my QueuedSendM in tos/lib/Queue
wasn't working because the queue was full. This is not true. It can
happen regardless of where the pointer to the circular queue is, and it
seems to happen when a rapid succession of Sends are called. Has anyone
else had this problem? I have a feeling that I will need to make
QueuedSendDone asynchronous, but that's a wild guess. I could understand
if a message here and there failed to send, but the deadlock is a
horrible issue.
-Matthew Nassr
--
Matthew S. Nassr <[EMAIL PROTECTED]>
_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help