Неопределенная ссылка во время компиляции при предоставлении полного пути к заголовку с использованием Makefile для Contiki - PullRequest
0 голосов
/ 18 мая 2018

Заранее благодарен за помощь.

Я пытаюсь скомпилировать пример программы 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
...