我如何发送消息到另一个程序,并输出已收到的消息?

时间:2019-01-27 21:54:57

标签: c contiki

在contiki中,我需要有两个文件,即发送方和接收方,发送方将数据包发送到接收方。我的问题是,接收方没有输出已接收到数据包。

我在接收数据包中尝试了一个while循环,甚至尝试创建一个函数,但仍然没有任何效果。

我的sender.c文件

#include "contiki.h"
#include "net/rime.h"
#include "random.h"
#include "dev/button-sensor.h"
#include "dev/leds.h"

#include <stdio.h>

PROCESS(sendReceive, "Hello There");
AUTOSTART_PROCESSES(&sendReceive);

PROCESS_THREAD(sendReceive, ev, data)
{
    PROCESS_BEGIN();
    static struct abc_conn abc;
    static struct etimer et;
    static const struct abc_callbacks abc_call;
    PROCESS_EXITHANDLER(abc_close(&abc);)


  abc_open(&abc, 128, &abc_call);

  while(1) 
 {

/* Delay 2-4 seconds */
etimer_set(&et, CLOCK_SECOND * 2 + random_rand() % (CLOCK_SECOND * 2));

PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

packetbuf_copyfrom("Hello", 6);
abc_send(&abc);
printf("Message sent\n");
  }

  PROCESS_END();
}

我的receive.c文件

#include "contiki.h"
#include "net/rime.h"
#include "random.h"
#include "dev/button-sensor.h"
#include "dev/leds.h"

#include <stdio.h>

PROCESS(sendReceive, "Receiving Message");
AUTOSTART_PROCESSES(&sendReceive);

PROCESS_THREAD(sendReceive, ev, data)
{
    PROCESS_BEGIN();
{
  printf("Message received '%s'\n", (char *)packetbuf_dataptr());
}
    PROCESS_END();
}

sender.c文件正在运行,正在正确发送数据包,问题是接收者似乎未输出已接收到的信息。

1 个答案:

答案 0 :(得分:0)

虽然发送很简单-您只需要调用一个函数-但在嵌入式系统中接收数据通常更为复杂。操作系统需要一种方法让您的代码知道新数据已从外部到达。在Contiki中,这是在事件内部完成的,从用户的角度来看,是通过回调完成的。

因此,实现一个回调函数:

static void
recv_from_abc(struct abc_conn *bc)
{
  printf("Message received '%s'\n", (char *)packetbuf_dataptr());
}

在接收器进程中,通过将回调函数的指针作为参数传递来创建并打开连接:

static struct abc_conn c;
static const struct abc_callbacks callbacks =
    {recv_from_abc, NULL};
uint16_t channel = 128; /* matching the sender code */
abc_open(&c, channel, &callbacks);