月度归档:2014年09月

Lwip在UCOS-II上的移植(一)

LwIP是Light Weight (轻型)IP协议,有无操作系统的支持都可以运行。LwIP实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用,它只需十几KB的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端的嵌入式系统中使用。

Lwip的官方下载地址:http://savannah.nongnu.org/projects/lwip/

ARM和网络芯片(例如DM9000A)通讯,DM9000A接收到网络传送的数据包后,产生中断,ARM 检测到中断后从DM9000A接收缓冲区读取数据包,利用Lwip的内部数据包管理函数,把接收的数据包放在一个pbuf结构中。Lwip判断当前的数据包是ARP包还是IP包,调用相应的函数进行处理。

Lwip实现有几种方式:1、raw\callback API 2、sequential API 3、socket API

采用第1种方式时,Lwip做为UCOS中的一个单独的任务。用户程序和协议栈之间的通讯通过回调函数实现。所有网络相关的处理都在同一个任务里完成,避免了任务的切换。在嵌入式操作系统中使用Lwip时,最好将Lwip任务设为系统的最高优先级,以提高协议栈的实时性。

另外两种方式没有使用过,这两种方式需要使用操作系统的信号量和邮箱机制。对一些小的嵌入式系统和工作频率不高的ARM芯片来说,频繁的切换任务时没有必要的。使用第一种回调方式实现,我觉得是比较合适的。

开发之旅

某一天,你接到一个任务,要去某一个地方,沿途要经过一些站点。接到任务时,你满怀信心,觉得一定会一路顺畅。你出发了,开始的路程很轻松,道路平坦,路边鸟语花香,你按照计划经过了几个必须路过的站点。终点就在远处的山顶,好像就快要到了。

又走了一段路程,路面开始崎岖不平,而且开始有岔路口。你开始犹豫不前,你选择岔路口的一条路,往前走了一段,发现有某个必须经过的站点没有看到。没办法,只好往回走,选择另一条路。这样不断的选择,返回,前进,再选择,返回,前进。你已经被折腾的有些沮丧了。但是必须得坚持前进。

终于计划中要经过的站点都走过了,开始向山顶的终点冲刺。路已经变的非常陡峭,终点好像变的遥不可及。你的心底掠过一丝放弃的念头。作为一个程序员,放弃就意味着职业生涯的终结。你咬着牙继续往上爬。越过一个个障碍,最后你看到一条小路,好像直达山顶。太好了,总算快到了,你的心情无比轻松,停下来休息了一会,欣赏周围的美景,觉得自信又回来了。

休息够了,你浑身充满了力量,沿着那条小路往山顶进发。但是走着走着,你发现这条小路竟然是条绝路,前面有巨石档道,无论如何都不能翻过到达终点。你在这条小路的终点徘徊不前,试了无数的办法,还是没发越过巨石,你觉得你快要崩溃了,忍不住想大喊。你休息一会,继续爬,累了,再休息一会,再继续爬。终于你的自信心完全丧失了,严重怀疑自己是不是入错了行当,根本不是做程序员的料。想就此放弃,但是回看已经走了那么远的路程,心有不甘。在那里停留几天,你开始变的冷静。仔细的评估周围的环境和自己的精力,判断自己能爬过去。你做好了打持久站的准备,开始一点一滴的凿掉巨石,一步一个脚印往上爬,开始你以为要很久才能凿出一条道,没想到几天之后就到了巨石的上方。

终于到了山顶,你心里有一丝欣喜,但更多的是踏实,你知道这个任务完成的不错。站在山顶的时候,没有狂妄,只有谦卑。远处还有更高的山,但是从这次的开发之旅,你已经知道了开发的心路历程,信心已经在心中生根,其它的山峰你终将能够到达。