#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'我有一台英特尔机器。为什么TOSSIM无法运行汇编语言指令?
发布于 2015-01-14 02:10:57
首先,sbrc、sbi等都是AVR汇编指令,所以英特尔机器不能执行它们。
然而,TOSSIM不能也不能运行与真实节点相同的依赖于平台的组件。这些组件使用微控制器的寄存器来控制IO引脚、处理硬件中断、通过SPI等总线与外部外设通信等。除了无线传感器网络:想象一下,您有一个应用程序,可以从连接到PC的相机拍摄照片,然后打印出来。在没有相机和打印机的情况下,您如何模拟此类应用程序的执行?
TOSSIM实际做的是,它通过用模拟实现替换组件来工作(参见documentation)。与我之前提到的PC应用程序相比,TOSSIM的工作原理是将某些硬件组件,如打印机和摄像头,替换为模拟其行为的软件模块,即所谓的模拟。然后,应用程序与这样的软件模块通信,而不是与实际硬件通信,这允许在没有物理硬件的情况下测试应用程序逻辑的更高层。
然而,这种方法需要实现软件模拟,这有时并不一定容易。据我所知,TOSSIM平台是唯一支持TinyOS的平台,它附带了一些模拟模块。您可以在名为sim的目录中找到它们。例如,tos/platforms/micaz/chips/ CC2420 /sim/包含用于CC2420无线电芯片的模拟,而tos/chips/ ATM128 /timer/sim/包括用于ATM128微控制器上可用的硬件定时器的模拟。
在TinyOS中,当使用命令make micaz sim进行编译时,通过在所有包含路径前加上以/sim结尾的包含路径,将自动使用模拟组件,而不是真正的实现( TinyOS构建系统总是选择第一个匹配的组件)。
不幸的是,似乎没有针对闪存驱动程序的模拟,因此不可能在模拟中使用闪存。您需要一个MICAz微尘来测试您的应用程序。TOSSIM主要用于与无线电相关的模拟,因为这样的实验不总是容易在真实环境中执行,并且其结果可能是不确定的,这阻碍了问题的再现和应用程序的调试。
https://stackoverflow.com/questions/27898101
复制相似问题