Заранее благодарен за помощь.
Я пытаюсь скомпилировать пример программы contiki (которую я написал, это не из примеров, предоставленных из contiki git) под управлением tsch mac.Ниже приведен код, который я хотел бы скомпилировать (То, что он делает, не так уж важно, все, что я хочу сделать, это отправлять сообщения каждую секунду или около того, и посмотреть, смогу ли я получить его с помощью tsch; также я знаю, что есть некоторые мертвыекод, я намерен изменить это в будущем).
#include "contiki.h"
#include "contiki-net.h"
// ATTEMPT TO FIX MY PROBLEM
#include "/home/user/contiki-master/core/net/mac/tsch/tsch.h"
// WHAT CODE SHOULD BE
// #include "net/mac/tsch/tsch.h"
/*
* Header containing code to use LEDs
*/
#include "dev/leds.h"
#include <stdio.h>
#define DEBUG DEBUG_PRINT
#include "net/ip/uip-debug.h"
// header file for this specific example, contains constants
#include "./example-tsch-common.h"
#define UIP_IP_BUF ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN])
static struct etimer tsch_example_etimer_struct_timer;
PROCESS(coord_process, "TSCH Coordinator");
AUTOSTART_PROCESSES(&coord_process);
PROCESS_THREAD(coord_process, ev, data)
{
static uip_ds6_addr_t *myaddr;
static uip_ipaddr_t ipaddr;
static uip_ipaddr_t linklocal_all_node;
static struct uip_udp_conn *conn_unicast;
static struct uip_udp_conn *conn_broadcast;
static int unicast_received = 0;
static int broadcast_received = 0;
linkaddr_t *dest_lladdr;
PROCESS_BEGIN();
uiplib_ip6addrconv(NODE_ADDR, &ipaddr);
conn_unicast = udp_new(&ipaddr, UIP_HTONS(APP_PORT), NULL);
uip_udp_bind(conn_unicast, UIP_HTONS(APP_PORT));
myaddr = uip_ds6_get_link_local(-1);
tsch_set_coordinator(1);
while(1) {
PROCESS_YIELD();
etimer_set(&tsch_example_etimer_struct_timer, CLOCK_SECOND);
PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);
printf("COORD TX\n");
uip_udp_packet_send(conn_unicast, uip_appdata, uip_datalen());
}
PRINTF("APP: done\n");
PROCESS_END();
}
Всякий раз, когда я пытаюсь скомпилировать, хотя
make TARGET=sky example-tsch-coord
я получаю следующую ошибку
example-tsch-coord.co: In function `process_thread_coord_process':
/home/user/contikiProgramSourceFiles/tschTest1/example-tsch-
coord.c:145: undefined reference to `tsch_set_coordinator'
collect2: ld returned 1 exit status
make: *** [example-tsch-coord.sky] Error 1
rm example-tsch-coord.co obj_sky/contiki-sky-main.o
Вот Makefile, который я использую ("/ home / user / contikiProgramSourceFiles / tschTest1" - это то место, где код, который я хочу скомпилировать)
CONTIKI = /home/user/contiki-master
CONTIKI_WITH_IPV6 = 1
MODULES += $(CONTIKI)/core/net/mac/tsch
MODULES += /home/user/contikiProgramSourceFiles/tschTest1
include $(CONTIKI)/Makefile.include
Проблема (по крайней мере, я почти уверен) заключается в том, чтокомпилятор не может найти функцию "tsch_set_coordinator", которая определена в
/home/user/contiki-master/core/net/mac/tsch/tsch.h
. Первоначально я думал, что я что-то не так делал с моим make-файлом, поскольку по сути скопировал его из файла make в
/home/user/contiki-master/examples/ipv6/rpl-tsch/Makefile
Итак, что я сделал, так это предоставил абсолютный путь к нужному заголовку в фактическом коде (указан выше и помечен как «ПОПЫТКА, ЧТОБЫ УСТАНОВИТЬ МОЮ ПРОБЛЕМУ»).Это, однако, не решило проблему.Я понимаю, что, поскольку я указал весь путь, компилятор должен был найти функцию, которую он не может найти.Что я здесь не так делаю?
Кроме того, вот файл project-conf.h, который я использую на случай, если что-то пропущу и вызову эту проблему
#undef UIP_CONF_IPV6_RPL
#define UIP_CONF_IPV6_RPL 0
#define TSCH_SCHEDULE_CONF_WITH_6TISCH_MINIMAL 1
/* Netstack layers */
#undef NETSTACK_CONF_MAC
#define NETSTACK_CONF_MAC tschmac_driver
#undef NETSTACK_CONF_RDC
#define NETSTACK_CONF_RDC nordc_driver
#undef NETSTACK_CONF_FRAMER
#define NETSTACK_CONF_FRAMER framer_802154
/* IEEE802.15.4 frame version */
#undef FRAME802154_CONF_VERSION
#define FRAME802154_CONF_VERSION FRAME802154_IEEE802154E_2012
/* Need NDP */
#undef UIP_CONF_ND6_SEND_NA
#define UIP_CONF_ND6_SEND_NA 1
#undef UIP_CONF_IPV6_QUEUE_PKT
#define UIP_CONF_IPV6_QUEUE_PKT 1
/* Needed for cc2420 platforms only */
/* Disable DCO calibration (uses timerB) */
#undef DCOSYNCH_CONF_ENABLED
#define DCOSYNCH_CONF_ENABLED 0
/* Enable SFD timestamps (uses timerB) */
#undef CC2420_CONF_SFD_TIMESTAMPS
#define CC2420_CONF_SFD_TIMESTAMPS 1
#undef TSCH_CONF_DEFAULT_TIMESLOT_LENGTH
#define TSCH_CONF_DEFAULT_TIMESLOT_LENGTH 10000