ucos+lwip应用心得[社区]

ucos+lwip应用心得[社区]

ID:25243662

大小:64.00 KB

页数:7页

时间:2018-11-19

ucos+lwip应用心得[社区]_第1页
ucos+lwip应用心得[社区]_第2页
ucos+lwip应用心得[社区]_第3页
ucos+lwip应用心得[社区]_第4页
ucos+lwip应用心得[社区]_第5页
资源描述:

《ucos+lwip应用心得[社区]》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、ucos+lwip应用心得[社区]经过几天调试除掉几个bug以后,ucos+lodel)先贴上来,如果大家有兴趣我再接着往下写.另外我的移植参看了skyeye扬晔大侠的代码,大家可以去看看扬晔大侠的lDunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。Lent的支持.(9)支持DHCP协议,动态分配ip地址.现在网上最新的版本是V0.6.41.lodel)tcp/ip协议栈的processmodel一般有几种方式.1.tcp/ip协议的每一层是一个单独进程.链路层是一个进程,ip层是一个进程,tcp层是一个进程.这样的好处是网络协议的每一层都非常清晰,代码的

2、调试和理解都非常容易.但是最大的坏处数据跨层传递时会引起上下文切换(contextsent要引起3次contextscall)和协议栈来进行通讯.这样TCP/IP的协议栈就限定于特定的操作系统内核了.如odel:所有tcp/ip协议栈都在一个进程当中,这样tcp/ip协议栈就和操作系统内核分开了.而应用层程序既可以是单独的进程也可以驻留在tcp/ip进程中.如果应用程序是单独的进程可以通过操作系统的邮箱,消息队列等和tcp/ip进程进行通讯.>voidsys_sem_signal(sys_sem_tsem)//发送一个信号量voidsys_sem__tsem)//等待一个信号量

3、voidsys_timeout(u32_tmsecs,sys_timeout_handlerh,void*arg)//设置一个超时事件voidsys_untimeout(sys_timeout_handlerh,void*arg)//删除一个超时事件…关于操作系统封装层的信息可以阅读lbox_t;//可见lbox其实是ucos的消息队列staticcharpcQueueMemoryPool[MAX_QUEUES*sizeof(TQ_DESCR)];voidsys_init(void){u8_ti;s8_tucErr;pQueueMem=OSMemCreate((void*)pc

4、QueueMemoryPool,MAX_QUEUES,sizeof(TQ_DESCR),ucErr);//为消息队列创建内存分区//initleoutsforeveryleouts[i].next=NULL;}}2.2.2创建一个和tcp/ip相关新进程:l,所以设大//一点也没有关系:)//maxnumberoflp;LAX];Leouts的对应表项中.imeouts(void){u8_tcurr_prio;s16_terr,offset;OS_TCBcurr_task_pcb;null_timeouts.next=NULL;//获取当前任务的优先级err=OSTaskQue

5、ry(OS_PRIO_SELF,curr_task_pcb);curr_prio=curr_task_pcb.OSTCBPrio;offset=curr_prio-LAX){returnnull_timeouts;}returnleouts[offset];}ext!=NULL)t->next->time+=t->time;memp_free(MEMP_SYS_TIMEOUT,t);return;}}return;}2.2.3“mbox”的实现:}}}}u32_tsys_arch_mbox_fetch(sys_mbox_tmbox,void**data,u32

6、_ttimeout){u32_tucErr;u16_tucos_timeout;//在leout的单位是ms//在ucosII,timeout的单位是timertickucos_timeout=0;if(timeout!=0){ucos_timeout=(timeout)*(OS_TICKS_PER_SEC/1000);if(ucos_timeout<1)ucos_timeout=1;elseif(ucos_timeout>65535)ucos_timeout=65535;}//如果data!=NULL就返回消息指针,if(data!=NULL){*data=OSQ

7、Pend(mbox->pQ,(u16_t)ucos_timeout,ucErr);}else{OSQPend(mbox->pQ,(u16_t)ucos_timeout,ucErr);}//这里修改了ucos中的OSQPend系统调用,//原来的void*OSQPend(OS_EVENT*pevent,INT16Utimeout,INT8U*err)//err的返回值只有两种:收到消息就返回OS_NO_ERR,超时则返回OS_TIMEOUT//这里先将err从8位数据改变成了16位

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。