Как управлять указателями при использовании инея в contiki?
Привет, в моем сценарии у меня есть 2 узла: отправитель и получатель.
узел 1 отправляет пакеты получателю, а запрос представляет собой массив указателей char на некоторые строки:
packetbuf_copyfrom(request[i], strlen(request[i]));
А в приемнике я хочу, чтобы добавить пакеты к списку :
но когда я хочу распечатать список полученных пакетов, он печатает только последний полученный пакет, т. е. все элементы списка указывают на последнюю строку.
Как мне управлять указателями, чтобы решить эту проблему?
Что я уже пробовал:
#include "contiki.h" #include "dev/leds.h" #include <stdio.h> #define MAX_RECORD 20 struct record{ struct record *next; char* message; }; MEMB(record_memb, struct record,MAX_RECORD); LIST(record_list); /*---------------------------------------------------------------------------*/ PROCESS(example_unicast_process, "Example unicast"); AUTOSTART_PROCESSES(&example_unicast_process); /*---------------------------------------------------------------------------*/ static void recv_uc(struct unicast_conn *c, const linkaddr_t *from) { printf("unicast message received from %d.%d : %s\n", from->u8[0], from->u8[1],(char *)packetbuf_dataptr()); char* temp = (char *)packetbuf_dataptr(); struct record *n; n = memb_alloc(&record_memb); n-> message = temp; list_add(record_list,n); for(n = list_head(record_list); n != NULL; n = n->next) { printf(" = %s \n", n->message); }//end for } 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(); unicast_open(&uc, 146, &unicast_callbacks); static int i = 1; while(1) { static struct etimer et; linkaddr_t addr; etimer_set(&et, CLOCK_SECOND); PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); char * arr= "hello"; if(i == 2 ){ i = 1; packetbuf_copyfrom("hello", 5); } else { packetbuf_copyfrom("good bye baby", 14); i = 2; } addr.u8[0] = 1; addr.u8[1] = 0; if(!linkaddr_cmp(&addr, &linkaddr_node_addr)) { unicast_send(&uc, &addr); } } PROCESS_END(); } /*------------
Richard MacCutchan
Где находится код для list_xxx
функции?
Member 11112168
Либ/список.ч