2013-01-09 2 views
0

의사 코드;TinyOS, 마우스를 다시 시작한 후 패킷을받을 수 없습니다.

  1. 1 부팅 보내기 (녹색 빛)

  2. 같이 따라 주도 패킷 세트를 디코딩, 패킷을 수신을 완료 한 후

  3. 는 패킷을 방송 (적색 LED) (파란색 설정)

  4. 이 완료 (녹색 LED 세트)
  5. 이 패킷을 수신하여 디코딩 한 세트로서 적절했다 보낼 코딩 한 후 패킷을 브로드 캐스트 (7 (적색 세트 +) 청색 + 녹색)

이 단계 후에 mote 1은 LED가됩니다. set (7) 및 mote 2는 LED입니다. set (2) [mote 1이 (가) 전송을 시작했습니다.] 아주 미세하게 작동합니다. 내가 티끌 하나를 다시 시작할 때 그러나 당신은 두 개의 수신기를

implementation{ 
bool busy = FALSE; 
message_t pkt; 
message_t i_pkt; 
event void Boot.booted() { 

    call Leds.set(1); 
    call AMControl.start(); 
    printf("Booted %d\n",1); 
    call CC2420Packet.setPower(&pkt, 20); 
    call CC2420Packet.setPower(&i_pkt, 2); 
} 

event void Timer0.fired() { 

    if (!busy) { 
     FindRoute_t *btrpkt = (FindRoute_t*)(call Packet.getPayload(&pkt, sizeof (FindRoute_t))); 

     btrpkt->counter = 4; 
     if (call firstsender.send(AM_BROADCAST_ADDR, &pkt, sizeof(FindRoute_t)) == SUCCESS) { 
     busy = TRUE; 
     } 
    } 

} 


event void AMControl.startDone(error_t err) { 
    if (err == SUCCESS) { 
     call Timer0.startOneShot(250); 
    } 
    else { 
     call AMControl.start(); 
    } 
} 

event void AMControl.stopDone(error_t err) { 
} 

event void firstsender.sendDone(message_t *msg, error_t error) { 
    if (&pkt == msg) { 
     call Leds.set(2); 
     busy = FALSE; 
    } 
} 

event message_t* firstreceiver.receive(message_t* msg, void* payload, uint8_t len) { 
    if (len == sizeof(FindRoute_t)) { 
     FindRoute_t* btrpkt = (FindRoute_t*)payload; 
     call Leds.set(btrpkt->counter); 

     call Timer1.startOneShot(3000); 
    } 
    return msg; 
} 


    event void Timer1.fired(){ 

    if (!busy) { 
     FindRoute_t *btrpkt = (FindRoute_t*)(call Packet.getPayload(&i_pkt, sizeof (FindRoute_t))); 

     btrpkt->counter = 7; 
     if (call nextsender.send(AM_BROADCAST_ADDR, &i_pkt, sizeof(FindRoute_t)) == SUCCESS) { 
     busy = TRUE; 
     } 
    } 
    } 
    event void nextsender.sendDone(message_t *msg, error_t error) { 
    if (&i_pkt == msg) { 
     call Leds.set(2); 
     busy = FALSE; 
    } 
} 

    event message_t* nextreceiver.receive(message_t* msg, void* payload, uint8_t len) { 
    if (len == sizeof(FindRoute_t)) { 
     FindRoute_t* btrpkt = (FindRoute_t*)payload; 
     call Leds.set(btrpkt->counter); 
    } 
    return msg; 
} 

답변

1

) 패킷을 수신 할 수 할 수없는 의사와 티끌이 2 단계까지 작동합니다. 그들은 두 개의 서로 다른 수신 모듈에 연결되어 있습니까? 그렇지 않은 경우, 수신 된 패킷은 두 수신 이벤트 모두를 트리거하며, 이는 약간의 문제를 야기 할 수 있습니다.

관련 문제