我是靠谱客的博主 机智雪糕,最近开发中收集的这篇文章主要介绍物联网LWIP网络开发 TCP/IP设计原理12.1 lwIP内核超时机制lwIP内核超时机制,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
lwIP内核超时机制
超时机制应用场景
- ARP 缓存表项的时间管理
- IP 分片数据报的重装等待超时
- TCP 中的建立连接超时
- TCP重传超时机制
timeout源码分析
sys_timeo 结构体
typedef void (* sys_timeout_handler)(void *arg);
struct sys_timeo {
struct sys_timeo *next;
u32_t time;
sys_timeout_handler h;
void *arg;
#if LWIP_DEBUG_TIMERNAMES
const char* handler_name;
#endif /* LWIP_DEBUG_TIMERNAMES */
};
注册超时时间
/**
* Create a one-shot timer (aka timeout). Timeouts are processed in the
* following cases:
* - while waiting for a message using sys_timeouts_mbox_fetch()
* - by calling sys_check_timeouts() (NO_SYS==1 only)
*
* @param msecs time in milliseconds after that the timer should expire
* @param handler callback function to call when msecs have elapsed
* @param arg argument to pass to the callback function
*/
#if LWIP_DEBUG_TIMERNAMES
void
sys_timeout_debug(u32_t msecs, sys_timeout_handler handler, void *arg, const char* handler_name)
#else /* LWIP_DEBUG_TIMERNAMES */
void
sys_timeout(u32_t msecs, sys_timeout_handler handler, void *arg)
#endif /* LWIP_DEBUG_TIMERNAMES */
超时检查逻辑
裸机应用
/**
* @ingroup lwip_nosys
* Handle timeouts for NO_SYS==1 (i.e. without using
* tcpip_thread/sys_timeouts_mbox_fetch(). Uses sys_now() to call timeout
* handler functions when timeouts expire.
*
* Must be called periodically from your main loop.
*/
#if !NO_SYS && !defined __DOXYGEN__
static
#endif /* !NO_SYS */
void
sys_check_timeouts(void)
带操作系统应用
#if !NO_SYS
/**
* Wait (forever) for a message to arrive in an mbox.
* While waiting, timeouts are processed.
*
* @param mbox the mbox to fetch the message from
* @param msg the place to store the message
*/
void
sys_timeouts_mbox_fetch(sys_mbox_t *mbox, void **msg)
最后
以上就是机智雪糕为你收集整理的物联网LWIP网络开发 TCP/IP设计原理12.1 lwIP内核超时机制lwIP内核超时机制的全部内容,希望文章能够帮你解决物联网LWIP网络开发 TCP/IP设计原理12.1 lwIP内核超时机制lwIP内核超时机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复