前言
本文对lwip的主要线程tcpip_thread进行分析。
正文
tcpip_thread
是lwip最主要的线程,其创建在tcpip_init
函数中
sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO);
tcpip_init
函数被TCPIP_Init
函数调用。
TCPIP_Init
函数被用户应用程序调用。
创建任务的sys_thread_new
函数在sys_arch.c
文件中实现,sys_arch.c
是操作系统相关的接口文件,在有操作系统环境下移植lwip时要对sys_arch.c
中的函数进行实现。
tcpip_thread
任务的内容如下:
static void
tcpip_thread(void *arg)
{
struct tcpip_msg *msg;
LWIP_UNUSED_ARG(arg);
LWIP_MARK_TCPIP_THREAD();
LOCK_TCPIP_CORE();
//tcpip_init_done是一个函数指针
//tcpip_init_done_arg是一个变量指针
//这两个可以由用户设置,如果想在while循环执行前做些什么
if (tcpip_init_done != NULL) {
tcpip_init_done(tcpip_init_done_arg);
}
while (1) {
/* MAIN Loop */
//用户可以在opt.h文件中对下面这个宏进行函数定义
//可以根据这个宏使得用户在应用层知道tcpip_thread任务还活着
LWIP_TCPIP_THREAD_ALIVE()