#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文件时,我会收到类似
的错误 /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'
我有一台Intel机器。为什么TOSSIM无法运行汇编语言指令?
答案 0 :(得分:1)
首先,sbrc
,sbi
等是AVR汇编程序指令,因此Intel计算机无法执行它们。
尽管如此,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主要用于有关无线电的模拟,因为这些实验不能总是在真实环境中轻松完成,其结果可能是不确定的,阻碍了再现问题和调试应用。