当前位置: 首页 > 知识库问答 >
问题:

通过Z1 mote上的Cooja接收UART消息

王涵育
2023-03-14

我目前正在开发一个在Z1设备上运行的contiki程序,用于调试目的。我想向该设备发送通用异步收发设备消息,并发现Cooja似乎通过一个名为“在Z1上显示串行端口”的功能来支持它。该工具实际上帮助我读取从mote发送的通用异步收发设备消息,但当我尝试发回某些内容时,Int处理程序就不会被调用。以下是我如何在代码中初始化通用异步收发设备:

uart0_init(0);
uart0_set_input(uart_handler);
uart0_writeb('U');

在处理程序本身中,我只切换所有LED(这肯定有效)-但是,它们从来没有切换过。我甚至尝试在uart0库中的ISR处理程序中发送一个字节,但即使是这个字节也从未被发送。这意味着Cooja和Z1 mote之间的整个UART通信似乎无法正常工作。有没有人曾经遇到过同样的问题,并且能够为我提供解决方案?这将是一个很大的帮助!

共有1个答案

欧奇希
2023-03-14

同时我也设法弄明白了。对于任何面临同样问题的人,这里都有一个解决方案。以下代码有效。根据您是否定义USE\u SERIAL\u LINE,您可以决定是使用SERIAL LINE模块还是您自己的int处理程序。

#include <stdio.h>
#include <string.h>
#include "contiki.h"
#include "contiki-net.h"
#include "dev/uart0.h"


#define USE_SERIAL_LINE

#ifdef USE_SERIAL_LINE
#include "dev/serial-line.h"
#endif


PROCESS(init_system_proc, "Init system process");
AUTOSTART_PROCESSES(&init_system_proc);

int uart_handler(unsigned char c){
    printf("Single Byte input.\n");
    return 1;
}

PROCESS_THREAD(init_system_proc, ev, data){
        PROCESS_BEGIN();
        uart0_init(0);
#ifdef USE_SERIAL_LINE
        serial_line_init();
        uart0_set_input(serial_line_input_byte);
#else
        uart0_set_input(uart_handler);
#endif

        while (1) {
            PROCESS_YIELD();
#ifdef USE_SERIAL_LINE
        if(ev == serial_line_event_message)
            printf("Serial input.\n");
#endif
    }
    PROCESS_END();
}

在使用printf进行UART输出时,需要记住一件事。UART消息只有在出现“\n”时才会发送-这意味着每个printf语句都应该以新行字符结尾。否则,字符串只会在出现新行字符时进行缓冲并发送。

 类似资料:
  • 嗨,我是Kafka的新手,我有一个快速的问题。 我实现了一个kafka生产者和消费者zookeeper和生产者在另一个服务器(192.168.10.233)中运行,消费者在另一个服务器(192.168.10.234)中运行,两者都是本地连接的 我还从外面查了192.168.10.233:9092,港口是否没有被任何东西堵塞。

  • 我有一个超时选项,只想在超时前接收消息。 如果您能解释下面的代码是如何工作的,以及我如何修改下面的代码以在特定的时间框架内接收消息,并且一旦我的超时已经到达就停止接收,这将是很有帮助的。

  • null 我遵循Xamarin的文档实现了这个功能。 然后一步一步地执行,直到下面的部分: 后台通知 我点击了Log Token按钮并收到了令牌。 null Firebase控制台显示消息为“完成”。 我错过了什么来解决这个问题?

  • 我正在尝试用snmp V3实现一个简单的NMS。2 api。目标是通过TCP接收SNMP通知。 问题是我只通过UDP接收通知。。。我用SNMP4J API在java中实现了一个代理,但只有通过UDP发送时才起作用。 我已经搜索了一些示例,但我只找到了代理通过UDP向snmp管理器发送陷阱/通知的示例。。。。 我还发现:http://lists.agentpp.org/pipermail/agent

  • 通过http发送消息后。我无法在android设备4.0版上接收消息。4.当调试已启用但意图执行操作com时,它将触发OnReceive()方法。谷歌。Androidc2dm。意图注册,应该是com。谷歌。Androidc2dm。意图接收所以我无法得到消息。Rest一下,一切正常。 我的Android。清单文件代码为 和BroadCastRecector文件,其中OnRecve()方法在发送消息后

  • 我正在尝试使用Firebase Notification Composer向我的设备发送测试通知。我正在接收FCM令牌并将其打印到我的控制台,然后尝试向该令牌发送通知。 以下是我检查过的内容: 1) 我使用的是iOS 12.4.1 2) 我正在分配消息传递代理 3)我从委托方法接收FCM令牌 4) 我已经验证了通知是通过打印到控制台启用的,当提示我允许通知时,我单击了允许 5) 我已经验证了在Fi