Я портирую драйвер Texas Instruments SimpleLink для использования с хостом Xmega и получаю несколько неявных ошибок объявления при попытке его построить. Я знаю, что означает ошибка, но, насколько я могу судить, она должна быть определена. Должно быть, я что-то упустил, я надеюсь, что кто-то может мне помочь.
Вот вывод ошибки, это говорит о функции CC3120Disable
неявно объявлено в файле device.c:
Ошибка неявного объявления функции ‘CC3120Disable’ [-Werror = неявное-объявление функции] Прошивка Xmega D: \ CC3120SDK_1.55.00.42 \ simplelink_sdk_wifi_plugin_1_55_00_42 \ source \ ti \ drivers \ net \ wifi \ source \ device.c 173
device.c довольно большой, так что здесь есть включения, они — самое первое в файле, кроме комментариев:
#include <ti/drivers/net/wifi/simplelink.h>
#include <ti/drivers/net/wifi/source/protocol.h>
#include <ti/drivers/net/wifi/source/driver.h>
#include <ti/drivers/net/wifi/source/flowcont.h>
Первый (simplelink.h) начинает путь к месту объявления функции, здесь находится первая часть simplelink.h, опять же за исключением комментариев к преамбуле:
#ifndef __SIMPLELINK_H__
#define __SIMPLELINK_H__
/* define the default types
* If user wants to overwrite it,
* he need to undef and define again */
#define _u8 unsigned char
#define _i8 signed char
#define _u16 unsigned short
#define _i16 signed short
#define _u32 unsigned long
#define _i32 signed long
#define _volatile volatile
#define _const const
#include <ti/drivers/net/wifi/porting/user.h>
#ifdef __cplusplus
extern "C"{
#endif
user.h содержит определение макроса, которое говорит ему использовать функцию CC3120Disable
, а также include, который содержит объявление этой функции. Вот первая часть user.h, без ведущих комментариев:
#ifndef __USER_H__
#define __USER_H__
#include "board.h"#include "noos.h"#include "SPI.h"
#ifdef __cplusplus
extern "C" {
#endif
#include <string.h>
и вот строка 371 в user.h, которая определяет макрос:
#define sl_DeviceDisable() CC3120Disable()
Наконец, вот весь мой файл board.h, в котором есть объявление рассматриваемой функции:
#ifndef BOARD_H_
#define BOARD_H_
#ifdef __cplusplus
extern "C"{
#endif
#include <asf.h>
#include "SPI.h"
/* Typedefs */
//typedef void (*P_EVENT_HANDLER)(void* pValue);
/* Pins */
#define nHIB_PIN IOPORT_CREATE_PIN( PORTD, 7 )
#define CC3120_INT_PIN IOPORT_CREATE_PIN( PORTD, 6 )
#define CC3120_RESET_PIN IOPORT_CREATE_PIN( PORTA, 1 )
#define CC3120_SLAVE_PIN IOPORT_CREATE_PIN( PORTE, 0 )
#define LED_BLUE IOPORT_CREATE_PIN( PORTA, 5 )
#define LED_GREEN IOPORT_CREATE_PIN( PORTA, 6 )
/* USART pins */
#define USARTC0_XCK IOPORT_CREATE_PIN( PORTC, 1 )
#define USARTC0_TXD IOPORT_CREATE_PIN( PORTC, 3 )
#define USARTC1_XCK IOPORT_CREATE_PIN( PORTC, 5 )
#define USARTC1_TXD IOPORT_CREATE_PIN( PORTC, 7 )
//#define USARTD0_XCK IOPORT_CREATE_PIN( PORTD, 1 )
//#define USARTD0_TXD IOPORT_CREATE_PIN( PORTD, 3 )
//#define USARTD1_XCK IOPORT_CREATE_PIN( PORTD, 5 )
//#define USARTD1_TXD IOPORT_CREATE_PIN( PORTD, 7 )
#define USARTE0_XCK IOPORT_CREATE_PIN( PORTE, 1 )
#define USARTE0_RXD IOPORT_CREATE_PIN( PORTE, 2 )
#define USARTE0_TXD IOPORT_CREATE_PIN( PORTE, 3 )
//#define USARTE1_XCK IOPORT_CREATE_PIN( PORTE, 5 )
//#define USARTE1_TXD IOPORT_CREATE_PIN( PORTE, 7 )
//#define USARTF0_XCK IOPORT_CREATE_PIN( PORTF, 1 )
//#define USARTF0_TXD IOPORT_CREATE_PIN( PORTF, 3 )
/* Functions */
void CC3120Disable( void );
void CC3120Enable( void );
uint8_t CC3120RegisterInterruptHandler( P_EVENT_HANDLER InterruptHdl , void* pValue );
void CC3120MaskIntHdlr( void );
void CC3120UnMaskIntHdlr( void );
void clock_init( void );
void init( void );
#ifdef __cplusplus
}
#endif
#endif /* BOARD_H_ */
Функция определена в board.cpp, здесь находится начало этого файла, вплоть до того места, где находится функция:
#include <asf.h>
#include "board.h"#include "socket.h"
/* Variables */
P_EVENT_HANDLER CC3120IrqHandler = 0;
uint8_t intIsMasked = 0;
/* Interrupt Handler */
ISR( PORTD_INT0_vect )
{
if ( CC3120IrqHandler && !intIsMasked )
CC3120IrqHandler( 0 );
}
void CC3120Disable()
{
ioport_set_pin_level( nHIB_PIN, false );
}
Это сводит меня с ума, я не могу понять, почему он вызывает ошибку неявного объявления для этой функции. Кто-нибудь может увидеть проблему или предложить что-то попробовать?
Задача ещё не решена.
Других решений пока нет …