- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
论文-LWIP移植RTOS
前言
二.硬件平台
EVK1100开发板
USB摄像头
三.软件
freertos移植。
Lwip在freertos移植。
考虑到自己编写TCP/IP实现在开发周期和性能稳定性上的限制,而且开放代码的TCP/IP协议栈在性能上有保证和免费开源的优点,因此选择把FREERTOS与免费TCP/IP模块相结合的方法实现FREERTOS的网络功能。
LwIP的含义是Light Weight(轻型)IP协议。LwIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LwIP TCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在嵌入式系统中使用。
LwIP的进程模型如下:所有TCP/IP协议栈都在一个进程当中,这样TCP/IP协议栈就和操作系统内核分开了。而应用层程序既可以是单独的进程也可以驻留在TCP/IP进程中。如果应用程序是单独的进程,可以通过操作系统的邮箱、消息队列等和TCP/IP进程进行通讯。如果应用层程序驻留在TCP/IP进程中,那应用层程序就利用内部回调函数接口(Raw API)和TCP/IP协议栈通讯。对于FREERTOS来说进程就是一个系统任务。可以看到整个TCP/IP协议栈都在同一个任务(tcpip_thread)中。应用层程序既可以是独立的任务,如tftp--thread,tcpecho_thread),也可以在tcpip_thread中利用原始接口(Raw API)和TCP/IP协议栈通讯。
LwIP协议栈在设计时就考虑到了移植问题,已把所有与硬件、OS、编译器相关的部分独立出来,放在/src/arch目录下。因此LwIP在FREERTOS上的实现就是修改这个目录下的文件。
数据类型定义
在LwIP的头文件/src/arch/include/arch目录下cc.h、cpu.h、perf.h文件中有一些与CPU或编译器相关的数据定义(如数据长度,字的高低位顺序等)。这应该与FREERTOS定义的数据长度等参数是一致的。
将cpu.h中的宏定义BYTE_ORDER修改为:
#define BYTE_ORDER LITTLE_ENDIAN即AT32UC3A默认为小端存储系统。
修改cc.h中数据类型长度的定义:
typedef unsigned char u8_t;
typedef signed char s8_t;
typedef unsigned short ul6_t;
typedef signed short s16_t;
typedef unsigned int u32_t;
typedef signed int s32_t;
修改cc.h中宏定义:
一般情况下C语言的结构体struct是4字节对齐的,但是在处理数据包的时候,LwIP使用的是通过结构体中不同数据的长度来读取相应的数据的,所以在定义struct的时候使用_packed关键字,让编译器放弃struct的字节对齐。LwIP在它的结构体定义中有几个PACKED_FIELD_xxx宏,默认的时候这几个宏都是空的,在移植的时候要添加不同的编译器所对应的_packed关键字。
#define PACK_STRUCT_FIELD(x) x
#define PACK_STRUCT_STRUCT _packed
#define PACK_STRUCT_BEGIN
#define PACK_STRUCT_END
操作系统相关部份
LwIP为了适应不同的操作系统,在代码中没有使用和某一种操作系统相关的系统调用和数据结构,而是在LwIP和操作系统之间加了一个操作系统封装层。操作系统封装层为操作系统服务(定时,进程同步,消息传递)提供了一个统一的接口。与操作系统移植有关的内容可以分成以下3个部分:
a、通信与同步-
LwIP采用信号量(semaphone)和消息队列(Message Queue),作为通信与同步机制。在FREERTOS有类似的机制,这样就可以方便地对LwIP的相关函数进行重新包装。下面对这两者分别进行介绍:
1)sys_sem_t信号量
LwIP中需要使用信号量进行同步,所以在sys-arch中应实现信号量结构体sys_sem_t和处理函数:
sys_sem_new() //*创建一个信号量*//
sys_sem_free() //*释放一个信号量*//
sys_sem_signal() //*发送信号量*//
sys_sem_arches_sem_wait() //*请求信号量*//
由于FREERTOS已经实现了信号量OS_EVENT的各种操作,并且功能和LwIP上面几个函数的目的功能是完全一样的,利用下面的定义:
您可能关注的文档
最近下载
- 海口市美兰区健身俱乐部会员健身现状的调查与研究.doc VIP
- 第2讲《办好中国的事情关键在党》(课件)《学生读本(小学高年级)》.pptx VIP
- 第1讲《伟大事业都始于梦想》(课件)《学生读本(小学高年级)》.ppt VIP
- 2017初中生物会考最全知识点复习资料(必过).doc VIP
- 儿童呼吸系统疾病雾化治疗合理应用专家共识.pptx VIP
- 铝厂熔铸车间安全常识.pptx VIP
- 《中华人民共和国国家安全法》培训与解读课件.pptx VIP
- 第六章 学习法治思想提升法治素养练习题及答案.docx VIP
- 五年级上册小学高年级学生读本第2讲《办好中国的事情关键在党》教案.doc VIP
- 《公共安全教育》课件.ppt VIP
文档评论(0)