下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ipv6的嵌入式设计与实现芯片接收到数据包后,放入缓冲区buf 中交由上层协议处理。然后对数据包举行推断。过程下:for(c=0;cdestipaddrc != hostaddrc) stat(+stat.ip.drop);goto drop; 接收数据包后,检查下一个报头中的协议类型,假如是tcp 或icmp 协议,则分离转向其处理程序,否则丢弃。if(buf-proto = proto_tcp) /* check for tcp packet.if so,jump to the tcp_input label.*/goto tcp_input;if(buf-proto = proto_ic
2、mp) /*check for icmp packet.if so,jump to the icmp_input label.*/goto icmp_input;goto drop;3 ipv6 在arm 中的移植ipv6协议栈在设计时就考虑到了移植问题,已把全部与硬件、os、编译器相关的部分自立出来4。因此,ipv6 在本文讨论的系统中的移植就是针对lpc2210 硬件平台、uc/os-ii 操作系统和ads1.2 的编译器对其举行相应的修改。1 数据类型定义ipv6 的数据定义应当与uc/os-ii 定义的数据长度类型是全都的。typedef unsigned char uint8;/*
3、无符号8 位整型变量*/typedef signed char int8;/* 有符号8 位整型变量*/typedef unsigned short uintl6;/* 无符号16 位整型变量*/typedef signed short int16;/* 有符号16 位整型变量*/typedef unsigned int uint32;/* 无符号32 位整型变量*/typedef signed int int32;/*有符号32位整型变量*/typedef float fp32;/* 单精度浮点数(32 位长度)*/typedef double fp64;/* 双精度浮点数(64 位长度)*
4、/2 操作系统相关部分(1)信号量ipv6 中需要用法信号量举行同步。信号量事实上是一种商定机制,在多任务内核中普遍用法。信号像是一把钥匙,任务要运行下去,得先拿到这把钥匙。假如信号已被别的任务占用,该任务被挂起,直到信号被当前用法者释放。普通地说,对信号量只能实施三种操作:初始化(也可称作建立)、等信号(也可称作挂起)、给信号或发信号。信号量初始化时要给信号量赋初值,等待信号量的任务表应清为空。想要得到信号量的任务执行等待操作。假如该信号量有效(即信号量值大于0),则信号量值减1,任务得以继续运行。假如信号量的值为0,等待信号量的任务就被列入等待信号量任务表。多数内核允许用户定义等待超时,假
5、如等待时光超过了某一设定值时,该信号量还是无效,则等待信号量的任务进入就绪态预备运行,并返回出错代码(指动身生了等待超时错误)。任务以发信号操作释放信号量。假如没有任务在等待信号量,信号量的值仅仅是容易地加1。假如有任务在等待该信号量,那么就会有一个任务进入就绪态,信号量的值也就不加1。于是,钥匙给了等待信号量的诸任务中的等待信号量任务中优先级最高的任务、信号量处理函数:ossemcreate / * 创建一个信号量* /ossemdel()/* 删除信号量*/ossempend()/* 等待信号量*/ossempost()/* 发送信号量*/(2) 消息队列消息队列用于给任务发消息。通过内核
6、提供的服务、任务或中断服务子程序可以将一条消息(该消息的指针)放入消息队列。同样,一个或多个任务可以通过内核服务从消息队列中得到消息。发送和接收消息的任务商定,传递的消息事实上是传递的指针指向的内容。通常,先进入消息队列的消息先传给任务5,也就是说,任务先得到的是最先进入消息队列的消息,即先进先出原则(fifo)。然而,uc/os-ii也允许用法后进先出方式(lifo)。当一个以上的任务要从消息队列接收消息时,每个消息队列有一张等待消息任务的等待列表。假如消息队列中没有消息,即消息队列是空,等待消息的任务就被挂起并放入等待消息任务列表中,直到有消息到来。通常,内核允许等待消息的任务定义等待超时
7、的时光。假如限定时光内,任务没有收到消息,该任务就进入就绪态并开头运行,同时返回出错代码,指出浮现等待超时错误。一旦一则消息放入消息队列,该消息将传给等待消息的任务中优先级最高的那个任务,或是最先进入等待消息任务列表的任务。2.3 库函数的实现ipv6 协议栈中用到了6 个外部函数,这些函数通常与用户用法的系统或编译器有关。返回字符串长度、字符串比较、内存数据块之间的相互拷贝和内存中指定长度的数据块清零,4 个函数已由ads1.2 中的运行时库提供,不需要再编写。由于网络数据采纳的是大端数据存储6 , 而lpc2210 是工作在小端,所以,在存取网络数据时要举行字节的交换。下面两个容易的函数需要实现:uintl6 swapw( uintl6 n); /16位数据凹凸字节交换 return(n8)&0xff00)(n8)&0x00ff); uint32 swapl(uint32 n);/32 位数据大小头对调 return(n 24 & 0xff000000l) ) (n +8) & 0x00ff0000l) ( ( n 8 ) & 0x0000ff00l) ( ( n 2 4 )&0x000000ffl); 3 结束语该文具体描述了在嵌入式系统中如何实现ipv6 协
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行贷款委托代理合同(2篇)
- 巴西课件 湘教版
- 人教版南辕北辙课件
- 苏教版江苏省扬州市扬州中学教育集团树人学校2023-2024学年高一上学期期中数学试题
- 老舍《茶馆》课件
- 外科护理课件
- 基层教育 课件
- 西京学院《中华才艺》2023-2024学年第一学期期末试卷
- 西京学院《外国文学》2021-2022学年第一学期期末试卷
- 西华师范大学《中外电影史》2021-2022学年期末试卷
- 附件1-江西省病原微生物实验室备案登记表.doc-附件1
- 陶瓷工艺学4陶瓷成型
- qc_降低设备故障率(ppt)
- 磷酸铁锂电池产品说明书
- D702-1~3 常用低压配电设备及灯具安装(2004年合订本)_(高清版)
- 山西经济出版社小学信息技术第一册全册教案
- 空调系统试运转调试记录填写范例
- 儿科常见疾病护理诊断和护理措施
- 特种作业人员台账.doc
- 图书室开放时间表(精编版)
- 3章SAA的功能应用
评论
0/150
提交评论