您的位置 首页 观点

单片机的TCP/IP的完成与UNIX的不同

TCPIP最先是在UNIX系统里实现的,后来的LINUX、DOS、WINDOWS也实现了TCPIP,随后TCPIP协议也被移植到其它嵌入式的处理器上,例如8位的MC

TCP/IP最先是在UNIX体系里完结的,后来的LINUX、DOS、WINDOWS也完结了TCP/IP,随后TCP/IP协议也被移植到其它嵌入式的处理器上,例如8位的MCS51单片机、AVR单片机,16位的ARM、C166以及32位的MIPS、ARM等芯片上。 TCP/IP协议的最底层IP层,许多界说都是16位或32位的,例如源IP地址(32位)意图IP地址(32位),校验值(16位),特别是较验值,是以16位为单位进行核算的,这样使得可以处理16位、32位运算的CPU,比方80286、80386……,ARM、MIPS、DSP,就有很大的速度上的优势。而8位机MCS51处理则会慢许多。

  由于指令的原因,以及资源上的原因,在UNIX上完结的TCP/IP协议的原代码并不可以直接移植到8位的单片机上。最前期的LINUX1.0版的内核是最小的完结TCP/IP的操作体系,它的程序的巨细大概在1兆字节。而现在的红旗LINUX,红帽子LINUX,内核多达几十兆,整个体系要几张光盘来装。前期的LINIX由于小,而被移植到掌上电脑,PDA等产品中。 单片机的程序空间是极为有限的,直接寻址的空间仅64K字节,这跟电脑的存储空间比较要差几个数量级。除了程序空间小之外,可用的内存RAM也是十分小的,最多只能扩64K的RAM,而电脑的RAM至少在1兆以上。单片机的运算速度也极为有限,一般只要2MIPS,而电脑上的处理才干在100MIPS以上。
  有些人说到有没有必要在单片机上完结TCP/IP的问题。由于TCP/IP是一种规范,以太网也成为局域网的规范。在许多状况下运用以太网和TCP/IP,可以简化结构。比方现在较热的智能小区,由于布线的原因,不能为每个家庭布许多线,而以太网的8芯双绞是必定有的。例如宽带上网,是直接经过以太网的,假如你制作的设备,比方安全产品,长途抄表产品,家居智能产品可以走以太网的话,可以运用现成的以太网络。但假如走其它网络,比方RS485、CAN单线、LONWORKS等,那么需求别的布线。布线是杂乱的,还涉及到消防安全等。从本钱看,用以太网完结联网要比CAN、LONWORKS等更为廉价,集线器、交换机现在都十分廉价,并且将来有三网合一的趋势,电话、电视、核算机三网合一。将来的趋势或许是高速的以太网的全国,电话信号、电视信号、联网都在以太网上跑。尽管现在还未能完结,可是这种趋势是不可防止的。
   有网友说到就算要运用以太网,也没有必要跑TCP/IP。那么为什么要跑TCP/IP呢? TCP/IP是一规范,这个规范使得数据传输不必定是要局域网,而可以在互联网、跨区域跨国界。例如你在某一区域安装了许多监控产品,但数据中心或许不设在那个区域,而设在其他区域。TCP/IP有两种协议TCP和UDP;TCP确保了数据传输的正确性,(假如你的数据只跑以及网层,那么你的数据完好性是要你的编程来确保的,校验的核算。数据包的丢掉需求你手艺处理,而TCP把这些一切你要处理细节都帮你处理了。UDP可以面向播送的、视频的、音频的等方面的运用。完结TCP/IP的协议的优点是可以一致渠道,比方智能小区的产品,假如咱们都恪守TCP/IP的协议,那么咱们的产品才干兼容,假定一个大型的智能社区,这个社区或许由多家设备供货商进行建造,或许有某些厂商做渠道、做软件,一些厂商做硬件。假如咱们恪守TCP/IP协议,各自的长途抄表产品,智能防盗产品就有或许兼容,对地产开发商来说,可以挑选多个供货商,有利于竞赛,也防止某个厂家关闭形成严重影响。
   题外话说的多了,仍是回到本章要谈的内容吧。由于单片机与电脑的不同很大,两者的完结有很大的不同。在电脑里编写TCP/IP程序,你可以不考虑代码巨细、代码速度,但在单片机上这些都是你要考虑的问题。 归纳来说,单片机完结与UNIX完结TCP/IP有如下差异:   (1)、操作体系。不论是WINDOWS、UNIX、LINUX,它们都有一个多任务操作体系,这使得代码编写简略化,而在单片机上,由于资源的原因而无法运用多任务操作体系,这使得代码结构变为次序履行+硬件中止的方法,而在电脑里却可以并发地履行。对程序履行结构,单片机要考虑更多。
   (2)、内存分配。WINDOWS或UNIX的内存分配是动态的,根据需求随时分配,随时吊销 。咱们阅览一些关于LINUX、UNIX的书,它们都是mbuf的存储结构。mbuf是一个存储链,这个链可以动态地添加和减小。比方在数据包很少的状况下,UNIX分配一个2K字节的缓冲区或许就够用了,但假如数据包许多,就有或许要分配64K乃至更多的缓冲区,可分配的内存要根据CPU的可用内存来调整。 可是在单片机却不可以这样做。一个最大的以太网数据包有1500多个字节,分配一包的缓冲区就要1.5K字节,而一般完结TCP/IP的单片机只外接一块32K字节的RAM。而这32K字节的RAM要被各个协议所用,而不仅仅是寄存收到的数据包。一般的做法是分配一个256×6=1536个字节的RAM来寄存收到的以太网数据包。收到一包就处理一包。而UNIX却可以收许多包才处理。在单片机里,寄存收到的以太网数据包的RAM是固定的,而不是动态分配的。一切UNIX关于内存办理、内存分配、mbuf的结构在单片机里并不适用。这些代码对单片机是无用的。
   (3)、指针。在电脑里,指针只要一种,便是指向某一地址的RAM,而在单片机里指针有几种:
   1、 指向外部RAM的指针 例uchar xdata *p 运用指令 movx @dptr 占二个字节
   2、 指向程序ROM的指针 例uchar code *p 运用指令 movc 占二个字节
   3、 指向内部的RAM的指针 例uchar data *p 运用指令 mov @ri 占一个字节
   4、 指向外部RAM的分页指针 例uchar pdata *p 运用指令 movx @ri 占一个字节
   5、 一般指针,可以指向以上的任何一种 占三个字节
   6. 还有其它用于分组切换的指针。
  在电脑里,一切程序都必须先放在RAM里才干运转,所以它的指针只要一种状况,便是指向RAM。而单片机的结构和电脑的结构有很大不同,指针类型许多,对指针运算的速度也纷歧样,由于第5种指针”一般指针”运算很慢,一起又需求占用许多程序空间,这使得指针运算不能从UNIX源代码直接移植到单片机上,而UNIX完结TCP/IP的源代码中,用的最多的便是指针,而在单片机里一般要求少用指针,或运用特定类型的指针。这运用UNIX的源代码需求作许多的改动。
  (4)、参数传递。在UNIX完结的TCP/IP源代码中,一般有许多的参数传递,而在单片机里答应传递的参数是有限的(由于遭到内部RAM的约束),一起参数传递的进程要糟蹋程序代码空间,也下降单片机履行速度。所以在单片机的完结里,一般不要做太多的参数传递,而多运用公共的全局变量来完结调用的进程。这种状况下,UNIX的一般源程序是相对独立的,受其它函数或变量的影响很小,而单片机里各程序的相互依赖程度要大。由于在单片机里往往同享某一数据、某一变量。
  (5)变量界说。UNIX和KEIL C51尽管都是C言语,但两者又有所不同,关于一些变量的界说,两者却不能通用。例如,单片机的特别寄存器界说,sfr sfr16 sbit等,在规范C里是没有的。在规范C里支撑的结构,在KEIL C里也有或许不支撑,比方一些C++的语法。在处理上的特别性,也或许纷歧样,比方IP地址类型,在UNIX里一般将IP地址界说为数组:
uchar ip[4]; 而在单片机里,我的界说是
union IP_address_type{uchar bytes[4];
uint words[2];
ulong dwords;}
IP 被界说为共用体,而不是简略的一个数组。为什么要这样做,是由于单片机处理的特别性,例如比较两个IP地址IP1,IP2是否持平,假如运用数组,比较是费事的: 要写成 if(IP1[0]==IP2[1])**IP1[1]=IP2[1]**…… 用共用体可以简化为
if(IP1.dwords==IP2.dwords)…… 有时候,咱们又要把IP地址按16位来核算,比方较验和核算,那么IP地址按16位加可以写成: IP.dwords[0]+ IP.dwords[1], 有时,咱们又要对IP地址按字节赋值,比方IP地址从24C02里读出来,需求按字节赋值:可认为 IP.bytes[0]=×× IP.bytes[1]=×× IP.bytes[2]=×× IP.bytes[3]=××
假如不作这样的界说,运算将杂乱许多。并且一些编译会认为类型紊乱而无法编译。 在单片机里运用共用领会简化许多。而在UNIX里要对这些值作改动,一般是运用指针进行的。在电脑里,用指针运算是便利的,并且速度也快,但在单片机里,却不可以便利地运用指针。 在UNIX里的一些结构类型的界说都要被改写。这样也使得UNIX的源代码不能直接用在单片机上。
   (6)、协议支撑。在UNIX里可支撑比较完好的TCP/IP协议,但在单片机里无法做到,这是由于单片机底子没有满足的代码空间来支撑这些协议。一般在单片机里完结与需求有关的部分,而不运用的协议则一概不支撑。例如文件同享SMB协议,在UNIX、WINDOWS都支撑,但单片机上却没有必要。一般只能在单片机中完结:ARP、IP,ICMP、TCP、UDP这些协议,而更高层的协议,http、smtp、ftp一般是不需求支撑的。尽管有些单片机例如AVR上网计划完结了http、smtp、ftp协议,但咱们认为实用性不太,由于AVR上网计划用的是MEGA103,而该芯片要150元左右,昂扬的造价使得AVR上网计划没有得到广泛的运用。单片机运用的TCP/IP协议大多是为了完结数据收集和数据传输,而不是网页阅览、文件传输这些功用。就对某一协议而言,例如ARP协议,UNIX体系支撑以太网、令牌环等网络的ARP,但单片机里只支撑以太网,也便是说,关于某一协议,也有或许要作简化。IP包最大可认为65K,可以分段传输,而在单片机里底子无法包容如此大的数据包,因而一般是不支撑分段的。单片机一般选用发送小数据包的方法,以防止分段。
   (7)、硬件接口。在UNIX或WINDOWS里,对网卡驱动无一例外都是选用中止方法。而在单片机的运用中,大部份的计划都是查询式的。由于电脑的处理速度快,一次中止的处理时刻也很短,不会影响体系内的其它中止。但在单片机里就不行了,处理一次中止,收取一个数据包一般要几毫秒的时刻,这将封闭其它中止的产生(只要高优先级的中止可以履行),而单片机往往还存在其它一些中止,比方串口按收中止,A/D条件中止、键盘中止等需求被履行,这就使得耗费时刻长的网卡中止改为查询式履行。在电脑里,对网卡的驱动相对简略,而在单片机里需求处理的工作更多。比方缓冲区溢出,阅览一些驱动程序源代码,你或许发现在电脑里的一些程序底子没有处理溢出的代码。由于电脑履行快,网卡缓冲区的溢出几乎是不会产生的,不要说10M网卡,便是100M网卡,电脑也可以很快处理。电脑往往选用即插即用方法来驱动网卡,而单片机却不能这样做,由于即插即用要许多代码来完结,而运用跳线方法,电脑里驱动NE2000的网卡,一般都是用16位DMA的方法,而在单片机里却只能用8位DMA方法。这也运用UNIX对网卡驱动的代码不能直接移植。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/317845.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部