历史上的今天
今天是:2025年03月05日(星期三)
2018年03月05日 | uIP在51单片机上的移植
2018-03-05 来源:eefocus
uIP其主要是为8位和16位系统设计的,程序在编写时就考虑到了移植问题。uIP的主要文件包括uip.c和uip_arp.c。
(1)移植的基本过程。
针对所用编译器的类型更改定义数据类型,底层RTL8019AS芯片的驱动和实现应用层代码,系统定时器接口等。下面分别予以说明。
数据类型的定义:
typedefunsignedcharu8_t;typedefunsignedshortu16_t;typedefunsignedshortuip_stats_t;由于KeilC编译器默认情况下的编译模式为small,变量的定义在内部RAM中,编译时编译模式应改为Large,即变量的定义在XDATA中。
(2)RTL8019AS的驱动。
主要包括以下内容。
①etherdev_init()完成系统上电初始化,包括设定RTL8019的物理地址和IP地址等,设定收发缓冲区的位置和大小等。
②etherdev_send()完成数据的发送。
⑨etherdev_read()完成以太网数据的接收。底层网络设备驱动程序与uIP协议栈通过两个全局变量实现接口:变量uip_buf为收发缓冲区的首地址;uip_len为收发的数据长度。
etherdev_send函数将uip_buf里的uip_len长度的数据发送到以太网上。recv函数将接收到数据存储到uip_buf中,同时返回uip—len的值。
④etherdev_timerO_isr()定时器1中断函数为系统提供时钟定时。
51系列单片机一般有2或3个定时器,本移植中选用定时器1产生定时时间,为ip_perioDIC()函数的执行提供基准,另外还对ARP表项,TCP连接超时等提供时间基准。
RTL8019AS初始化、收发包的详细过程在12.6节中已经详细介绍过,在此不再赘述。移植后的文件如下:

uIP的设置在uipopt.h头文件中。在该文件中用户根据具体的实际条件设置uIP的IP地址,MAC地址,网络掩码,网关地址。另外还包括可建立的最大连接数,端口是否启动UDP协议功能等,在具体的应用中可以参考uIP的说明文档,其中都有详细的说明。
史海拾趣
|
SystemC一套将C++扩展为硬件描述语言的Class Library 注:转牛人04年的贴 这几日接接触SystemC,有些感触: 1. SystemC 是一套C++ Class Library,将C++扩展成了一门硬件描述语言(HDL)。我感觉,学习SystemC至少要懂两样东西:C++、一门硬件描述语言。我熟悉C++,并且熟悉Verilog,因此学SystemC能举一反三、触类旁通。 ...… 查看全部问答> |
|
在公共场合如卫生间内,你很少会见到有提供肥皂洗手的,毕竟与多人共用一块肥皂那是件很让人难以接受的事情。设计师WooJae Lee等想了个办法,带来了这个液体肥皂机:Re-Bubble。只需将肥皂从顶部像投币一样投进去,经过机器操作,管道里就存满了泡 ...… 查看全部问答> |
|
使用V5时将一个普通的IO当作全局时钟使用了,结果在MAP时,发生错误:ERROR:Place:645 - A clock IOB clock component is not placed at an optimal clock,改了系统的环境变量,加BUFG都无法解决,请问该如何解决?主程序如下: module ad_uart ...… 查看全部问答> |
|
上周就已经把CAN通讯调通了,不管是查询模式还是中断模式都跑的很好,这周给板子加了个UCOS,2.86版本的。然后把CAN通讯加上去,CAN数据死活发不出来。用lookback模式自测,发现可以收到自己发出去的数据,但是用示波器测试发送脚,就是没见到 ...… 查看全部问答> |




