LwIP应用笔记(三):在RTOS环境下运行LwIP协议栈

前言

这篇文章是 LwIP应用笔记(二):无操作系统支持下的RAW API移植 的后续,以下所有内容都是建立在已经完成RAW API移植的前提下。本文可能不会太纠结于代码细节,因为本文的目标并不是演示移植过程中每一行代码该怎么写,而是希望在讲清大体框架的基础上,给出移植的主要流程,即在移植过程中,我们需要做什么事。

一、RTOS环境下的运行优势与劣势

在非RTOS环境下,用户程序是通过回调类接口,也就是RAW API与LwIP协议栈进行交互的。用户通过注册回调函数的方式告诉协议栈,当某些事件发生时需要做什么,可以理解为用户将自己所写的部分代码嵌入了协议栈的代码执行流程中,这样做会带来一个很大的问题,即用户注册的回调函数会影响协议栈的运行效率。设想这样一个场景,在非RTOS环境下,用户编写了若干个不同的网络功能模块,它们通过回调的方式与协议栈进行交互,现在假设用户注册了一个需要执行较长时间的回调函数,则每次协议栈执行到这个回调函数就都需要等待一个较长的时间去让回调执行完成,之后才能处理其他事务,注册这个回调函数的网络功能模块成功的以一已之力拖慢了整个网络协议栈以及其他网络功能模块的执行效率,不管其他网络功能模块写的多么高效,它们都必须受制于这个最慢的回调函数。所有发生的事情就如同下图所示。
在这里插入图片描述

同时我们也可以预见,随着网络功能模块注册的回调函数越来越多,协议栈需要耗费更多的时间去逐个处理回调函数。
解决上述问题的方法就是使用RTOS,通过将LwIP的协议栈与用户代码放置于不同的线程中执行,来规避用户代码拖慢协议栈执行的问题。用户代码和协议栈之间通过邮箱来进行数据传输。在RTOS环境下,LwIP提供NETCONN API以及类Socket API给用户使用,用户线程通过这两套API与协议栈线程进行交互。这样对于协议栈来说,它再也不用管何时去执行用户代码了,其只需要处理用户代码发送过来的数据,然后将需要用户代码处理的数据丢给对应的用户处理线程。如果很不幸有一个执行效率低下的用户线程,其可能会由于自身的低效丢失本该处理的数据,但是不会拖累其他的用户线程与协议栈本身的运行效率。用户代码和协议栈的关系此时如下所示。
在这里插入图片描述

但是我们也要注意到,在RTOS中用户程序和LwiP协议栈之间要借助邮箱等

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值