怎么把tcp/tcp ip协议详解写进arm(不要带操作系统0

实时操作系统uC/0S II下TCP/IP协议栈的实现
> 实时操作系统uC/0S II下TCP/IP协议栈的实现
实时操作系统uC/0S II下TCP/IP协议栈的实现
摘要:结合ez80和ARM7两种系统上的具体,说明了如何在嵌入式上移植LwIP这套栈,使 成为支持网络的RTOS。本文引用地址:1 引言随着嵌入式系统与网络的日益结合,在嵌入式中引入栈,以支持嵌入式设备接入网络,成为嵌入式领域重要的研究方向。 是近年来发展迅速的一个开放源码,但它只是一个实时的任务调度及通信内核,缺少对外围设备和接口的支持,如没有文件系统、网络、图形界面。笔者在多个嵌入式项目的开发过程中,以开源协议栈LwIP为基础,给uC/0S II加上了网络支持。下面就以uC/0S II +LwIP分别在8位MCU ez80和32位MCU ARM7TDMI上的为例进行说明。需要说明的是,笔者使用的ez80系统是Zilog公司的ez80190开发板,自带网络芯片。而ARM7系统是使用笔者参与开发的Skyeye,一个基于GDB的ARM7TDMI指令级软件仿真器。Skyeye小组最近为Skyeye加上了软件模拟的Ne2k兼容网络芯片,可以运行带网络支持的&cLinux和uC/0S II。以下的全部相关程序和代码都可以在Skyeye网站(hpclab.cs./~skyeye/)下载。2 基于uC/0S II的网络平台概述嵌入式操作系统uC/0S II是一个公开源代码的占先式多任务的微内核RTOS,其性能和安全性可以与商业产品竞争。uC/0S II的特点可以概括为以下几个方面:公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好。可裁剪,可固化。内核属于抢占式,最多可以管理60个任务。uC/0S II自1992年的第一版(uC/0S)以来已经有好几百个应用,是一个经实践证明好用且稳定可靠的内核。目前国内对uC/0S II的研究和应用都很多。TCP/IP是Internet的基本协议,以其实用性、高效性已经成为事实上的工业标准。嵌入式设备要与Internet网络直接交换信息,就必须支持TCP/IP协议。目前嵌入式设备上TCP/IP方案有很多种,但面向低端应用的开源嵌入式网络平台还很少见。uC/0S II是一个富有开放色彩的RTOS,只要买一本书就可获得源代码,对学校和教育的使用完全免费,商业应用的费用相对也很低。但是它目前的一些第三方TCP/IP支持都是完全商业化的,用户需要付费才能获得,很少给出源代码,这影响了uC/0S II的研究和推广。通过把开放源代码的TCP/IP协议栈LwIP移植到uC/0S II上来,就获得了一套可免费研究、学习的嵌入式网络软件平台。3 开源TCP/IP协议栈LwIP简介LwIP是瑞士计算机科学院(Swedish InSTitute of Computer Science)的Adam Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LwIP的含义是Light Weight(轻型)IP协议。LwIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LwIP TCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端嵌入式系统中使用。LwIP的特性如下:(1) 支持多网络接口下的IP转发(2) 支持ICMP协议(3) 包括实验性扩展的的UDP(用户数据报协议)(4) 包括阻塞控制,RTT估算和快速恢复和快速转发的TCP(传输控制协议)(5) 提供专门的内部回调接口(Raw API)用于提高应用程序性能(6) 可选择的Berkeley接口API(多线程情况下)我们目前使用的是LwIP的最新稳定版V0.5.3。有关LwIP的详细内容,可以参考其代码和网站上的文档。4 LwIP在uC/0S II下的实现4.1 概述LwIP协议栈在设计时就考虑到了将来的移植问题,因此把所有与硬件、OS、编译器相关的部份独立出来,放在/src/arch目录下。因此LwIP在uC/0S II上的实现就是修改这个目录下的文件,其它的文件一般不应该修改。下面分几部份分别说明相应文件的实现原理和过程。具体的代码限于篇幅没有给出,Skyeye网站上有完整的代码和说明。4.2 与CPU或编译器相关的include文件/src/arch/include/arch目录下cc.h、CPU.h、perf.h中有一些与CPU或编译器相关的定义,如数据长度,字的高低位顺序等。这应该与用户实现uC/0S II时定义的数据长度等参数是一致的。#define BYTE_ORDER LITTLE_ENDIAN //ARM7默认为小端存储系统//数据类型长度的定义typedef unsigned char u8_t;typedef signed char s8_t;typedef unsigned short u16_t;typedef signed short s16_t;typedef unsigned int u32_t;typedef signed int s32_t;此外还有一点:一般情况下C语言的结构体struct是4字节对齐的,但是在处理数据包的时候,LwIP使用的是通过结构体中不同数据的长度来读取相应的数据的,所以,一定要在定义struct的时候使用_packed关键字,让编译器放弃struct的字节对齐。LwIP也考虑到了这个问题,所以,在它的结构体定义中有几个PACKED_FIELD_xxx宏,默认的时候这几个宏都是空的,可以在移植的时候添加不同的编译器所对应的_packed关键字。比如在Skyeye(ARM7)上对应gcc编译器的定义:#define PACK_STRUCT_FIELD(x) x __attribute__((packed))#define PACK_STRUCT_STRUCT __attribute__((packed))#define PACK_STRUCT_BEGIN#define PACK_STRUCT_END4.3 sys_arch操作系统相关部份sys_arch.[ch]中的内容是与OS相关的一些结构和函数,主要可以分为四个部份:(1) sys_sem_t 信号量LwIP中需要使用信号量通信,所以在sys_arch中应实现信号量结构体和处理函数:struct sys_sem_tsys_sem_new() //创建一个信号量结构sys_ sem _free() //释放一个信号量结构sys_ sem _signal() //发送信号量sys_ arch_sem _wait() //请求信号量由于uC/0SII已经实现了信号量OS_EVENT的各种操作,并且功能和LwIP上面几个函数的目的功能是完全一样的,所以只要把uC/0SII的函数重新包装成上面的函数,就可以直接使用了。(2) sys_mbox_t 消息LwIP使用消息队列来缓冲、传递数据报文,因此要在sys_arch中实现消息队列结构sys_mbox_t,以及相应的操作函数:
linux操作系统文章专题:
c语言相关文章:
linux相关文章:
tcp/ip相关文章:
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一WinXP的默认协议TCP/IP协议被破坏时的重新安装步骤
作者:佚名
字体:[ ] 来源:互联网 时间:11-01 11:27:04
在XP系统的ghost xp网络组件列表里,有一个Internet 协议,Internet 协议又称为TCP或IP,当它被破坏时如何重置呢?下面有个不错的方法,大家可以尝试操作下
  在使用电脑的过程中,我们都知道在XP系统的ghost xp网络组件列表里,有一个Internet 协议,Internet 协议又称为TCP或IP,该&卸载&按钮显示是灰色&&不可选状态。这是因为TCP/IP协议是Windows XP的默认协议,因此是不能删除。如果在特殊情况下我们需要重新安装TCP/IP协议,那么应该如何操作?
  具体操作方法如下:
  1.首先,单击 &开始&&选择&运行&(如下图)
  2.在运行框里输入 &CMD& 后单击 &确定&(如下图)& & & &&
  3.在命令行模式输入命令 netsh int ip reset C:resetlog.txt 其中,Resetlog.txt记录命令结果的日志文件,一定要指定,这里指定了Resetlog.txt 日志文件及完整路径。(如下图)& & & &
  4.​运行结果可以查看C:resetlog.txt (咨询中可根据用户实际操作情况提供) 运行此命令的结果与删除并重新安装 TCP/IP 协议的效果相同。(如下图)& & & &
  以上,便是我们在遇到特殊情况下,不得不重新安装TCP/IP协议的方法了,以上的操作方法具有一定的风险性,所以在操作最新xp系统下载前记得要先备份电脑的重要数据哦。下面是其它网友的补充:可行的办法一: 1、开始&&运行&&regedit.exe,打开注册表编辑器,删除以下两个键: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Winsock HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Winsock2 2、用记事本打开%winroot%\inf\nettcpip.inf文件,找到: [MS_TCPIP.PrimaryInstall] Characteristics = 0xa0 &------把此处的0Xa0改为0x80 保存退出 3、打开本地连接的TCP/IP属性---添加协议&&从磁盘&&浏览找到刚刚保存的nettcpip.inf或者nettcpqmt.inf(X:\windows\inf\)文件,然后选择&TCP/IP协议&(不是选择那个TCP/IP 版本6)。 经过这一步之后,又返回网络连接的窗口,但这个时候,那个&卸载&按钮已经是可用的了。点这个&卸载&按钮来把TCP/IP协议删除,然后重启一次机器。 4、重启后再照着第3步,重新安装一次TCP/IP协议便可。 5、再重启一次,这时应该可以了,可以照着需要,设置一下IP地址。 可行的办法二: 1、删除注册表键值: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Winsock HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Winsock2 2、点击开始& 控制面板& 网络连接& 本地连接 3、点击属性 4、点击安装 5、选择协议 6、点击增加 7、点击硬盘 8、浏览至%Windir% \ inf文件夹(一般为C:\Windows\inf) 9、点击打开 10、点击确定 11、选择互联网协议(TCP/IP) ,不要选择Microsoft TCP/IP版本6! 12、点击确定 13、重新启动计算机 如果需要重新安装 TCP/IP 以使 TCP/IP 堆栈恢复为原始状态。可以使用 NetShell 实用程序重置 TCP/IP 堆栈,使其恢复到初次安装操作系统时的状态。 方法是:在命令提示符后键入以下命令,然后按 ENTER 键:netsh int ip reset c:resetlog.txt,其中,Resetlog.txt记录命令结果的日志文件,一定要指定,这里指定了 Resetlog.txt 日志文件及完整路径。
大家感兴趣的内容
12345678910
最近更新的内容TCP/IP 协议网络包
TCP/IP协议包是为ARM,Cortex-M系列微控制开发的小型但完整网络协议保,它代码尺寸小,且经过高度优化,能提供良好的网络性能。
TCP/IP协议包是为ARM,Cortex-M系列微控制开发的小型但完整网络协议保,它代码尺寸小,且经过高度优化,能提供良好的网络性能。
&&产品亮点
完整地支持TCP/IP及UDP协议
物理层支持网口及串口(PPP & SLIP)&
包含常用的网络应用-无须而外付费
灵活的尺寸大小-尺寸依赖于需要使用的协议和应用
高速的实施-专为微控制系统定制和优化
可独立的操作-可以不依赖于RTOS独立使用
完善支持Cortex-M1内核器件
支持新的FTP服务器和SNMP代理&
支持Ajax - Asynchronous JavaScript and XML&
支持SOAP - Simple Object Access Protocol
广泛的调试支持
大量的代码案例能帮助快速应用于项目
参考完整TCPnet特点列表
& 使用TCP/IP网络包
TCP/IP包是基于标准的C架构编写的,并且使用MDK-Professional专业版包含ARM编译工具链编译。您只需要在函数中包含一个特殊的头文件和链接就可以在应用中轻松使用TCP/IP协议栈。
注意:TCP/IP网络包仅以库的形式包含在MDK-Professional(专业版)中。其他MDK-ARM版本中不包含该协议栈。
·ARM 官方开发工具
·TI系列板卡
xCortex-A8核心板
Cortex-A8开发板
Cortex-A9核心板
Cortex-A9开发板
·Xilinx系列板卡
xCortex-A9核心板
Cortex-A9开发板
·ATMEL系列板卡
xCortex-A5核心板
Cortex-A5开发板
ARM9核心板
ARM9开发板
·Freescale系列板卡
xARM9核心板
ARM9开发板
·Samsung系列板卡
xCortex-A8核心板
Cortex-A8开发板
Cortex-A9核心板
·NXP系列板卡
xCortex-M4开发板
Cortex-M3开发板
·自主无线模块
xZigBee模块
x计费控制单元
充电控制板
| (C) 2017 Myir
深圳总部: 5 | 北京办事处: 010- | 上海办事处: 021-

我要回帖

更多关于 tcp ip协议三次握手 的文章

 

随机推荐