OSTaskStatHook();OSTimeTickHook();OSInitHookBegln();OSlnitHookEnd();OSTCBInitHook()。其中第一个函
数的编写较其它的函数来说复杂一些。OS_CPu—A.ASM文件中是四个用汇编语言写成的函数是移植过程中最难写的部分OSStartHighRdy();OSCtxSwO;OSIntCtxSw();OSTieklSR()。这些代码的编写可以参考树种的移植例子,也可以登录tJJC/OS—II的官方的网站www.uCOS—II.corn找出相关的移植代码,笔者在移植过程中参看了清华大学曾鸣的代码和在TMS320C62x上移植的代码。可参考文献[8】。
一38一
第口届京、津、沪、渝及全国城市有线电视技术碍讨会论文集
6
LwIP协议栈概述及移植要点
InstituteofComputer
LwlP(LishtWeight
IP
Protoc01)是瑞士计算机科学院(SwedishScience)的Adam
Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/1P协议栈。1wIP既可以移植到操作系统上,又可以在无操作系统的情况下独立的运行。LwIP实现的重点是在保持TCP/IP协议主要功能的基础上减少对RAM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行,这使LwIP适台在低端嵌入式系统中使用。LwIP的特性如下:
(1)支持多网络接口下的IP转发(2)支持ICMP协议
(3)包括实验性扩展的UDP(用户数据报协议)
(4)包括阻塞控制,RTr估算和快速恢复和转发的TCP(传输控制协议)(5)提供专门的内部回调接口(RawxPi)用于提高应用程序性能(6)可选择的Berkeley接121API(多线程情况下)(7)在最新的版本中支持PPP
(8)新版本中增加了IPfragment的支持(9)支持DHCP协议,动态分配IP地址
6,1
与操作系统相关部分
在include文件夹里有建立两个文件夹arch和netff,在netif文件夹里写一个与laa9118if.e文件对应的头
文件langll8if.h,进行函数的声明。在ayeh里有5个头文件,分别是ec.h作系统的头文件OS_CPU.H的定义是~样的。如下:
typedef
unsignedcharu8t;
init.hlib.h
perf.hsys_arch.h。
在cc.h中是一些与编译器有关的数据信息的定义,如数据的长度,字的高低位顺序等。这与在移植斗C/OS-II操
typedeftypedoftypedef
signedchar
sS_t;
t;
unsignedshortul6signed
shortint
sl6_t;
typedef
typedef
unsigned
signedint
u32j;
s32_t;
在lib_arch.c文件中IMP协议栈中用到了8个外部函数,这些函数通常与用户使用的系统或编译器有关。
因此留给用户自己实现。如下:
u16_thtons(u16_tn);u16._tntohs(u16_tn);u32__thtonl(u32_3n);u32jntohl(u32jn);
intint
//16位数据高低字节交换
//32位数据大小头对调
strlen(eonstchar}sIr);//返回字符串长度
stmcmp(coastchar*strl,constchar+str2,intlea);∥字符串比较bcopy(eonstvoid*sFe,void*dest,intlen);
void
∥内存数据块之间的互相拷贝
voidbzero(void*data,intn);//内存中指定长度的数据块清零
在sys_arch.e文件中的内容是与操作系统相关的一些结构和函数,主要分四个部分(1)sys_sem_t信号量
IMP中需要使用信号量通信,所以在sys_arch中应实现信号量结构体和处理函数:
算口届京、津、沪、瀹反全国城市有线电视技术研讨会论文集
struct
一39一
sys_sem_t
sys_sem_new((sys__senl_free()sys..8em—signal()
//创建一个信号量结构//释放一个信号量结构
//发送信号量
sys_arch_sere_wait()//请求信号量
由于v.C/OSII已经实现了信号量0S_EVENT的各种操作,并且功能和LwlP上面几个函数的目的功能是完全一样的,所以只要把trC/OSII的函数重新包装成上面的函数,就可以直接使用了。
(2)sys_mbox_t消息
1wlP使用消息队列来缓冲、传递数据撮文,因此要在sys_arch中实现消息队列结构sys_mbox_t,以及相应的
操作函数:
sys_mbox_new()sys_mbox_free()sys_nrbox_post()sys_arch_mbox_fetch()
∥创建一个消息队列
//释放一个消息队列
//向消息队列发送消息
//从消息队列中获取消息
tmC/OSII同样实现了消息队列结构OSQ及其操作,但是v..C/OSII没有对消息队列中的消息进行管理,因此不能直接使用,必须在IJJC/OSII的基础上重新实现。为了实现对消息的管理,我们定义了以下结构:
typedefstruct
I
OS_EVENT*pQ;
void*pvQEntries[MAX_QUEUE_ENTRIES];
lsys_mbox_t;
在以上结构中,包括OS__EVENT类型的队列指针(PQ)和队列内的消息(pvQEntries)igg部分,对队列本身的管理利用斗C/OSII自己的OSQ操作完成,然后使用I^C/OSII中的内存管理模块实现对消息的创建、使用、删除回收,两部分综合起来形成了LwlP的消息队列功能。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说医药卫生基于DSP的嵌入式Ethernet接入方案设计(2)在线全文阅读。
相关推荐: