apimsg->op_completed_sem = LWIP_NETCONN_THREAD_SEM_GET(); /* 获取同步信号量 */ #endif /* LWIP_NETCONN_SEM_PER_THREAD */ /* 把fn()搞到tcpip内核锁内执行 */ err = tcpip_send_msg_wait_sem(fn, apimsg, LWIP_API_MSG_SEM(apimsg));if (err == ERR_OK) { return apimsg->err;...
#ifLWIP_NETCONN_SEM_PER_THREADsys_sem_t* sys_arch_netconn_sem_get(void);voidsys_arch_netconn_sem_alloc(void);voidsys_arch_netconn_sem_free(void);#defineLWIP_NETCONN_THREAD_SEM_GET() sys_arch_netconn_sem_get()#defineLWIP_NETCONN_THREAD_SEM_ALLOC() sys_arch_netconn_sem_alloc()#d...
= NULL) && sys_mbox_valid_val(*(mbox))) #define sys_mbox_set_invalid(mbox) ((mbox)->mbx = NULL) struct _sys_thread { void *thread_handle; }; typedef struct _sys_thread sys_thread_t; #if LWIP_NETCONN_SEM_PER_THREAD sys_sem_t* sys_arch_netconn_sem_get(void); void sys_arch...
void netbuf_chain(struct netbuf *head, struct netbuf *tail) { LWIP_ERROR("netbuf_chain: invalid head", (head != NULL), return;); LWIP_ERROR("netbuf_chain: invalid tail", (tail != NULL), return;); pbuf_cat(head->p, tail->p); head->ptr = head->p; memp_free(MEMP_NETBUF...
#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */ #if TCP_LISTEN_BACKLOG struct { u8_t backlog; } lb; #endif /* TCP_LISTEN_BACKLOG */ } msg; #if LWIP_NETCONN_SEM_PER_THREAD sys_sem_t *op_completed_sem; #endif /* LWIP_NETCONN_SEM_PER_THREAD */ };...
LWIP_NETCONN_SEM_PER_THREAD/* 只能每个netconn数据结构占用一个信号量 *//* 信号量。是对一个API完成两部分线程的同步。如用户调用API,API调用内核API,并等待内核API完成后通过该信号量通知当前API。 */sys_sem_top_completed;#endif/* 接收数据的邮箱。数据缓冲队列。 */sys_mbox_trecvmbox;#ifLWIP_TCP...
在LwIP中,如TCP连接,UDP通信,都是需要提供一个编程接口给用户使用的,那么为了描述这样子的一个接口,LwIP抽象出来一个nettonn结构体,它能描述一个连接,供应用程序使用,同时内核的NETCONN API接口也对各种连接操作函数进行了统一的封装,这样子,用户程序可以很方便使netconn和编程函数,我们暂且将netconn称之为连接结构...
- 3. 编写NETCONN UDP实例 - 4. 总结 - 附录 1. LWIP移植FREERTOS 废话不多说,既然NETCONN API...
BSD Socket API:类似 Berkeley 的套接字 API (开发于 Netconn API 之上) 。 对于以上三种接口,前一种只需要裸机即可调用,后两种需要操作系统才能调用。所以据此LwIP存在两种移植方式:一是,只移植内核,此时应用程序的编写只能基于RAW/Callback API进行。二是,移植内核和上层API,此时应用程序编写可以使用3种API,即:...
msg = &dummyptr; //等待成功,计算等待的时间 if (xQueueReceive(*q,&(*msg), 0) == pdTRUE) return ERR_OK; else return SYS_MBOX_EMPTY; } #if LWIP_NETCONN_SEM_PER_THREAD #error LWIP_NETCONN_SEM_PER_THREAD==1 not supported #endif /* LWIP_NETCONN_SEM_PER_THREAD */ #endif /* ...