当前位置: 首页 > news >正文

凡科建站做的网站有什么短板失败营销案例100例

凡科建站做的网站有什么短板,失败营销案例100例,安阳网站建设首选,seo优化关键词排名优化1、概述#xff1a;LwIP协议栈在设计时就考虑到了将来的移植问题#xff0c;因此把所有与硬件、OS、编译器相关的部份独立出来#xff0c;放在ucosiiLwIPsource etlwiparch目录下。因此LwIP在uCOS II上的实现就是修改这个目录下的文件#xff0c;其它的文件一般不应该…1、概述LwIP协议栈在设计时就考虑到了将来的移植问题因此把所有与硬件、OS、编译器相关的部份独立出来放在ucosiiLwIPsource etlwiparch目录下。因此LwIP在uCOS II上的实现就是修改这个目录下的文件其它的文件一般不应该修改。下面分几部份分别说明相应文件的实现原理和过程。2、与CPU或编译器相关的include文件ucosiiLwIPsource etlwiparchucosIIincludearch目录下cc.h、cpu.h、perf.h中有一些与CPU或编译器相关的定义如数据长度字的高低位顺序等。这应该与用户实现µC/OS II时定义的数据长度等参数是一致的。#define BYTE_ORDER LITTLE_ENDIAN  //C33209默认为小端存储系统//数据类型长度的定义typedef unsigned char   u8_t;typedef signed char     s8_t;typedef unsigned short  u16_t;typedef signed short    s16_t;typedef unsigned int    u32_t;typedef signed int      s32_t;此外还有一点一般情况下C语言的结构体struct是4字节对齐的但是在处理数据包的时候LwIP使用的是通过结构体中不同数据的长度来读取相应的数据的所以一定要在定义struct的时候使用_packed关键字让编译器放弃struct的字节对齐。LwIP也考虑到了这个问题所以在它的结构体定义中有几个PACKED_FIELD_xxx宏默认的时候这几个宏都是空的可以在移植的时候添加不同的编译器所对应的_packed关键字。比如在Skyeye(C33209)上对应gcc编译器的定义#define PACK_STRUCT_FIELD(x) x __attribute__((packed))#define PACK_STRUCT_STRUCT __attribute__((packed))#define PACK_STRUCT_BEGIN#define PACK_STRUCT_END3、sys_arch操作系统相关部份sys_arch.[ch]中的内容是与OS相关的一些结构和函数主要可以分为四个部份(1)    sys_sem_t 信号量LwIP中需要使用信号量通信所以在sys_arch中应实现信号量结构体和处理函数struct  sys_sem_tsys_sem_new()            //创建一个信号量结构sys_ sem _free()            //释放一个信号量结构sys_ sem _signal()        //发送信号量sys_ arch_sem _wait()    //请求信号量由于µC/OSII已经实现了信号量OS_EVENT的各种操作并且功能和LwIP上面几个函数的目的功能是完全一样的所以只要把µC/OSII的函数重新包装成上面的函数就可以直接使用了。(2)    sys_mbox_t 消息LwIP使用消息队列来缓冲、传递数据报文因此要在sys_arch中实现消息队列结构sys_mbox_t以及相应的操作函数sys_mbox_new()          //创建一个消息队列sys_mbox_free()          //释放一个消息队列sys_mbox_post()          //向消息队列发送消息sys_arch_mbox_fetch()      //从消息队列中获取消息µC/OSII同样实现了消息队列结构OSQ及其操作但是µC/OS-II没有对消息队列中的消息进行管理因此不能直接使用必须在µC/OS-II的基础上重新实现。为了实现对消息的管理我们定义了以下结构typedef struct {OS_EVENT*   pQ;void* pvQEntries[MAX_QUEUE_ENTRIES];} sys_mbox_t在以上结构中包括OS_EVENT类型的队列指针(pQ)和队列内的消息(pvQEntries)两部分对队列本身的管理利用µC/OS-II自己的OSQ操作完成然后使用µC/OS-II中的内存管理模块实现对消息的创建、使用、删除回收两部分综合起来形成了LwIP的消息队列功能。(3)    sys_arch_TImeout 函数LwIP中每个与外界网络连接的线程都有自己的TImeout属性即等待超时时间。这个属性表现为每个线程都对应一个sys_TImeout结构体队列包括这个线程的TImeout时间长度以及超时后应调用的timeout函数该函数会做一些释放连接回收资源的工作。如果一个线程对应的sys_timeout为空(NULL)说明该线程对连接做永久的等待。timeout结构体已经由LwIP自己在sys.h中定义好了而且对结构体队列的数据操作也由LwIP负责我们所要实现的是如下函数struct sys_timeouts * sys_arch_timeouts(void)这个函数的功能是返回目前正处于运行态的线程所对应的timeout队列指针。timeout队列属于线程的属性因此是OS相关的函数只能由用户实现。(4)    sys_thread_new 创建新线程LwIP可以是单线程运行即只有一个tcpip线程(tcpip_thread)负责处理所有的tcp/ucp连接各种网络程序都通过tcpip线程与网络交互。但LwIP也可以多线程运行以提高效率降低编程复杂度。这时就需要用户实现创建新线程的函数void sys_thread_new(void (* thread)(void *arg), void *arg);在µC/OS II中没有线程(thread)的概念只有任务(Task)。它已经提供了创建新任务的系统API调用OSTaskCreate因此只要把OSTaskCreate封装一下就可以实现sys_thread_new。需要注意的是LwIP中的thread并没有µC/OS II中优先级的概念实现时要由用户事先为LwIP中创建的线程分配好优先级。4、lib_arch中库函数的实现LwIP协议栈中用到了8个外部函数这些函数通常与用户使用的系统或编译器有关因此留给用户自己实现。如下u16_t htons(u16_t n);     //16位数据高低字节交换u16_t ntohs(u16_t n);u32_t htonl(u32_t n);      //32位数据大小头对调u32_t ntohl(u32_t n);int strlen(const char *str);    //返回字符串长度int strncmp(const char *str1, const char *str2, int len);  //字符串比较void bcopy(const void *src, void *dest, int len);    //内存数据块之间的互相拷贝void bzero(void *data, int n);        //内存中指定长度的数据块清零前四个函数通常由用户自己实现。在我的系统中由于使用了gcc编译器gcc的lib库里已经有了两个字符串操作函数。若用户的编译器的库中没有这些函数需要自己编写。5、网络设备驱动程序在我的系统中使用的网络芯片为RealTek的8019as芯片这是ISA 10BASET的以太网芯片与Ne2k兼容。所以目前实现的网络设备驱动是针对Ne2k的其它类型的网络芯片驱动可以在LwIP的网站上找到。LwIP的网络驱动有一定的模型ucosiiLwIPsource etlwiparchucosII etif 中的ne2kif.c文件即为驱动的模板用户为自己的网络设备实现驱动时应参照此模板。在LwIP中可以有多个网络接口每个网络接口都对应了一个struct netif这个ne2kif包含了相应网络接口的属性、收发函数。LwIP调用ne2kif的方法netif-input()及netif-output()进行以太网packet的收、发等操作。在驱动中主要做的就是实现网络接口的收、发、初始化以及中断处理函数。驱动程序工作在IP协议模型的网络接口层它提供给上层(IP层)的接口函数如下//网卡初始化函数void low_level_init (struct netif *netif)//网卡接收函数从网络接口接收以太网数据包并把其中的IP报文向IP层发送//在中断方式下由网卡ISR调用void ne2k_recv_packet (struct netif *netif)//网卡发送函数给IP层传过来的IP报文加上以太网包头并通过网络接口发送err_t ne2k_send_packet (struct netif *netif, struct pbuf *p, struct ip_addr *ipaddr)//网卡中断处理函数ISRvoid ne2k_isr (void);以上的函数都可以分为协议栈本身的处理和对网络接口硬件的操作两部份但硬件操作是对上层屏蔽的具体参见RTL8019as、DM9008等Ne2k网络芯片的数据手册。驱动程序可以到LwIP的网站下载。6、应用实例的建立和测试做完上面的移植修改工作以后就可以在uCOS II中初始化LwIP并创建TCP或UDP任务进行测试了。这部份完全是C语言的实现因此这部份在ez80和ARM7上基本都是一样的。值得注意的是LwIP的初始化必须在uCOS II完全启动之后也就是在任务中进行因为它的初始化用到了信号量等OS相关的操作。关键部份的代码和说明如下void start_kernel(void){int     LineNo10 0;int     LineNo11 1;int     LineNo12 2;int     LineNo13 3;int     LineNo14 4;OSInit();OSTaskCreate(lwip_init_task, LineNo10, lwip_init_stk[TASK_STK_SIZE-1], 0);OSTaskCreate(usr_task,LineNo14,usr_stk[TASK_STK_SIZE-1],20);vRTCStart();OSStart();/* NEVER EXECUTED */while(1);}主程序中创建了lwip_init_task初始化LwIP任务(优先级0)和usr_task用户任务(优先级20)。lwip_init_task任务中除了初始化硬件时钟和LwIP之外还创建了tcpip_thread(优先级5)和tcpecho_thread(优先级6)。实际上tcpip_thread才是LwIP的主线程多线程的Berkley API也是基于这个线程实现的即上面的tcpecho_thread线程也要依靠tcpip_thread线程来与外界通信这样做的好处是编程简单结构清晰。实用Berkley API实现的tcpecho_thread是一个TCP echo服务器监听7号端口程序框架如下void tcpecho_thread(void *arg){conn netconn_new(NETCONN_TCP);  //创建新的连接标识netconn_bind(conn, NULL, 7);        //绑定到7号端口netconn_listen(conn);                //开始监听端口while(1){newconn netconn_accept(conn);        //接收外部到来的连接buf netconn_recv(newconn)        //获取数据…….                            //处理数据netconn_write(newconn, data, len, NETCONN_COPY); //发送数据netconn_delete(newconn);            //释放本次连接}}编译运行后用ping ip地址命令可以得到ICMP reply响应。用telnet ip地址 7(登录7号端口)命令可以看到echo server的回显效果。说明ARP、ICMP、IP、TCP协议都已正确运行。
http://www.huolong8.cn/news/405718/

相关文章:

  • 免费seo网站自动推广软件网站推广费用价格
  • 字画价格网站建设方案优质手机网站建设推荐
  • 流量查询网站wordpress 页面模板
  • 寿光网站建设多少钱开通网站申请书
  • 设计师合作网站网站维护的工作内容
  • 大连外经贸网站宁国网站建设|网站建设报价 - 新支点网站建设
  • 上海网站关键词优化方法网站运行与维护
  • 阿里云oss可以做网站制作网页时首先要确定什么
  • 唯美网站模板商城网站怎样做
  • 什么网站做谷歌联盟好怎么做晒鱼的网站
  • 江西省城乡建设陪训网官方网站社区建立网站
  • 什么是网站的层次是用cms还是直接用语言写网站
  • 用自己的电脑做网站空间要查询一个网站在什么公司做的推广怎么查
  • 代理备案网站查网站是否正规
  • 怎么建设个网站网站从零开始学编程
  • 旅游网站建设主要工作怎么自己弄一个平台
  • 做网站后台的时候误删了数据库的表重庆专业网站推广公司
  • wordpress 建站简单吗网站品牌栏目建设
  • 大型网站seo方法大连九死一疯事件
  • python 网站开发流程拼多多一件代发货源app
  • 怎么进行网站优化丹阳网站建设开发
  • 保定网站建设解决方案wordpress install.php
  • 辽源市网站建设wordpress 主题 mip
  • 怎么为网站做外链诛仙2官方网站西施任务怎么做
  • 营销网站怎样做广州编程课程培训机构排名
  • 苏州营销型网站建设方法中国最大的建站平台
  • 网站版面如何布局怎么看一个网站好坏
  • 专业建筑设计网站平台南京营销
  • 广州网站优化快速提升网站排名设计网站页面教案
  • 网站制作公司天强科技网站设计怎么做明信片