基于FreeRTOS的lwip协议栈的移植与测试

所需积分/C币:49 2016-10-14 09:06:40 1.44MB PDF
75
收藏 收藏
举报

基于FreeRTOS的lwip协议栈的移植与测试
计算机应用 《自动化技术与应用》2015年第34卷第11期 Computer Applications 据结构和宏预先进行相关定义。因为操作系统中提供了 int sys_mbox_valid(sys_mbox_t *mbox 信号量和消息队列的通讯方式,而没有提供邮箱,所以, /*检查邮箱可用性* 这里根据消息队列来创建邮箱,用任务来代替线程,之 void sys_mbox_set_ invalid (sys_mbox_t *mbox 后封装成相应形式供LwPP调用,相关代码如下: /*设置邮箱不可用* +t define SYS_ MBOX- NULL (xQueue Handle)0 其次,是信号量的实现。LWIP的信号量用于进程 /*邮箱、信号量定义nu*/ 间的通讯,包括计数信号或者是二值信号,此次移植中 define SYS_SEM_NULL(xSemaphoreHandle0使用的是二值信号量。实际上,对信号量的操作也是通 define sys_ DEFAULT THREAD STACK过队列的形式来实现的。相关操作包括: DEPTH configMINIMAL STACK sIze err_t syssem _new(sys_sem_t *sem, u8_t count typedef xSemaphoreHandle sys_sem_t; *调用 SEmaphore CreateBinary(创建信号量* /*信号量、邮箱、队列的数据类型封装* u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t typedef xQueueHandle sys_mbox_t: timeout) typedef x Task Handle sys_thread_t /*等待指定信号量* 4.1.4文件 sys arch.c的修改 void sys_sem_signal(sys_sem_t *sem) 首先,邮箱的实现。邮箱用于消息的传递,因此需 /*调用ⅹ Semaphoregive(发送信号量* 要存储信息、,并且大部分情况下都是用结构体来储存 void syssem_free(sys_sem_t *sem 然后通过链表的形式把可能相同信息的多条的结构链接 /*释放一个信号量* 起来。大多数操作系统模拟层都支持邮箱机制,使用时 int sys_sem- valid(sys_sem_t sk sem) 可直接调用,而这次移植使用的操作系统为 Freertos, /*检杳信号量的可用性*, 它本身不支持邮箱机制,因此这里需要用队列来模拟邮 void sys sem set invalid(sys sem t *sem) 箱功能,支持消息的投递,投递到邮箱屮的消息只是 /*设置信号量不可用*/ 个指向消息内容的指针。实现程序如下 再次,是多线程创建函数。在lwip网络协议中,多 err_t sys_mbox_new(sys_mbox_tφmbox,int线程的运行方式是通过操作系统模拟层中的多线程创建 函数来头现的,而线程的创建则是通过调用 FreeRtos /*新建邮箱,调用 y Queue create()*/ 操作系统的创建新任务的函数 X Task CreateD来实现, void sys_mbox_free(sys_mbox_t *mbox 具体程序如下: /*回收邮箱,调用 v Queue delete()*/ sys_thread_t sys_thread_new(const. char name void sys_mbox_post(sys_mbox_t *mbox, void lwip_thread fn thread void *arg, int stacksize ata int prio *阻塞进程,投递消息至邮箱mbox*/ 最后,是临界保护函数。在资源互斥的时候,协议 err t sys_ mbox try post(sys_mbox_t*mbox,栈在对资源访问操作的过程中,会产生新的数据覆盖原 void * msg 来的数据,因此需要对资源实施临界保护,具体是调用 /*尝试投递消息至邮箱* 操作系统 FreeRTOS中的开关中断,代码如下 u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox sys prot t sys arch protect(void) void x *msg, u32_t timeout) /*阻塞线程直至邮箱收到至少一条消息,阻塞时间 vPortEnter( 为“ timeout”*/ return l u32_t svs_arch_ mbox tryfetch(sys_mbox_t *mbox, void **msg) void sys_arch_unprotect(sys_prot_t pval) *尝试从邮箱中接收消息* 21994-2016ChinaAcademicJournalElectronicPublishingHouse.Allrightsreservedhttp7/tEchniqu.esotAtomation&ApplicationsI 《自动化技术与应用》2015年第34卷第11期 计算机应用 Computer Applications (void)pval 其中, ethernetif_init函数负责初始化底层网 vPortExitcritical(); 络接冂,10 w_level_output函数负责链路层的发送 任务,它调用了函数 EMACSend_ packet发送数据 此外, sys_Init函数,功能为将操作系统模拟层初包,1ow1 evel init函数调用 EMACInit函数负责对 始化,可根据实际情况编写,可以不执行任何操作,但 网卡初始化, ethernet_ input、low_ level_input和 必须实现 EMACReadPacket、 GetInputPacketLen函数负责建立 4.2LwIP的初始化及相关配置 接收线程,读取数据包以及获取数据包长度的任务 LwIP的初始化工作涉及到的部分有:内存区 PBUF、UDP/TCP以及QS模拟层等各个方面,主要5测试 包括了:系统内存初始化、邮箱链表初始化和TCP/I 完成上述步骤之后移植工作完成,开始测试移植 的初始化工作。 质量LwIP的应用程序通信功能的测试方法为在现有 LwP的配置工作实现网络驱动与LwIP的接口,条件下搭建一个简易的基于浏览器/服务器(B/S)模 是整个网络系统的关键,主要工作包括四个部分,须按式的web服务器,该服务器基于HTTP协汊,通过调 照如下顺序实现 用LwIP协议栈的 netcon aPi应用程序接冂,把测 (1)首先实现 netif init函数,该函数负责建立并试板当做服务器,将编写好的HTML网页程序通过相 配置EMAC接口; 关软件编译成二进制的形式通过数据线下载到CPU的 (2)其次是 netid add0函数,负责添加EMAC接 FLASH中,然后通过GET的方式建立一个接受处理线 口,是其中最重要的工作,需要调用函数 ethernet 程。任务htt_task()的创建流程如图3所示 ini来帮助完成; (3)接着是 netil_set_up()函数,作用为使能网络接 Http tasko创建流程 Process connection0流程 口的通讯处理; Netconn newO Netconn recv (4)最后为 netif set default(函数,负责设置缺省 的~络接口,该函数必不可少。 Netcon bindo 将数据存入 4.3硬件驱动层的实现 底层驱动程序的实现取决于硬件系统使用的网卡芯 Netcon listen 数据处理 片,不同的芯片厂商都会提供丰富的驱动函数,移植工 作只要将这些发送接收接口函数做相应的封装,将接收 Netcon accept o Fs open(查找 的数据包封装为LwlP协议栈熟悉的数据结构,将发送 的数据包封装为芯片熟悉的数据结构就基本可以。在本 文中使用的网卡芯片为DP83848CVV,根据LwIP内核 Process connection Netconn write 文件中给出的驱动文件参考模板 ethernetif.c,在作者给 出的框架内完成与底层硬件相关的部分即可。整个框架 Netcon deleted Netcon close 的实现顺序如图2屮标号所示。 图3httptasko创建流程 首先,初始化底层硬件和LwIP协议栈,之后设置 EthernetifinitoHy Low-level_output H> EMACSend_Packet 4 实验平台的IP地址、子网掩码和网关,绑定 netid的回 Low_level_initOH EMACInitO 调函数。 Ethernetif input o Low_level_input GetInputPacketLen O 其次,如上图,创建一个网络连接结构体,绑定到 指定端口( netcon bind),监听( netcon listen)是否有 EMACReadPackt O 网络连接请求。 图2 ethernet. c文件实现顺序 再次,将实验板的IP地址设置为:192.168.1.86 21992beonguesftAufomaign&ApplicationsnalElectronicPublishingHouse.Ailrightsreservedhttp:/www.cnki.net 计算机应用 《自动化技术与应用》2015年第34卷第11期 Computer Applications 主机IP地址设置为:192.168.187,子网掩码均设置所以通过修改操作系统模拟层、初始化LwIP和编写硬 为255.255.255.0,网关均设置为:192.168.1.1.设置件网络驱动程序将LwIP协议移植进操作系统屮,使嵌 完成后,通过J-link软件或IAR软件编译整个文档并式设备具有基本的网络通信功能,从测试结果来看 且下载,然后将实验板与PC机通过网线相连,将实验嵌亼式设备的通信能力稳定,LwIP的移植达到了既定 板上电。 目标,而且随着技术的进步发展,具备网络通信功能 最后,打开浏览器,输入测试平台的IP地址,通的嵌入式设备具有广阔的应用前景,因此这方面的研究 过浏览器对测试平台上的web服务器进行访问。测试使合嵌入式产品发展的方向,而且随着 FreERtOs操作 用了意法半导体公司官方例程的HTML页面。测试结系统的流行,关于该系统的研究会使设备具有更高的市 果如图4所示。 场价值,而且LwIP协议在通信流程上根据产品的不同 要求还有很多可以改进的空间,值得对其进行更加深入 ·日·口·m··工晶D 的研究。 STH32FIx7 Webserver Demo Based on the IwIP TCP/IP stack 参考文献 STM32 F-4 Series [1]董向阳.基于ARM的LwIP协议栈研究与移植[D] Ms RporT 哈尔滨:哈尔滨理工大学,2009 [2]张翠,邓志良.LwIP协议栈在μC/OS-Ⅱ上的移植 Ccnclenert oe cnsc fanr vt more 和应用[J.微计算机信息,2010,26(8):84-95 Th<?< Rage ALout this denonstration [3 Design and Implementation of embedded network ewtm(·%甲 based on L WIPJ] Journal of Measurement Science and 图4IwP移植测试结果 Instrumentation 2010.S1: 30-33 同时,通过在PC端命令行使用ping命令来对指 [4]傅成龙,严殊.基于uC/OS-T与ARM平台的 定的IP地址进行了10000 ping通信测试来模拟测试LwP移植J西南科技大学学报,20.243):71-74 [5]王祖云,杨思国,王建伟等.嵌入式LwIP协议栈 实际通信效果,得到 ICMP reply响应,测试结果表明的移植与测试研究[.计算机与数字工程,2014,(02):272 通信情况良好,丢包率为0.02%,往返行程的估计时间275,318 最长为2ms,最短为0ms,平均为ms,数据包可以被正 6]韩德强,杨淇善,王宗侠等.基于μC/○S-Ⅲ的LwIP 常接收和发送,如图5所示。因此,LWIP的移植工作 协议栈的移植与实现[].电子技术应用,2013,39(05):18-2 取得成功。 门杨辉.基亍uC/OS-Ⅱ的LwP网络协议移植[J.中 国科技信息,2011,(7):99-100 stem32ycmd.exe 8]余晓光.基于实吋操作系统 reeRTOS的Lwip协议 的移植研究D].昆明:昆明理工人学,2013 [9]张龙彪,张果,土剑屮等,嵌入式操作系统 FreeR'T 0S的原理与移植实现[J.信息技术,2012,(11):31-34. 92.168.1.86的回 =32时旧< ns TIL-255 2.168.1.856的Ping统 收=9998,丢失=2(8z丢失 USers Nwl 图5ping通信结果 6结束语 由于 FreeRTos操作系统本身不带TCP/P协议栈,2念作者简介:张文亮(1989)男,硕士研究生,研究方向:系统 21994-2016ChinaAcademicJournalElectronicPublishingHouse.Allrightsreservedhttp7/tEchniqu.esotAtomation&ApplicationsI

...展开详情
立即下载
限时抽奖 低至0.43元/次
身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
  • 分享王者

关注 私信
上传资源赚钱or赚积分
最新推荐
基于FreeRTOS的lwip协议栈的移植与测试 49积分/C币 立即下载
1/0