0

模块不通过UART接收数据,帮助TinyOS

发布者 Telosb » 2014 年 7 月 15 日星期二 6:47

亲爱的会员,

我是 tinyos 编程的新手。我正在与 KMoteB 合作:

http://www.tinyosmall.com/product_p/100-101.htm

我使用 YETI2 插件和 TinyOS 编译器。

问题是,如果我通过串行接口通过 printf 将数据发送到计算机,我能够接收到已发送的数据。另一方面,PC 到 Mote 通信不起作用。RX LED 亮起,但数据,例如通过 ubuntu 发送的 'u' 不会触发接收事件。

    event message_t* UartReceive.receive(message_t* bufPtr, void* payload, uint8_t len)
    {
        call Leds.led2On();
        printf("Receive\n");
        printfflush();
        return bufPtr;
    }

我正在尝试实施此代码:

http://embedntks.com/tinyos-uart-sending-raw-data/

有谁知道问题可能出在哪里?

4

1 回答 1

0

如何将数据从 PC 发送到 mote?根据您的描述,我假设您只是使用 minicom 应用程序发送原始字节。这种方法行不通。TinyOS 将只接收包含标头、有效负载和页脚的整个数据包。要发送此类,您需要在 PC 端编写 Java 应用程序。查看本教程中的“Mote-PC 通信”一章:http: //csl.stanford.edu/~pal/pubs/tos-programming-web.pdf

另一个问题是您将 Receive 接口与 printf 函数一起使用。上述教程指出“从 PC 发送到 mote 的数据包由 mote 确认”。当然,它们也使用串行通信得到确认。这可能会导致这样的问题:TinyOS PrintfClient 必须接收和处理 printf 数据,而您的 java 应用程序必须接收和处理确认。根据我的经验,如果您在应用程序中使用 printf,则不能使用串行通信堆栈,因为 PrintfC 模块拥有并使用它。当接收事件发生时,您可以将自定义数据包发送到 PC,并由 Java 应用程序处理它们。

于 2014-07-31T17:24:08.500 回答