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 文件时,我会收到类似的错误

 /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 无法运行汇编语言指令?

4

1 回答 1

1

首先,sbrcsbi等是 AVR 汇编指令,因此 Intel 机器无法执行它们。

尽管如此,TOSSIM 不会也不能运行与真实节点相同的平台相关组件。此类组件使用微控制器的寄存器来控制 IO 引脚、处理硬件中断、通过 SPI 等总线与外部外围设备通信。除了无线传感器网络:假设您有一个应用程序从插入 PC 的相机拍摄照片然后打印它。如果没有相机和打印机的物理占有,您将如何模拟此类应用程序的执行?

TOSSIM 实际上所做的是,它通过用模拟实现替换组件来工作(参见文档)。与我之前提到的 PC 应用程序相比,TOSSIM 的工作原理是将某些硬件组件(例如打印机和相机)替换为模拟它们行为的软件模块,即所谓的mocks。然后应用程序与这些软件模块而不是真正的硬件进行通信,这允许在没有物理硬件的情况下测试应用程序逻辑的更高层。

然而,这种方法需要实现软件模拟,这有时并不容易。TinyOS micaz平台,据我所知,是唯一支持 TOSSIM 的平台,带有一些模拟模块。您可以在名为sim的目录中找到它们。例如,tos/platforms/micaz/chips/cc2420/sim/包含 CC2420 无线电芯片的模拟,而tos/chips/atm128/timer/sim/包括 ATM128 微控制器上可用的硬件计时器的模拟。

在 TinyOS 中,使用命令编译时make micaz sim,会自动使用模拟组件而不是实际实现,方法是在所有包含路径之前加上包含路径以结尾/sim(TinyOS 构建系统总是选择第一个匹配的组件)。

不幸的是,闪存驱动程序似乎没有模拟,因此无法在模拟中使用闪存。您需要有一个 MICAz 微尘来测试您的应用程序。TOSSIM 主要用于无线电仿真,因为此类实验并非总是在真实环境中轻松进行,而且其结果可能不确定,这会阻碍重现问题和调试应用程序。

于 2015-01-13T18:10:57.273 回答