我正在移植Texas Instruments SimpleLink驱动程序以与Xmega主机一起使用,并且在尝试构建它时会遇到一些隐式声明错误。我知道错误意味着什么,但据我所知,它应该被定义。我一定错过了什么,我希望有人可以帮助我。
这是错误输出,它表示函数CC3120Disable
在device.c文件中隐式声明:
错误隐式声明函数'CC3120Disable'[-Werror = implicit-function-declaration] 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,除了评论之外,它们是文件中的第一件事:
#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>
,这是user.h中定义宏的第371行:
#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 );
}
它让我发疯,我无法弄清楚为什么它会为该函数抛出一个隐式声明错误。任何人都可以看到问题或建议尝试一下吗?