2014-03-05 72 views
0

我正在學習THIS tinyos的教程,我想試試看。我嘗試創建數據包,但它給了我以下錯誤。我不知道什麼是錯的。這可能很簡單,但我無法弄清楚它是什麼。創建數據包時編譯錯誤

#include "TestMsg.h" 
    ... 
     event void AMControl.startDone(error_t error) { 
      if (error == SUCCESS) { 
       call Leds.led0On(); 

       //create packet 
       TestMsg_t* msg = call Packet.getPayload(&packet, sizeof(TestMsg_t)); 
       msg->NodeID = TOS_NODE_ID; 
    //   
    //   //TODO in the meantime this can change 
    //   button_state_t val = call Get.get(); 
    //   msg->Data = (val == BUTTON_PRESSED ? 1 : 0); 
    //   
    //   //send packet 
    //   if (call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(TestMsg_t)) == SUCCESS) { 
    //    radioBusy = TRUE; 
    //   } 
      } else { 
       call AMControl.start(); 
      } 
     } 
    ... 

這裏是TestMsg.h

#ifndef TEST_MSG_H 
#define TEST_MSG_H 

typedef nx_struct _TestMsg { 
    nx_uint16_t NodeID; 
    nx_uint8_t Data; 
} TestMsg_t; 

enum { 
    AM_RADIO = 6 
}; 

#endif /* TEST_MSG_H */ 

Here是它在視頻

錯誤聲明的一部分,我明白這一點:

In file included from /home/advanticsys/ws/TestRadio/src/TestRadioAppC.nc:5: 
In component `TestRadioC': 
/home/advanticsys/ws/TestRadio/src/TestRadioC.nc: In function `AMControl.startDone': 
/home/advanticsys/ws/TestRadio/src/TestRadioC.nc:43: syntax error before `*' 
/home/advanticsys/ws/TestRadio/src/TestRadioC.nc:44: `msg' undeclared (first use in this function) 
/home/advanticsys/ws/TestRadio/src/TestRadioC.nc:44: (Each undeclared identifier is reported only once 
/home/advanticsys/ws/TestRadio/src/TestRadioC.nc:44: for each function it appears in.) 

更新

結構和標題有問題。

#include "Szar.h" 
#include "BarType.h" 

module SzarP { 
    uses interface Boot; 
    uses interface Leds; 
} 

implementation { 

    event void Boot.booted() { 
     // TODO Auto-generated method stub 
     call Leds.led0On(); 

     Szar_t foo; 
     Szar_t *szar = &foo; 

     BarType_t barVar; 
     barVar.data = 0; 
     BarType_t *pBarVar = &barVar; 
     pBarVar->data = 1; 

    } 
} 

這裏是2個頭文件。

#ifndef SZAR_H 
#define SZAR_H 

typedef nx_struct _Szar { 
    nx_uint8_t szar1; 
    nx_uint16_t szar2; 
} Szar_t; 

#endif /* SZAR_H */ 


#ifndef BAR_TYPE_H 
#define BAR_TYPE_H 

typedef struct _BarType { 
    uint8_t id; 
    uint32_t data; 
} BarType_t; 

#endif /* BAR_TYPE_H */ 

而且錯誤:

In file included from /home/advanticsys/ws/Szar/src/SzarAppC.nc:6: 
In component `SzarP': 
/home/advanticsys/ws/Szar/src/SzarP.nc: In function `Boot.booted': 
/home/advanticsys/ws/Szar/src/SzarP.nc:15: syntax error before `foo' 
/home/advanticsys/ws/Szar/src/SzarP.nc:19: `barVar' undeclared (first use in this function) 
/home/advanticsys/ws/Szar/src/SzarP.nc:19: (Each undeclared identifier is reported only once 
/home/advanticsys/ws/Szar/src/SzarP.nc:19: for each function it appears in.) 
/home/advanticsys/ws/Szar/src/SzarP.nc:20: syntax error before `*' 
/home/advanticsys/ws/Szar/src/SzarP.nc:21: `pBarVar' undeclared (first use in this function) 
+0

這是C嗎? 'event AMControl.startDone(error_t error)'中的'event'是什麼? –

+0

你是如何編譯這個的? – Floris

+0

它類似於C但有一些額外的語法 –

回答

0

由於一些奇怪的原因,我必須聲明函數外的每個變量,然後它的作品。例如:

bool radioBusy = FALSE; 
message_t packet; 
TestMsg_t *messageToSend; 
button_state_t buttonState; 

event void AMControl.startDone(error_t error) { 
    if (error == SUCCESS) { 
     call Leds.led0On(); 

     messageToSend = call Packet.getPayload(&packet, sizeof(TestMsg_t)); 
     messageToSend->NodeID = TOS_NODE_ID; 

     //TODO in the meantime this can change 
     buttonState = call Get.get(); 
     messageToSend->Data = (buttonState == BUTTON_PRESSED ? 1 : 0); 

     //send packet 
     if (call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(TestMsg_t)) == SUCCESS) { 
      radioBusy = TRUE; 
     } 
    } else { 
     call AMControl.start(); 
    } 
} 

如果我在函數/事件/命令的開頭聲明我的變量沒有任何代碼,它也可以工作。