用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

个开放源码的嵌入式仿真环境——SkyEye

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 23:52:46
P移植到μC/OS-Ii上来,就获得了一套可免费研究、学习的嵌入式网络软件平台。其系统示意图如图1所示。

LwIP是瑞士计算机科学院(Swedish Institute of Computer Science)的Adam Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LwIP的含义是Light Weight(轻型)IP协议。LwIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。我们目前使用的是LwIP的最新稳定版V0.5.3。

LwIP协议栈在设计时就考虑到了将来的移植问题,因此把所有与硬件、OS、编译器相关的部分独立出来,放在/src/arch目录下。因此,LwIP在μC/OS-II上的实现就是修改这个目录下的文件,其它的文件一般不应该修改。

我们在SkyEye中所仿真的网络芯片是NE2000,所以目前实现的网络设备驱动是针对NE2000的,其它类型的网络芯片驱动可以在LwIP的网站上找到。现在LwIP已经顺利运行在μC/OS-II上了,目前可以从Host主机和SkyEye上运行的μC/OS-II+LwIP顺利进行TCP/IP的通信。

4.3 更多的TCP/IP协议栈

除了LwIP之外,还有很多开源的嵌入式TCP/IP协议栈。它们各有各的特点,有些功能较全面,有些占用资源出奇的少,能适合不同场合的需要,而且多接触一些不同的思路,对协议和编码能有更好的理解。其中的代表有tinyTCP、ucIP、uIP等,它们的基本思路应该都是一致的。SkyEye小组希望能有列多对TCP/IP协议栈感兴趣的人参与进来,特别是ucIP,实际上它是专门为μC/OS-II设计的。

5 SkyEye上已经实现的简单应用

5.1 LwIP上的Echo服务器

做完LwIP的移植修改工作以后,就可以在μC/OS-II中初始化LwIP,并创建TCP或UDP任务进行测试了。值得注意的是:LwIP的初始化必须在μC/OS-II完全启动之后也就是在任务中进行,因为它的初始化用到了信号量等与OS相关的操作。

LwIP提供了两种API,供用户使用这个协议栈。

第一种是BSD API。这种API非常像BSD标准UNIX中的socket API,所以对其这样命名。它跟普通的socket API一样,是基于open-read-write-close模型的。javascript:window.open(this.src);" style="cursor:pointer;"/>它提供了一种标准的方法来使用LwIP协议栈。但这种API效率较低,消耗资源较多,因此不推荐使用。

第二种称为RAW API。这种API接口实际上是直接使用了LwIP协议栈中的回调函数(call back functions),从而使应用程序和协议栈代码能够更好地集成在一起,运行同一个线程即任务中。RAW API相对于普通BSD API来说,速度更快,消耗内存资源更少;唯一的缺点是编程复杂,对程序员的要求高。考虑到我们是在嵌入式设备中工作,这样的缺点是可以接受的。事实上,BSD API就是用RAW API来实现的。

利用Berkley API实现的tcpecho_thread是一个TCP Echo服务器,监听7号端口,这实际上是实现了RFC中最简单Echo协议:收到什么,就往回发同样的内容。编译运行后,用ping IP地址命令可以得到ICMP reply响应。用telnet IP地址7(登录7号端口)命令可以看到Echo Server的回显效果。说明ARP、ICMP、IP、TCP协议都已正确运行。

5.2μC/OS-II只提供了操作系统内核,用户要自己添加文件处理、人机界面、网络接口等重要部分。大部分人认识OS都是从这里开始的。

由于SkyEye下的仿真串口UART已经实现了中断方式的接收(实际是从键盘接收输入)和输出(实际上是输出到终端屏幕),所以实现一个类似Bash的简化版Shell并不困难。其本质思想就是:Shell作为一个μC/OS-II下的任务,工作于内核之外,占用一个任务号。它接收用户输入的字符,存储到缓冲区,并回显到屏幕上,以回车键为用户输入的结束信号,随后解析用户输入的命令名称、参数,调用相应的命令函数。一直到这个命令函数运行返回,才继续Shell的人机交互界面。

我们目前在μC/OS-II下实现的Shell被命名为Genie Shell。它实现了最基本的命令输入、解析参数、调用命令函数功能,以及两条示例性的命令。这个Shell的特色是采用了一些面向对象的思路来实现Shell的各种命令。Genie Shell把每个命令看成一个对象,对象的属性是命令名,而对象的方法就是命令的执行函数本身。用户输入命令及参数后,将参数传递给对象的方法并执行。要Shell中增加一条命令,就是增加一个对象,并实现这个对象的方法,以利于今后做进一步的扩充。

5.3μClinux上的应用程序

目前μClinux-dist-20030305已经可以在SkyEye上运行。其中的sash(shell)、ping、ifconfig、telnet,telnet server、ftp、ftp server、boa(http server)、mount with nfs support等主要的应用程序都可以成功地运行在SkyEye中,而且不需要对应用程序进行任何修改。

6 SkyEye正在开展的工作

6.1 LCD仿真

作为单片机系统重要的输出设备,LCD屏幕用得非常广泛,因此,我们认为有必要为SkyEye加入LCD控制器设备仿真。我们使用GTK+图形函数库在Xwindow中模拟出一个LCD屏幕,这样在SkyEye上运行的OS,其LCD驱动程序会像驱动真正的LCD控制器一样发送控制命令,而SkyEye解释这些控制命令,并且应地在GTK+绘出的窗口中画不同灰度或颜色的点。这里对GTK+的使用仅限于绘制窗口和画点,因为这是LCD屏幕的最基本动作

上一页  [1] [2] [3] [4]  下一页

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:15,578.13000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号