




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- fms考试题及答案
- 智能算法检测中的自适应技术探讨考核试卷
- 矩阵宣传面试题及答案
- 汽车S店空调设备安全规范考核试卷
- javaweb面试题及答案
- 百威亚太面试题及答案
- 足球思维测试题及答案
- 《推销实务》课件 项目6 处理顾客异议-维系推销顾客关系
- 《数据流通区块链智能合约API技术规范》征求意见稿
- 改善政务服务助力统一大市场
- 广东省2025年中考英语模拟试卷试题及答案详解
- 人工智能在股票预测中的应用-全面剖析
- 2025年病例书写规范
- 课题申报书:基于OBE理念指导下的课程内容设计及其考核体系研究
- 代扣代缴费用合同范例
- 温州市鹿城区2025年六年级下学期小升初招生数学试卷含解析
- 特种设备事故应急处置
- 《剪映+即梦Dreamina:AI文案、图片与视频生成技巧大全》 课件全套 第1-14章 通过剪映生成AI文案-AI商业设计与视频实战
- 手提式国产汽油发电机安全操作规程
- 安徽省合肥市庐阳区南门小学-2024-2025年第一学期办公室工作总结(层峰辟新天)【课件】
- 国家社科基金申报经验分享-课件
评论
0/150
提交评论