版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
RT-ThreadlwIP协议栈培训驱动、协议栈结构RT-ThreadlwIP系统结构网络应用lwIP协议栈lwIP移植RT-ThreadRTOS以太网发送任务以太网接收任务网络驱动程序RT-ThreadlwIP网络驱动03_single_ethernet\drivers\fm3_emac.c03_single_ethernet\drivers\fm3_emac.h03_single_ethernet\drivers\eth_driver.c03_dual_ethernet\drivers\fm3_emac.c03_dual_ethernet\drivers\fm3_emac.h03_dual_ethernet\drivers\eth_driver.cRT-ThreadlwIP驱动结构fm3_emac_hw_initrt_device::init
openclosereadwriteeth_dstrevice::uct
netif
*netif;etheth_rx_txeth_device_init(eth_device)rt_device_registerRT-ThreadlwIP驱动结构netifnetifnetif_listtcp
threadtcpip_init_done_callbacknetif_adddhcp_startnetif_set_linkupRT-ThreadlwIP驱动结构etxtcp
threadetx
threadlink_output(netif,
p)eth_tx_thread_entryenetif->eth_tx(p);rt_sem_releaseRT-ThreadlwIP驱动结构erxEMAC
ISReth_device_readyerx
threadtcp
threadeth_rx_thread_entrynetifdevice->eth_rx(p)netif->input(p,
netif);//
tcpip_input(p,
netif);RT-ThreadlwIP驱动总结驱动结构体#define
MAX_ADDR_LEN6struct
rt_skeleton_eth{/*
inherit
from
ethernet
device
*/struct
eth_device
parent;/*
interface
address
info.
*/rt_uint8_t
dev_addr[MAX_ADDR_LEN];};static
struct
rt_skeleton_eth
_skeleton_device;RT-ThreadlwIP驱动总结设备接口static
rt_err_t
rt_skeleton_init(rt_device_t
dev){return
RT_EOK;}static
rt_err_t
rt_skeleton_open(rt_device_tdev,
rt_uint16_t
oflag){return
RT_EOK;}static
rt_err_t
rt_skeleton_close(rt_device_t
dev){return
RT_EOK;}static
rt_size_t
rt_skeleton_read(rt_device_t
dev,
rt_off_t
pos,
void*
buffer,rt_size_t
size){rt_set_errno(-RT_ENOSYS);return
0;}static
rt_size_t
rt_skeleton_write
(rt_device_t
dev,
rt_off_t
pos,
const
void*buffer,
rt_size_t
size){rt_set_errno(-RT_ENOSYS);return
0;}RT-ThreadlwIP驱动结构设备控制static
rt_err_t
rt_skeleton_control(rt_device_t
dev,
rt_uint8_t
cmd,
void
*args){struct
rt_skeleton_eth
*eth;eth
=
(struct
rt_skeleton_eth*)dev;RT_ASSERT(eth
!=
RT_NULL);switch
(cmd){case
NIOCTL_GADDR:/*
get
mac
address
*/if
(args)
rt_memcpy(args,
_skeleton_device.dev_addr,
6);else
return
-RT_ERROR;break;default
:break;}return
RT_EOK;}RT-ThreadlwIP驱动总结中断通知void
rt_skeleton_isr(int
irqno){rt_uint32_t
status;/*
read
status
*//*
Received
the
coming
packet
*/if
(status){/*
disable
receive
interrupt
*//*
a
frame
has
been
received
*/eth_device_ready(&(_skeleton_device.parent));}/*
Transmit
Interrupt
check
*/if
(status){}}RT-ThreadlwIP驱动总结接收struct
pbuf
*rt_skeltion_rx(struct
rt_device
*device){struct
pbuf
*p
=
RT_NULL;rt_uint32_t
pkt_len;/*
get
rx
packet
length
*/if
(pkt_len
>
0){p
=
pbuf_alloc(PBUF_LINK,
rx_len,
PBUF_RAM);/*
read
packet
to
pbuf
*/}else{/*
enable
interrupt
*/}return
p;}RT-ThreadlwIP驱动结构总结发送rt_err_t
rt_skeletion_tx(struct
rt_device
*device,
struct
pbuf*
p){struct
pbuf*
q;for
(q
=
p;
q
!=
RT_NULL;
q
=
q->next){/*
write
pbuf
to
device
*/}/*
wait
transmition
complete
*/return
RT_EOK;}MB9BF618网络驱动MB9BF618内置双EMAC,每个EMAC都单独有DMA。DMA描述符(初始化成DMA链)StatusBufferSizeBufferAddrNextDescAddrStatusBufferSizeBufferAddrNextDescAddrStatusBufferSizeBufferAddrNextDescAddrDescriptor
#1Descriptor
#2Descriptor
#3MB9BF618网络驱动发送时流程获取信号量(tx_buf_free)写入pbuf到DMA
buffer中获得DMA
buffer触发发送DMADMAbuffer换下一个位置发送完成中断释放信号量(tx_buf_free)MB9BF618网络驱动接收流程检查当前DMAbuffer状态分配pbuf,并读出数据到pbuf获得有效数据长度清除DMA
buffer状态DMAbuffer换下一个位置接收中断eth_device_ready();lwIP代码结构tcp主线程,tcpip.c入口:void
tcpip_thread(void*
arg)case
TCPIP_MSG_API:break;case
TCPIP_MSG_INPKT:break;case
TCPIP_MSG_NETIFAPI:break;case
TCPIP_MSG_TIMEOUT/UNTIMEOUT:break;case
TCPIP_MSG_CALLBACK:break;case
TCPIP_MSG_CALLBACK_STATIC:break;接收到数据包。回调消息。lwIP代码结构应用TCPIPETX网卡lwip_sendtoTCPIP_API_MSGnetif->outputethernetif_linkoutputfm3_emac_txlwIP代码结构以邮箱为基础;大多数工作都在tcp线程中完成;很多类似这样的代码:struct
api_msg
msg;msg.function
=
do_send;msg.msg.conn
=
conn;msg.msg.msg.b
=
buf;err
=
TCPIP_APIMSG(&msg);lwIP
pbuf,buffer管理nextpayloadtotal
lengthlengthtypeflagsrefpayloadnextpayloadtotal
lengthlengthtypeflagsrefpayloadfreespacenextpayloadtotal
lengthlengthtypeflagsreffreespacepayloadlwIP
pbuf,buffer管理struct
pbuf*
pbuf_alloc(pbuf_layer
layer,u16_t
length,
pbuf_type
type);u8_t
pbuf_free(struct
pbuf
*p);PBUF分配和释放u16_t
pbuf_copy_partial(struct
pbuf
*bu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年青年干部产品质量法普法知识测试题
- 2026年企业内部控制与内部审计规范题库
- 2026年网络安全与防护技术全解析
- 孩子关于打游戏的演讲稿
- 2026年未成年人保护工作站儿童之家功能知识竞赛
- 2026年医疗器械质量管理体系内审员考试题库
- 防溺水幼儿教师演讲稿
- 我与华阳共奋斗演讲稿
- 2026年禁毒协理员面试社区戒毒康复工作实务
- 2026年国企员工防物体打击安全知识题库
- 2026北京海淀高三一模化学(含答案)
- 2026年辽宁大连市高三一模高考数学试卷试题(含答案详解)
- 2026公证知识普及课件
- 旅游咨询员考试题库及参考答案
- 人教版八年级语文下册期中测试卷及答案
- 2025年郑州巩义市金桥融资担保有限公司公开招聘3名笔试历年备考题库附带答案详解
- 2026北京师范大学东营实验学校人才引进教师6人备考题库(山东)附答案详解【考试直接用】
- 三一集团在线测试题库
- 电信网络维护规范手册(标准版)
- 2025年医学影像复试题目及答案
- 中间业务收入培训课件
评论
0/150
提交评论