背景知識:
節點 主要由 微處理芯片 和 無線射頻芯片 組成
Mica2: Atmega128L CC1000
Micaz: Atmega128L CC2420
telos: MSP430 CC2420
芯片代碼存於tos/chips目錄或平臺子目錄裏。一個平臺通常有一個.platform文件,其中包含有nesC語言的編譯選項。例如,Mica2平臺的.platform文件會告訴ncc編譯器在chips/cc1000和chips/atm128目錄裏尋找所需文件。
之前節點一直無法接收消息的原因是:未定義預處理器符號CC1K_DEFAULT_FREQ ,即沒有定義CC1000無線射頻芯片的默認頻率。
該符號在文件/opt/tinyos-2.1.2/tos/chips/cc1000/CC1000Const.h中
具體解決方法如下:
方法1:每次make的時候,加上編譯選項-DCC1K_DEFAULT_FREQ,即在某一app目錄(如BlinkToRadio)下輸入以下命令:
CFLAGS=-DCC1K_DEFAULT_FREQ make mica2 install.1 mib520,/dev/ttyUSB0
方法2:由於每次烤程序都需要輸入一長串命令,故可在/opt/tinyos-2.1.2/support/make/Makedefaults 文件中添加如下語句:
MIB520 ?= /dev/ttyUSB0
PFLAGS = -DCC1K_DEFAULT_FREQ
PFLAGS選項定義了C語言預處理符號CC1K_DEFAULT_FREQ,並會在程序編譯時傳遞給nesC編譯器;選項MIB520設定了編程器MIB520燒錄程序時的相關參數值,即
make mica2 install mib520
相當於
make mica2 install mib520,/dev/ttyUSB0
以上忽略了節點的ID,實際燒錄時要在install後加上節點ID。
缺點是,如果編程板的端口改變了,需要改動文件內容,將ttyUSB0改爲ttyUSBn
因此,現在每次燒錄程序時只要輸入以下命令即可:
make mica2 install.n mib520
(n代表節點編號,在實際輸入時用數字1,2,3...代替)