微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机的TCP/IP的实现与UNIX的不同

单片机的TCP/IP的实现与UNIX的不同

时间:11-30 来源:互联网 点击:

机只外接一块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协

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top