来到合肥已经一个多星期了
本来想记录点什么,但是感觉在QQ 空间上会太过于矫情。于是乎选择了csdn 先说说故事的开头吧。故事的开头大4那时候就 已经开来到了动漫基地这边实习
第一次工作
然后毕业后去了南京
现在回来了 没想到找了一家公司居然也是在动漫基地这边。可能冥冥中自有安排吧。
哎呀。好像跑题了我要说以太网呢
不好意思不好意思。我先贴波代码。然后组织下语言。
u8 lwip_comm_mem_malloc(void)
{
u32 mempsize;
u32 ramheapsize;
mempsize=memp_get_memorysize();
//memp_memory×éó
//memp_memory = (u8_t *)pvPortMalloc(3411);//13411
memp_memory = (u8_t *)pvPortMalloc(mempsize);//13411
//memp_memoryê
printf("memp_memoryó:%d\r\n",mempsize);
ramheapsize=LWIP_MEM_ALIGN_SIZE(MEM_SIZE)+2*LWIP_MEM_ALIGN_SIZE(4*3)+MEM_ALIGNMENT;// ram heapó
//ram_heap= (u8_t *)pvPortMalloc(6172);
//ram_heapê
ram_heap= (u8_t *)pvPortMalloc(ramheapsize);
//ram_heapê
printf("ram_heapó:%d\r\n",ramheapsize);
//TCPIP_THREAD_TASK_STK=mymalloc(SRAMIN,TCPIP_THREAD_STACKSIZE*4);
//ê
//LWIP_DHCP_TASK_STK=mymalloc(SRAMIN,LWIP_DHCP_STK_SIZE*4);
//dhcpê
//LWIP_DM9000_INPUT_TASK_STK=pvPortMalloc(536887952);
//dm9000ê
LWIP_DM9000_INPUT_TASK_STK=pvPortMalloc(512);
//
if(!memp_memory||!ram_heap||!TCPIP_THREAD_TASK_STK||!LWIP_DHCP_TASK_STK||!LWIP_DM9000_INPUT_TASK_STK)//꧰
if(!memp_memory||!ram_heap)
{
//lwip_comm_mem_free();
printf("neicun shenqing failed\r\n");
return 1;
}
return 0;
}
//lwip·,·
void lwip_comm_mem_free(void)
{
//
myfree(SRAMIN,memp_memory);
//
myfree(SRAMIN,ram_heap);
//
myfree(SRAMIN,TCPIP_THREAD_TASK_STK);
//
myfree(SRAMIN,LWIP_DHCP_TASK_STK);
//
myfree(SRAMIN,LWIP_DM9000_INPUT_TASK_STK);
}
//lwip IPè
//lwipx:lwipá
void lwip_comm_default_ip_set(__lwip_dev *lwipx)
{
//IP:192.168.1.100
lwipx->remoteip[0]=192;
lwipx->remoteip[1]=168;
lwipx->remoteip[2]=1;
lwipx->remoteip[3]=127;
//MAC·è(ר:2.0.0,×STM32¨ID)
lwipx->mac[0]=dm9000cfg.mac_addr[0];
lwipx->mac[1]=dm9000cfg.mac_addr[1];
lwipx->mac[2]=dm9000cfg.mac_addr[2];
lwipx->mac[3]=dm9000cfg.mac_addr[3];
lwipx->mac[4]=dm9000cfg.mac_addr[4];
lwipx->mac[5]=dm9000cfg.mac_addr[5];
//±IP:192.168.1.30
lwipx->ip[0]=192;
lwipx->ip[1]=168;
lwipx->ip[2]=1;
lwipx->ip[3]=30;
//×:255.255.255.0
lwipx->netmask[0]=255;
lwipx->netmask[1]=255;
lwipx->netmask[2]=255;
lwipx->netmask[3]=0;
//:192.168.1.1
lwipx->gateway[0]=192;
lwipx->gateway[1]=168;
lwipx->gateway[2]=1;
lwipx->gateway[3]=1;
lwipx->dhcpstatus=0;//DHCP
}
//LWIP(LWIP±ò)
//·:0,
// 1,íó
// 2,DM9000§°
// 3,¨í§°.
u8 lwip_comm_init(void)
{
u32 cpu_sr;
u8 err;
struct netif *Netif_Init_Flag;
//÷netif_add()±·,·
struct ip_addr ipaddr;
//ip·
struct ip_addr netmask;
//×
struct ip_addr gw;
//
if(lwip_comm_mem_malloc())
return 1;
//꧰
printf("neicun shenqing Success!\r\n");
BinarySemaphore=xSemaphoreCreateBinary();
//¨
MutexSemaphore=xSemaphoreCreateMutex();LWIP----¨
if(DM9000_Init())return 2;
//DM9000AEP
printf("DM900 init!\r\n");
tcpip_init(NULL,NULL);
//tcp ip,á¨tcpip_thread
printf("tcpip init!\r\n");
lwip_comm_default_ip_set(&lwipdev);
//èIP
printf("set config ip!\r\n");
#if LWIP_DHCP
//IP
ipaddr.addr = 0;
netmask.addr = 0;
gw.addr = 0;
#else
//IP
IP4_ADDR(&ipaddr,lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);
IP4_ADDR(&netmask,lwipdev.netmask[0],lwipdev.netmask[1] ,lwipdev.netmask[2],lwipdev.netmask[3]);
IP4_ADDR(&gw,lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]);
printf("¨enMAC·:................%d.%d.%d.%d.%d.%d\r\n",lwipdev.mac[0],lwipdev.mac[1],lwipdev.mac[2],lwipdev.mac[3],lwipdev.mac[4],lwipdev.mac[5]);
printf("IP·........................%d.%d.%d.%d\r\n",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);
printf("×..........................%d.%d.%d.%d\r\n",lwipdev.netmask[0],lwipdev.netmask[1],lwipdev.netmask[2],lwipdev.netmask[3]);
printf("..........................%d.%d.%d.%d\r\n",lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]);
#endif
Netif_Init_Flag=netif_add(&lwip_netif,&ipaddr,&netmask,&gw,NULL,ðernetif_init,ðernet_input);//ò¨±íí
if(Netif_Init_Flag != NULL)
//íó,ènetif,ònetif
{
netif_set_default(&lwip_netif); //ènetif
printf("set netif!\r\n");
netif_set_up(&lwip_netif);
//ònetif
printf("netif add success!\r\n");
}
taskENTER_CRITICAL();//rtos
xTaskCreate((TaskFunction_t )lwip_dm9000_input_task,
(const char* )"lwip_dm9000_input_task",
(uint16_t )LWIP_DM9000_INPUT_TASK_SIZE,
(void* )NULL,
(UBaseType_t )LWIP_DM9000_INPUT_TASK_PRIO,
(TaskHandle_t* )&LWIP_DM9000_INPUTTask_Handler);
taskENTER_CRITICAL();//rtos
#if
LWIP_DHCP
#endif
return 0;//×÷OK.
}
//DHCP
//DM9000í
void lwip_dm9000_input_task(void *pdata)
{
printf("recev ping data!\r\n");
//°ü·LWIPí
ethernetif_input(&lwip_netif);
}
故事分两头
话说这不刚来新公司吗。第一个任务就是去把裸机的lwip 协议栈移植到freertos 上。至于为什么会是freertos 因为这货免费啊。做成产品后不用交保护费啊。
于是乎我就开始苦逼的加班移植了。移植的这边时间。基本上都是干到晚上10点啊。各种百度谷歌
当然10点对于在学校那会是很正常不过了。但是我后来去了南京 整个人就堕落了。每天都是5点准时下班就跑。这个南京的经历后面再说。先说lwip
一说到这lwip 我就想抽自己啊。有句话怎么说来着。所有的累都是以前不努力的结果。这句话说的太tm对了,我其实刚去南京实习的时候 我那经理让我做的就是裸机移植lwip 然后才有了后面的面试吹牛逼 然后才有了现在的加班到10点多
所以这件事告诉我们一个深刻的道理。面试的时候一定不到吹牛逼。要不然最后坑比的还是自己,哎。算是给csdn 的小伙伴一个忠告吧。 希望看到的都是务实的好孩子。而且吹牛逼这有瘾。我这已经在这条路上越走越远估计是还不了的。
不过还好。怎么说当年在南京还是认真学习过lwip 的。终于在经历大概一个星期后
成功移植成功rtos +lwip +dm9000
下面上ping 成功截图。
简直是满满的成就感啊。
公司是做安防监控方面的。老大的意思是做rtos Lwip snamp mqtt ,这些当然目前已经全部做完了,本来打算 当时RTOS+LWIP做完就更CSDN的,但是无奈事情太多,这事就搁置了,今天突然想起来了这事,就更一波LWIP+RTOS的,后面的以后有时间再更啊,欢迎Mark啊。
|