Chinaunix首页 | 论坛 | 博客
  • 博客访问: 227790
  • 博文数量: 49
  • 博客积分: 2101
  • 博客等级: 大尉
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-07 10:38
文章分类

全部博文(49)

文章存档

2010年(49)

我的朋友

分类: 嵌入式

2010-09-07 11:50:44

参考wr_net_stack_programmers_guide_2.0 A.4部分

参考END驱动程序motcpmend.cmotcpmhdlcend.c

 

HDLC END驱动为例

1 内存池的建立

motCpmHdlcEndLoad函数中会调用motCpmHdlcInitMemmotCpmHdlcInitMem函数将会负责建立内存池。

motCpmHdlcInitMem在建立内存池后,会为RxBd申请cluster内存区域,cluster的大小是用户指定的,我们的驱动都是分配大概一个帧长。例如1520

 

2 收帧

收到帧产生中断,当然hdlc驱动似乎不需要帧中断,只需要RXBD中断,因为rxbd的内存区域大小绝对能包含一个hdlc帧。

motCpmHdlcHandleInt调用motCpmHdlcRecvmotCpmHdlcRecv会建立MBLK-CBLK-cluster结构,但是巧妙的是cluster就是rxbd使用的那个cluster,这样直接挂接避免了复制。此时,只需要给rxbd分配一个新的cluster即可。

 

3 发帧

收到来自上层的pmbld指针,先申请一个cluster,将pmblknetMblkToBufCopy函数复制到cluster,然后把txbd的数据指针指向这个cluster。设置txbd的控制字段,使其发送出去。

当发送完成后,将会产生发送完成中断,在中断中释放先前申请的cluster

阅读(1413) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~