Как использовать linkaddr_set_node_addr (linkaddr_t * addr) в Contiki с Unicast - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь использовать эту функцию для установки узла, который отправляет пакет другому узлу в коде одноадресной передачи, но эта функция не работает, в чем проблема? Не могли бы вы мне помочь ! Я хочу topo 2 узел, который требует: Если узел 2 получил пакет от узла 1, тогда узел 2 отправляет пакет ACK на узел 1, чтобы объявить, что узел 2 получил пакет от узла 1. Я использую одноадресную программу в contiki. Я использую функцию linkaddr_set_node_addr (linkaddr_t * addr), чтобы настроить узел 1 на отправку пакета, но эта функция не работает, может кто-нибудь мне помочь, пожалуйста. Это мой код:

    linkaddr_t addr;
    addr.u8[0]=2;
    addr.u8[1]=0;
    packetbuf_copyfrom("GINDBK",5);
    unicast_send(&uc,&addr);
    if (linkaddr_node_addr.u8[0]==1 && linkaddr_node_addr.u8[1]==0)
    {
        linkaddr_t addr;
        addr.u8[0]=2;
        addr.u8[1]=0;
        linkaddr_set_node_addr(&addr);
        packetbuf_copyfrom("ACK",20);
        addr.u8[0]=1;
        addr.u8[1]=0;
        unicast_send(&uc,&addr);

    }

1 Ответ

0 голосов
/ 23 марта 2020

Я думаю, что проблема с присвоением адреса. Вы не можете просто присвоить значения байту адреса. Вместо:

linkaddr_t addr;
addr.u8[1] = 2;
addr.u8[0] = 0;
linkaddr_set_node_addr(&addr);

Назначьте значение для addr следующим образом:

linkaddr_t addr = {{2,0}};
linkaddr_set_node_addr(&addr);

и, если вы хотите sh, проверить, равны ли два адреса:

linkaddr_cmp(&addr, &addr2)
...