基于S3C2440的LWIP-1.3.0和DM9000在UCOS-II-2.8.6上的移植

发布者:MusicLover123最新更新时间:2024-08-21 来源: elecfans关键字:S3C2440  DM9000  6  移植 手机看文章 扫描二维码
随时随地手机看文章

经常在Linux上跑,一时间跳到UCOS,感觉有点不习惯。首先是编译器,GCC是个不错的选择,但GDB调试太麻烦。ADS和仿真器结合是个十分不错的调试环境,于是,将代码就搬到ADS上,这下完全脱离Linux,整个开发过程都在Windows进行。其实是UCOS太简洁了,时钟、接口很多都需要自己开发…小弟对UCOS不是很熟,下面是移植过程的一些小结,希望对有需要的朋友带来些帮助。关于UCOS在S3C2440上的移植,可以参考《uCOS-II在S3C2440上的移植》一文。
1.
寻找最新代码,总结前辈经验,就是下载LWIP的源代码和Michael Anburaj基于S3C2410的移植版。
http://download.savannah.nongnu.org/releases/lwip/contrib-1.3.0.zip
http://geocities.com/michaelanburaj/downloads/lwip_ucos_1.11.zip
http://download.savannah.nongnu.org/releases/lwip/lwip-1.3.0.zip
2.
解压缩,整理工程代码。
LWIP-1.3.0独立一个目录,与mcu相关的移植移植文件放置在s3c2440/lwip目录。另外dm9000的驱动也防止在与mcu相关的目录s3c2440/dm9000。在app目录添加一个简单的http server文件httpserver-netconn.c(从contrib-1.3.0.zip中提取)。
3.
添加lwipopts.h
1.3.0版的LWIP将配置文件独立出来,对组件的配置十分方便。首先定义LWIP_PROVIDE_ERRNO,让LWIP自己提供错误号。然后是TCPIP_THREAD_STACKSIZE栈大小和TCPIP_MBOX_SIZE邮箱大小。接着是LWIP进程的优先级,主要有TCPIP_THREAD_PRIO(TCPIP任务,LWIP核心)和DM9000_THREAD_PRIO(网络芯片轮训任务,这里没采用中断方式接收)。
另外,还有些十分重要的三个参数:MEM_ALIGNMENT、ETH_PAD_SIZE和TCP_MSS。MEM_ALIGNMENT指定内存池分配的地址对齐字节,在S3C2440上访问32位地址需4字节对齐。ETH_PAD_SIZE指定以网络包头部的填充大小,否则也会引起地址对齐问题。关于这部分,可以参考《LWIP-1.3.0在S3C2440平台UCOS-II-2.8.6系统上的移植过程DEBUG》一文。最后一个参数是TCP_MSS,指定网络包的分段大小,主要目的是将大包切小,变成一个个的小包。奇怪的是,小包除了效率低点,应该不会导致通讯失败的呀?经过部分测试,切割后的小包偶尔会丢失,这里没有深入追踪,欢迎朋友们帮忙分析一下。
包大了,顺便把LWIP的缓冲也设大一点,充分利用S3C2440配置的64M内存。
#define TCP_SND_BUF
2048
#define MEM_SIZE
2048
#define MEMP_NUM_PBUF
32
4.
添加网络接口
我的开发板上配置的网络芯片是DM9000,在U-BOOT上已工作得很好。所以,直接借U-BOOT的驱动过来,重新包装一下,OK。现在先来看看LWIP需要的网络接口,主要参考lwip-1.3.0netifethernetif.c文件,分别是初始化接口ethernetif_init()、包发送接口low_level_output()和包接收接口ethernetif_input()。
其中ethernetif_init()负责网络的接口的初始化,如底层收发包函数、MAC地址和硬件初始化等,另外,网络的接收采用轮训方式,这里还需创建一个定时收包的任务sys_thread_new('DM9000IN', poll_input,…)。ethernetif_input ()就是轮训任务调用的收包函数,负责查询是否有以太包,有则将其传递到ethernet_input(p, netif),然后再分发到各个协议,如ARP,IP,PPP等。
low_level_output()就是负责将上层传来的网络包通过DM9000发送出去。
5.
重新包装DM9000驱动
上面提到的LWIP网络接口与DM9000的沟通需要以下几个函数(也分为初始化、接收和发送三类):
int dm9000_eth_init(struct netif *bd);
void dm9000_eth_send(volatile void *, int);
int dm9000_eth_send_done(int);
int dm9000_eth_rxlen(void);
int dm9000_eth_rx(U8 *rdptr, U16 RxLen);
int dm9000_drop_frame(U16 RxLen);
其中,只有发送和接收两个函数需要改动。LWIP上层传给low_level_output()的数据包,将根据MSS和MTU等值切割成一个个的小包,分别填充到链表pbuf里。

关键字:S3C2440  DM9000  6  移植 引用地址:基于S3C2440的LWIP-1.3.0和DM9000在UCOS-II-2.8.6上的移植

上一篇:S3C2440 ADC(模/数转换器)
下一篇:基于S3C2440和DM9000移植LWIP(一)

推荐阅读最新更新时间:2024-11-08 10:40

京东方预计2017年报净利75-78亿元,同比增约3
集微网消息,1月26日,京东方发布2017年业绩预告,预计公司2017年全年净利润为75.00亿元~78.00亿元,上年同期为18.83亿元,同比增长298.39%~314.33%。 京东方表示,2017年公司进一步推动战略转型升级,坚定执行DSH事业战略,持续推进显示产品结构优化,快速布局新业务领域;同时,随着核心技术创新能力的提升,传统产品市场份额继续维持在较高水平,新应用细分市场拓展成果显著。 2017年前三季度,京东方面板出货数量已占到全球25%,位列全球第一位。随后,在2017年10月底,京东方6代柔性AMOLED生产线投产;12月份,京东方投资建设的全球首条10.5代线近日也交付了首批产品,成为全球显示产业新的里程碑。
[手机便携]
stm8 硬件SPI
第一步:stm8 SPI简介 在配置SPI相关寄存器时要注意时钟信号的相位和极性。 这次我们使用的是stm8驱动SO-8封装的DAC8830,使其输出一个方波。 DAC8830引脚说明和时序: CS是片选信号,低电平有效。 SCLK在下降沿的时候启动传输,上升沿的时候传输完成。MSB在前,就是高位在前。 实际电路是按照DAC8830数据手册的典型应用电路做的。 只是输出部分没有加运放,VREF引脚没有连接。 再看stm8的SPI主模式: 第二步:SPI相关寄存器 设置时钟极性CPOL和相位CPHA仅需设置SPI_CR1的第0位和第1位。 第三步:具体实现
[单片机]
stm<font color='red'>8</font> 硬件SPI
分析称6月份季度Mac销量有望增长22%
      下周,苹果将要宣布公司的季度营收报告。分析师预计,Mac出货量的增长幅度有望超过22%,尽管6月美国市场对Mac的需求不多,但Mac在美国海外市场有所增长。   英国巴克莱投资银行的分析师Ben Reitzes重申了他们对苹果股票的增持评级,他预计苹果股票每股盈利可达到5.44美元,低于华尔街普遍的预计。   Reitzes称,由于苹果即将更新MacBook Air,大部分顾客持金坐等更新,6月,Mac在美国市场的需求量有所降低。然而,Mac在美国境外市场的销量有所增长,因此从整个6月份季度来看,Mac出货量也有望增长22.5%。苹果在4月和5月出货量平均增长15%。   3月份季度,苹果公布
[手机便携]
三星Note 8皇帝版配256GB容量 国行最快9月8日发布
腾讯数码讯(水蓝)三星GALAXY Note 8看起来注定扮演着“堆料狂人”的角色,在陆续传出或将首发骁龙836处理器和配备3倍光学变焦的双摄像头等规格之后。爆料人@i冰宇宙又在微博上披露称,目前韩国版本的三星GALAXY Note 8正测试256GB容量版本,很有可能会有8GB RAM+256GB ROM的真皇帝版与我们见面,而在配色方面则韩国版本已经确定了黑、蓝、灰等三种色彩款式。 将推真皇帝版 根据爆料人@i冰宇宙在微博上的说法,目前韩版的三星GALAXY Note 8正在测试256GB容量版本,预计有可能带来6GB RAM+64GB ROM存储组合的普通版和8GB RAM+256GB ROM的“真皇帝版”。同时这位
[手机便携]
AT91SAM3S4C核心开发板的电路图及相关知识
无论写什么嵌入式软件,我们都应该首先对硬件有所了解,这样更有助于我们写出高效精简的程序代码。本次活动我们使用的硬件平台是有悠龙公司提供的uTenuxAT91SAM3S4C开发套件,在悠龙公司的主页可以找到该开发板的电路图以及对应的说明文档。 打开电路图,第一页是对uTenuxAT91SAM3S4C开发板的整体结构介绍。该开发板是以ATMEIL公司的Cotex M3处理器 ASM3S(100脚)为核心控制器的。在控制器周围连接有相当多的外设,足够我们学习开发,另外悠龙公司也提供了对应的底层板级支持包,在编程控制方面,我们可以直接那来参考应用。 UTenuxAT91SAM3S4C开发板板载的外设单元有AT91SAM3S4C的复
[单片机]
AT91SAM<font color='red'>3</font>S4C核心开发板的电路图及相关知识
基于S3C2440的LED背光源节电系统设计方案
引言 节能环保技术是当前世界所关注的焦点,在液晶显示模组中,背光源的功耗最高可占总功耗的50%以上。尤其在10in 以下显示产品如手机、PDA、MP3 等便携式设备中,基本采用电池供电,功耗问题尤为突出。为有效降低液晶显示器背光源的亮度,以达到节电目的,本文在ARM 开发平台上实现了一种基于直方图变换的背光源调光方法,实验证明,本文提出的方法在失真度为5%的情况下可实现背光节电约35%. 1 背光源调光方案 以TFT 液晶面板结构为例,包括背光、偏光片、液晶阵列、彩色滤光片等部分,人眼所感知的显示图像为上述各部分的综合效果。假设背光亮度归一化后设为b(为 区间实数),0 对应于背光关闭情况,1 对应于背光发光亮度最大情
[电源管理]
基于<font color='red'>S3</font>C2440的LED背光源节电系统设计方案
PIC8位系列单片机应用的分类和特点
PIC 8位单片机具有指令少、执行速度快等优点,其主要原因是PIC系列单片机在结构上与其它单片机不同。该系列单片机引入了原用于小型计算机的双总线和两级指令流水结构。这种结构与一般采用CISC(复杂指令集计算机)的单片机在结构上是有不同的。 指令总线为什么不用八位,而要增加位数呢?这是因为指令的位数多,则每条指令包含的信息量就大,这种指令的功能就强。一条12位、14位或16位的指令可能会具有两条八位指令的功能。因此PIC系列单片机的指令与CISC结构的单片机指令相比,前者的指令总数要少得多(即RISC指令集)。
[单片机]
Linux 3.3.0移植到S3C6410开发板上之一
这里仅仅是移植成功内核,可以挂载文件系统运行,至于驱动会陆续添加。 第一步:到内核官网上下载最新的内核,我下载的是linux-3.3-rc3.tar.bz2。 第二步:解压内核,进入arch/arm/mach-s3c64xx目录下,看到不少6410的板级文件,我们这里选择mini6410开开展工作,在目录下将mach-mini6410.c文件复制一份,命名为:mach-jfj6410.c。这里我们将文件里面关于mini6410的字样都修改为jfj6410.但是这里要注意,MACHINE_START(JFJ6410, JFJ6410 )这里的JFJ6410要使用大写,稍候说明为什么。大家都知道在一个目录下添加了文件后,都应该
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved