1

我完全迷失了使用 TinyOS,我想我需要一些帮助。

我有一个节点向所有听他的节点发送消息,所以,这个节点不时向他的所有“孩子”发送消息

event void Timer.fired() {
   call Read.read();
}

event void Read.readDone(error_t result, uint16_t data) {
   if (!busy) {
     Msg* localpkt = (Msg*) (call Packet.getPayload(&packet, sizeof(Msg)));
     if (localpkt == NULL) { return; }
     localpkt->data = data;
     if (call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(Msg)) == SUCCESS) {
       busy = TRUE;
     }
}

然后,我有接收方法(所有方法都在同一个 .nc 中)

event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len){
   if (len == sizeof(Msg)) {
     Msg* localpkt = (Msg*)payload;
     data = localpkt->data;
   }
   return msg;
}

当我发送消息时,父节点会收到他的孩子的消息,但是我怎么知道女巫孩子及时回复了呢?

例如,如果我有一位父亲为 3 个节点发送消息,我怎么知道有多少个节点回复了我,我怎么知道他的 ID?

我忘了说,父亲节点和孩子节点执行相同的代码,但是父亲充当“协调者”,所以我们必须不时向他的孩子发送消息。我正在使用 TOSSIM 来模拟这段代码。

提前致谢!

4

2 回答 2

1

如果我正确理解了您的问题,那么您正在寻找一种方法来使用广播在每个目的地的基础上获取数据包确认。我对 TinyOS 的体验有些有限,但就我现在而言,没有直接的方法可以做到这一点。

您可以尝试使用单播消息。因此,例如,您可以向您的应用程序添加额外的逻辑,这将使孩子在启动后首先通过只有协调器侦听的通道发送一些小数据包来“注册”协调器。Coordinator 会保存一份已注册的孩子列表,并一一发送消息给他们。这样,您可以使用tos.interfaces.PacketAcknowledgements来获取每个目的地的确认信息,并确定哪些孩子收到了他们的消息。

于 2013-06-05T00:56:41.473 回答
0

您的 Msg 数据包的结构是什么。请务必包含“uint_16 node_id”。并在 Receive.receive 方法中,将节点 ID 提取为 node_id = localpkt->node_id。node_id 是在 mica/telosb mote 的编译过程中分配的。

我希望这有帮助

于 2016-10-03T16:32:55.147 回答