版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东肇庆市鼎湖区总工会招聘社会化工会工作者笔试(公共基础知识)综合能力测试题附答案
- 2025年度武汉市市直机关公开遴选公务员111人备考题库附答案
- 2025广东广州花都城投贸易有限公司第二次招聘项目用工人员取消招聘考试题库附答案
- 2025年度成都市教育局所属事业单位公开招聘15名高层次人才考试参考题库附答案
- 2026云南大理州弥渡县人民医院招聘公益性岗位人员3人笔试参考题库及答案解析
- 2025年云南省大数据有限公司第二批招聘(30人)考试模拟卷附答案
- 2025年六安市叶集区人民医院招聘2人(公共基础知识)综合能力测试题附答案
- 2025广东中山市阜沙中学招聘英语非编教师1人(公共基础知识)综合能力测试题附答案
- 2026云南中国人民人寿保险股份有限公司临沧市中心支公司招聘30人笔试备考题库及答案解析
- 2025年广东省人民医院南海医院招聘事业单位聘用制(编制)工作人员1人(第二批)笔试参考题库及答案解析
- 河南省开封市2026届高三年级第一次质量检测历史试题卷+答案
- 员工通勤安全培训课件
- (自2026年1月1日起施行)《增值税法实施条例》的重要变化解读
- 2025年游戏陪玩分成协议
- 全国秸秆综合利用重点县秸秆还田监测工作方案
- 2026年内蒙古化工职业学院单招职业适应性考试参考题库及答案解析
- 国家事业单位招聘2024国家水利部小浪底水利枢纽管理中心招聘事业单位人员拟聘用人员笔试历年参考题库典型考点附带答案详解(3卷合一)
- 核生化应急救援中心火灾预案
- 25数五上数学人教版期末押题卷5套
- 2026年辽宁金融职业学院单招职业适应性测试题库及参考答案详解
- 2026年教师资格之中学综合素质考试题库500道及完整答案【名师系列】
评论
0/150
提交评论