LWIP定时器

在操作系统层TCP/IP 协议中很多时候都要用到定时,定时器的实现是 TCP/IP 协议栈中一个重要部分。LWIP 为每个与外界网络连接的任务都有设定了 timeout 属性,即等待超时时间。在具体实现上,每个任务都对应一个 sys_timeout 结构体,里面包括这个任务的 timeout 时间长度,以及超时后应调用的超时处理函数——该函数主要负责释放连接和资源回收。如若某一个任务的 sys_timeout 结构为空,说明对应的线程要进行永久的等待。LWIP 将这些结构体存放于链表 sys_timeouts 中,并使用每个任务的优先级作为该任务的标识符。通过查询来获得一个指向当前任务使用的 sys_timeout 结构体的指针,从而使用该指针访问相应的结构体,以获得相应任务的 timeout 属性。开发者需要实现查找函数sys_arch_timeouts(),其实现思想就是根据索引(即任务的优先级)进行链表查找,实现如下:

struct sys_timeouts *sys_arch_timeouts(void)
{
    u8_t CurrPrio;
    s16_t err, offset;
    OS_TCB  CurrTaskPcb;

    NullTimeouts.next = NULL;

    err = OSTaskQuery(OS_PRIO_SELF, &CurrTaskPcb);

    CurrPrio = CurrTaskPcb.OSTCBPrio;

    offset = CurrPrio - LWIP_TASK_START_PRIO;

    if(offset<0 || offset >= LWIP_TASK_MAX){
        return &NullTimeouts;
    }
    return &LwipTimeouts[offset];
}

1、timeout

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值