本人在正点原子官方例程usb host U盘实验中移植了lwip 无操作系统实验后,编译没有问题,但是lwip功能实现不了,在提示#include "lwip/netif.h"旁边有红×,提示:“error in include chain (IP_addr.h): unknown type name '__packed'”
程序编译没有error,之前改的时候
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "key.h"
#include "usmart.h"
#include "sram.h"
#include "malloc.h"
#include "w25qxx.h"
#include "sdio_sdcard.h"
#include "ff.h"
#include "exfuns.h"
#include "fontupd.h"
#include "text.h"
#include "piclib.h"
#include "usbh_usr.h"
#include "lwip/netif.h"
#include "lwip_comm.h"
#include "lwipopts.h"
#include "timer.h"
#include "lwip_comm.h"
#include "LAN8720.h"
//ALIENTEK 探索者STM32F407开发板 实验53
//USB U盘 实验-库函数版本
//技术支持:www.openedv.com
//淘宝店铺:http://eboard.taobao.com
//广州市星翼电子科技有限公司
//作者:正点原子 @ALIENTEK
USBH_HOST USB_Host;
USB_OTG_CORE_HANDLE USB_OTG_Core;
//用户测试主程序
//返回值:0,正常
// 1,有问题
u8 USH_User_App(void)
{
u32 total,free;
u8 res=0;
Show_Str(30,140,200,16,"设备连接成功!.",16,0);
res=exf_getfree("2:",&total,&free);
if(res==0)
{
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(30,160,200,16,16,"FATFS OK!");
LCD_ShowString(30,180,200,16,16,"U Disk Total Size: MB");
LCD_ShowString(30,200,200,16,16,"U Disk Free Size: MB");
LCD_ShowNum(174,180,total>>10,5,16); //显示U盘总容量 MB
LCD_ShowNum(174,200,free>>10,5,16);
}
while(HCD_IsDeviceConnected(&USB_OTG_Core))//设备连接成功
{
LED1=!LED1;
delay_ms(200);
}
POINT_COLOR=RED;//设置字体为红色
Show_Str(30,140,200,16,"设备连接中...",16,0);
LCD_Fill(30,160,239,220,WHITE);
return res;
}
void show_address(u8 mode)
{
u8 buf[30];
if(mode==1)
{
sprintf((char*)buf,"MAC :%d.%d.%d.%d.%d.%d",lwipdev.mac[0],lwipdev.mac[1],lwipdev.mac[2],lwipdev.mac[3],lwipdev.mac[4],lwipdev.mac[5]);//打印MAC地址
LCD_ShowString(30,130,210,16,16,buf);
sprintf((char*)buf,"DHCP IP:%d.%d.%d.%d",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]); //打印动态IP地址
LCD_ShowString(30,150,210,16,16,buf);
sprintf((char*)buf,"DHCP GW:%d.%d.%d.%d",lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]); //打印网关地址
LCD_ShowString(30,170,210,16,16,buf);
sprintf((char*)buf,"DHCP IP:%d.%d.%d.%d",lwipdev.netmask[0],lwipdev.netmask[1],lwipdev.netmask[2],lwipdev.netmask[3]); //打印子网掩码地址
LCD_ShowString(30,190,210,16,16,buf);
}
else
{
sprintf((char*)buf,"MAC :%d.%d.%d.%d.%d.%d",lwipdev.mac[0],lwipdev.mac[1],lwipdev.mac[2],lwipdev.mac[3],lwipdev.mac[4],lwipdev.mac[5]);//打印MAC地址
LCD_ShowString(30,130,210,16,16,buf);
sprintf((char*)buf,"Static IP:%d.%d.%d.%d",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]); //打印动态IP地址
LCD_ShowString(30,150,210,16,16,buf);
sprintf((char*)buf,"Static GW:%d.%d.%d.%d",lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]); //打印网关地址
LCD_ShowString(30,170,210,16,16,buf);
sprintf((char*)buf,"Static IP:%d.%d.%d.%d",lwipdev.netmask[0],lwipdev.netmask[1],lwipdev.netmask[2],lwipdev.netmask[3]); //打印子网掩码地址
LCD_ShowString(30,190,210,16,16,buf);
}
}
int main(void)
{
u8 t;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //按键
LCD_Init(); //初始化LCD
W25QXX_Init(); //SPI FLASH初始化
usmart_dev.init(84); //初始化USMART
my_mem_init(SRAMIN); //初始化内部内存池
//my_mem_init(SRAMEX); //初始化外部内存池
//my_mem_init(SRAMCCM); //初始化CCM内存池
exfuns_init(); //为fatfs相关变量申请内存
piclib_init(); //初始化画图
f_mount(fs[0],"0:",1); //挂载SD卡
f_mount(fs[1],"1:",1); //挂载SD卡
f_mount(fs[2],"2:",1); //挂载U盘
POINT_COLOR=RED;
while(font_init()) //检查字库
{
LCD_ShowString(60,50,200,16,16,"Font Error!");
delay_ms(200);
LCD_Fill(60,50,240,66,WHITE);//清除显示
delay_ms(200);
}
Show_Str(30,50,200,16,"探索者STM32F407开发板",16,0);
Show_Str(30,70,200,16,"USB U盘实验",16,0);
Show_Str(30,90,200,16,"2014年7月22日",16,0);
Show_Str(30,110,200,16,"正点原子@ALIENTEK",16,0);
Show_Str(30,140,200,16,"设备连接中...",16,0);
delay_ms(2000);
LCD_Clear(WHITE);//清除显示
LCD_ShowString(30,110,200,20,16,"LWIP Init Success!");
LCD_ShowString(30,130,200,16,16,"DHCP IP configing..."); //等待DHCP获取
delay_ms(2000);
LCD_Clear(WHITE);//清除显示
#if LWIP_DHCP //使用DHCP
while((lwipdev.dhcpstatus!=2)&&(lwipdev.dhcpstatus!=0XFF))//等待DHCP获取成功/超时溢出
{
lwip_periodic_handle(); //LWIP内核需要定时处理的函数
}
#endif
show_address(lwipdev.dhcpstatus); //显示地址信息
//初始化USB主机
USBH_Init(&USB_OTG_Core,USB_OTG_FS_CORE_ID,&USB_Host,&USBH_MSC_cb,&USR_cb);
while(1)
{
lwip_periodic_handle(); //LWIP内核需要定时处理的函数
USBH_Process(&USB_OTG_Core, &USB_Host);
delay_ms(1);
t++;
if(t==200)
{
LED0=!LED0;
t=0;
}
}
}
|