2015-01-12 24 views
0
#define BITINIT \ 
    uint8_t clrClkAndData = PORTD & ~0x28 

#define BIT(n) \ 
    PORTD = clrClkAndData; \ 
    asm __volatile__ \ 
     ( "sbrc %2," #n "\n" \ 
    "\tsbi 18,3\n" \ 
    "\tsbi 18,5\n" \ 
    "\tsbic 16,2\n" \ 
    "\tori %0,1<<" #n "\n" \ 
    : "=d" (spiIn) : "0" (spiIn), "r" (spiOut)) 

我安裝了Ubuntu並使用了TOSSIM。一切正常編譯並正在運行。但是,當TOSSIM上執行的micaz文件HPLAt45dbIOP.nc,我得到這樣的錯誤使用模擬器將數據寫入閃存TOSSIM

/opt/tinyos-2.1.2/tos/platforms/micaz/chips/at45db/HplAt45dbIOP.nc: 

彙編消息:

/opt/tinyos-2.1.2/tos/platforms/micaz/chips/at45db/HplAt45dbIOP.nc:150: Error: no such instruction: `sbrc %cl,7' 
/opt/tinyos-2.1.2/tos/platforms/micaz/chips/at45db/HplAt45dbIOP.nc:151: Error: no such instruction: `sbi 18,3' 
/opt/tinyos-2.1.2/tos/platforms/micaz/chips/at45db/HplAt45dbIOP.nc:152: Error: no such instruction: `sbi 18,5' 
/opt/tinyos-2.1.2/tos/platforms/micaz/chips/at45db/HplAt45dbIOP.nc:153: Error: no such instruction: `sbic 16,2' 
/opt/tinyos-2.1.2/tos/platforms/micaz/chips/at45db/HplAt45dbIOP.nc:154: Error: no such instruction: `ori %dl,1<<7' 

我有一個英特爾機。爲什麼TOSSIM無法運行彙編語言指令?

回答

1

首先,sbrc,sbi等都是AVR彙編指令,所以英特爾機器不能執行它們。

儘管如此,TOSSIM並沒有也不能運行與真實節點相同的平臺相關組件。這些組件使用微控制器的寄存器來控制IO引腳,處理硬件中斷,通過總線(如SPI等)與外部外圍設備通信。除了無線傳感器網絡:想象一下,您有一個應用程序,可以將攝像頭的照片插入PC,然後打印它。如果沒有相機和打印機的物理擁有,你會如何模擬這種應用程序的執行?

TOSSIM實際上做了什麼,是它通過用模擬實現(請參閱documentation)替換組件來工作。與我之前提到的PC應用程序相比,TOSSIM通過用模擬它們的行爲的軟件模塊代替某些硬件組件(例如打印機和照相機)來工作,所謂的模擬。然後應用程序與這些軟件模塊進行通信而不是真正的硬件,這允許在沒有物理硬件的情況下測試更高層的應用程序邏輯。

然而,這種方法需要實施軟件模擬,有時不一定容易。 TinyOS micaz平臺,據我所知,它是唯一支持TOSSIM的平臺,附帶一些模擬模塊。您可以在名爲sim的目錄中找到它們。例如,tos/platforms/micaz/chips/cc2420/sim/包含用於CC2420無線電芯片的模擬和tos/chips/atm128/timer/sim/包含用於ATM128微控制器上硬件定時器的模擬。

TinyOS中,與命令make micaz sim編譯時,模擬組件自動用來代替實際實現方式中通過前述所有包括與路徑包括與/sim結束路徑(TinyOS的構建系統總是選擇的第一匹配部件)。

不幸的是,它似乎沒有模擬閃存驅動程序,所以它不可能在模擬中使用閃存。你需要有一個MICAz mote來測試你的應用程序。 TOSSIM主要用於有關無線電的模擬,因爲這樣的實驗在實際環境中不能總是很容易實現,其結果可能是不確定的,阻礙再現問題和調試應用程序。

+0

謝謝。無論如何,彙編代碼改變了 –

+0

你到底想要達到什麼目的? – maral

+0

我希望將傳感器收集的數據寫入閃存。爲此,我使用了BlockStorageC組件,我最初也面臨一個創建StorageVolumes.h文件的問題,我使用tos-storage-at45db命令手動解決了這個問題。我想知道,當TOSSIM模擬傳感器節點時,它是否也允許在模擬傳感器節點中存儲某種形式的數據,以便通過TOSSIM可以實現諸如在閃存上發送和存儲數據等任何實驗。錯誤出現在文件HPLat45dbIOP.nc –