📄 main_entry.c
字号:
//#include "includes.h"#include "lwip/debug.h"#include "lwip/opt.h"#include "lwip/def.h"#include "lwip/mem.h"#include "lwip/pbuf.h"#include "lwip/sys.h"#include "lwip/tcpip.h"#include "lwip/api.h"#include "netif/arp.h"#include "netif/loopif.h"//yangye 2003-1-23#include "netif/ne2kif.h"#include "arch/sys_arch.h"#include "skyeye_stdio.h"extern struct netif *rtl8019if_netif;struct RTL8019if *rtlif; extern void OSISR(void);extern void OSTimeTick(void);extern void ne2k_isr(void);void at91_init_kernel(void);#define PRINT skyeye_printf//chy 2003-01-23: a little big stack#define TASK_STK_SIZE 4096 // Stack size, in size of SO_STK, or int //yangye 2003-1-27// task prio 1 for lwip init( it also init hardware and timer task )OS_STK lwip_init_stk[TASK_STK_SIZE]; // lwip stacks// user task start from prio 3!!!!OS_STK usr_stk[TASK_STK_SIZE]; // user Task stack// Prototypesvoid usr_task(void * pParam);void lwip_init_task(void *pParam);void tcpip_init_done(void *arg);void Sleep(INT16U uSec);void tcpecho_init(void);// Application entry point, invoked from Entry.obj//chy:2003-05-21: get liming's advice, when I commit main fun, then arm-elf-tools-20030314 can pass it!/*int main(void){ return 0;}*/void start_kernel(void){ int LineNo10 = 0; int LineNo11 = 1; int LineNo12 = 2; int LineNo13 = 3; int LineNo14 = 4; install_irqhandler(OSISR); request_irq(5,OSTimeTick); request_irq(16,ne2k_isr); OSInit(); // Create two tasks. //yangye 2003-1-23 //the timer is used in lwip //task 0 is created by lwip_init_task (it calls TmrInit() in tmr.c) //task 1 is lwip init task //it also init hardware and timer task! //OSTaskCreate(lwip_init_task, (void*)1, &lwip_init_stk[TASK_STK_SIZE-1], 1); OSTaskCreate(lwip_init_task, &LineNo11, &lwip_init_stk[TASK_STK_SIZE-1], 0); OSTaskCreate(usr_task,&LineNo12,&usr_stk[TASK_STK_SIZE-1],1); //task 2 is created by tcpip_init() in lwip_init_task //task 3 is user task // OSTaskCreate(usr_task, &LineNo13, &user_stk[TASK_STK_SIZE-1], 3); // Start multitasking. OSStart(); /* NEVER EXECUTED */}// Display a line of characters at the line specified by the parameter,// assuming a color 80x25 video adapter.//// This function never returns.void usr_task(void * pParam){ PRINT("\nusr_task: hello!\n"); while(1){ Sleep(5); }}void lwip_init_task(void * pParam){ struct ip_addr ipaddr, netmask, gw; sys_sem_t sem; //yangye 2003-1-23//move hardware init here! at91_init();#ifdef STATS stats_init();#endif /* STATS */ sys_init(); mem_init(); memp_init(); pbuf_init(); PRINT("System initialized.\n"); //mainthread netif_init(); sem = sys_sem_new(0); tcpip_init(tcpip_init_done, &sem); sys_sem_wait(sem); sys_sem_free(sem); PRINT("TCP/IP initialized.\n"); //add loop interface IP4_ADDR(&gw, 127,0,0,1); IP4_ADDR(&ipaddr, 127,0,0,1); IP4_ADDR(&netmask, 255,0,0,0); netif_add(&ipaddr, &netmask, &gw, loopif_init, tcpip_input); //add ne2k interface IP4_ADDR(&gw, 10,0,0,1); IP4_ADDR(&ipaddr, 10,0,0,2); IP4_ADDR(&netmask, 255,255,255,0); netif_set_default(netif_add(&ipaddr, &netmask, &gw, ne2k_init, tcpip_input)); PRINT("Applications started.\n"); //we can add tcpip application here !//yangye 2003-1-27//notice :must use sys_thread_new() to add lwip tasks !!!//OSTaskCreate(udpecho_thread, (void *)0x1111, &LwipStk1[TASK_STK_SIZE - 1], 6);// httpd_init(); tcpecho_init(); PRINT(" tcpecho created!"); rtlif = rtl8019if_netif->state; //test!!!!! /* Block for ever. */ sem = sys_sem_new(0); sys_sem_wait(sem); PRINT(" never goes here, should not appear!");}voidtcpip_init_done(void *arg){ sys_sem_t *sem; sem = arg; sys_sem_signal(*sem);}// Sleeps for the specified delay (in seconds).// Since the 8254 is not set in this implementation,// sleeping one second means sleeping 18 clock ticks.void Sleep(INT16U uSec){ OSTimeDly((INT16U) (uSec) * 10);}/*-----------------------------------------------------------------------------------*/static void tcpecho_thread(void *arg){ struct netconn *conn, *newconn; err_t err; /* Create a new connection identifier. */ conn = netconn_new(NETCONN_TCP); /* Bind connection to well known port number 7. */ netconn_bind(conn, NULL, 7); /* Tell connection to go into listening mode. */ netconn_listen(conn); while(1) { /* Grab new connection. */ newconn = netconn_accept(conn); /*printf("accepted new connection %p\n", newconn);*/ /* Process the new connection. */ if(newconn != NULL) { struct netbuf *buf; void *data; u16_t len; while((buf = netconn_recv(newconn)) != NULL) { /*printf("Recved\n");*/ do { netbuf_data(buf, &data, &len); err = netconn_write(newconn, data, len, NETCONN_COPY); if(err != ERR_OK) { /* printf("tcpecho: netconn_write: error \"%s\"\n", lwip_strerr(err));*/ } } while(netbuf_next(buf) >= 0); netbuf_delete(buf); } /*printf("Got EOF, looping\n");*/ /* Close connection and discard connection identifier. */ netconn_delete(newconn); } }}/*-----------------------------------------------------------------------------------*/voidtcpecho_init(void){ sys_thread_new(tcpecho_thread, NULL); }/*-----------------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -