Управление буфером для контики

Я работаю со спутником TelosB, и мы пытаемся отправить два разных пакета (строки) из одного мотка, и пытаемся получить и напечатать обе строки в другом моте, но на стороне получателя он получает только одну строку. Я не могу понять, почему не печатается вторая строка? это проблема с буфером или что-то еще?

#include "contiki.h"
#include "net/rime.h"

#include "dev/button-sensor.h"
//#include "powertrace.h"
#include "dev/leds.h"
#include "net/queuebuf.h"
#include <stdio.h>
#include "net/packetbuf.h"
#define QUEUEBUF_NUM 8

/*---------------------------------------------------------------------------*/
PROCESS(example_unicast_process, "Example unicast");
AUTOSTART_PROCESSES(&example_unicast_process);
/*---------------------------------------------------------------------------*/
static void
recv_uc(struct unicast_conn *c, const rimeaddr_t *from)

{
  static struct queuebuf *queuebuf;
  void queuebuf_init(void);
  queuebuf = queuebuf_new_from_packetbuf();
  queuebuf_to_packetbuf(queuebuf);
  printf("unicast message received from %d.%d: '%s'\n",
     from->u8[0], from->u8[1],(char *)queuebuf_dataptr(void static struct queuebuf *b));

  printf("unicast message received from %d.%d: '%s'\n",
     from->u8[0], from->u8[1],(char *)packetbuf_dataptr());


}
static const struct unicast_callbacks unicast_callbacks = {recv_uc};
static struct unicast_conn uc;
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(example_unicast_process, ev, data)
{
  PROCESS_EXITHANDLER(unicast_close(&uc);)

  PROCESS_BEGIN();
  //powertrace_start(CLOCK_SECOND * 2);
  unicast_open(&uc, 146, &unicast_callbacks);






  while(1) {
    static struct etimer et;
    rimeaddr_t addr;

    etimer_set(&et, CLOCK_SECOND*10);

    PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

    packetbuf_copyfrom("Hello", 6);
    addr.u8[0] = 4;
    addr.u8[1] = 0;

      printf("unicast message sent to %d.%d: '%s'\n",
     addr.u8[0], addr.u8[1],(char *)packetbuf_dataptr());

    etimer_set(&et, CLOCK_SECOND*11);

    PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

    packetbuf_copyfrom("norway",7);

    addr.u8[0] = 4;
    addr.u8[1] = 0;
   printf("unicast message sent to %d.%d: '%s'\n",
    addr.u8[0], addr.u8[1],(char *)packetbuf_dataptr());

    //leds_toggle(LEDS_BLUE);
    if(!rimeaddr_cmp(&addr, &rimeaddr_node_addr)) {
      unicast_send(&uc, &addr);
    }

  }


  PROCESS_END();
}

0 ответов

Другие вопросы по тегам