




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
RT-ThreadlwIP協(xié)議棧培訓(xùn)驅(qū)動(dòng)、協(xié)議棧結(jié)構(gòu)RT-ThreadlwIP系統(tǒng)結(jié)構(gòu)網(wǎng)絡(luò)應(yīng)用lwIP協(xié)議棧lwIP移植RT-ThreadRTOS以太網(wǎng)發(fā)送任務(wù)以太網(wǎng)接收任務(wù)網(wǎng)絡(luò)驅(qū)動(dòng)程序RT-ThreadlwIP網(wǎng)絡(luò)驅(qū)動(dòng)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驅(qū)動(dòng)結(jié)構(gòu)fm3_emac_hw_initrt_device::init
openclosereadwriteeth_dstrevice::uct
netif
*netif;etheth_rx_txeth_device_init(eth_device)rt_device_registerRT-ThreadlwIP驅(qū)動(dòng)結(jié)構(gòu)netifnetifnetif_listtcp
threadtcpip_init_done_callbacknetif_adddhcp_startnetif_set_linkupRT-ThreadlwIP驅(qū)動(dòng)結(jié)構(gòu)etxtcp
threadetx
threadlink_output(netif,
p)eth_tx_thread_entryenetif->eth_tx(p);rt_sem_releaseRT-ThreadlwIP驅(qū)動(dòng)結(jié)構(gòu)erxEMAC
ISReth_device_readyerx
threadtcp
threadeth_rx_thread_entrynetifdevice->eth_rx(p)netif->input(p,
netif);//
tcpip_input(p,
netif);RT-ThreadlwIP驅(qū)動(dòng)總結(jié)驅(qū)動(dòng)結(jié)構(gòu)體#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驅(qū)動(dòng)總結(jié)設(shè)備接口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驅(qū)動(dòng)結(jié)構(gòu)設(shè)備控制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驅(qū)動(dòng)總結(jié)中斷通知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驅(qū)動(dòng)總結(jié)接收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驅(qū)動(dòng)結(jié)構(gòu)總結(jié)發(fā)送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網(wǎng)絡(luò)驅(qū)動(dòng)MB9BF618內(nèi)置雙EMAC,每個(gè)EMAC都單獨(dú)有DMA。DMA描述符(初始化成DMA鏈)StatusBufferSizeBufferAddrNextDescAddrStatusBufferSizeBufferAddrNextDescAddrStatusBufferSizeBufferAddrNextDescAddrDescriptor
#1Descriptor
#2Descriptor
#3MB9BF618網(wǎng)絡(luò)驅(qū)動(dòng)發(fā)送時(shí)流程獲取信號(hào)量(tx_buf_free)寫入pbuf到DMA
buffer中獲得DMA
buffer觸發(fā)發(fā)送DMADMAbuffer換下一個(gè)位置發(fā)送完成中斷釋放信號(hào)量(tx_buf_free)MB9BF618網(wǎng)絡(luò)驅(qū)動(dòng)接收流程檢查當(dāng)前DMAbuffer狀態(tài)分配pbuf,并讀出數(shù)據(jù)到pbuf獲得有效數(shù)據(jù)長度清除DMA
buffer狀態(tài)DMAbuffer換下一個(gè)位置接收中斷eth_device_ready();lwIP代碼結(jié)構(gòu)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;接收到數(shù)據(jù)包。回調(diào)消息。lwIP代碼結(jié)構(gòu)應(yīng)用TCPIPETX網(wǎng)卡lwip_sendtoTCPIP_API_MSGnetif->outputethernetif_linkoutputfm3_emac_txlwIP代碼結(jié)構(gòu)以郵箱為基礎(chǔ);大多數(shù)工作都在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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 同城轉(zhuǎn)租 店鋪合同范例
- 雙工作合同范本
- 雙方合資協(xié)議合同范本
- 加工承攬合同范本新
- 勞務(wù)短期合同范本
- 廚柜代銷合同范本
- 租賃合同變更服務(wù)合同范本
- 印刷產(chǎn)品定做合同范本
- 大件搬運(yùn)服務(wù)合同范本
- 合作傭金合同范本
- 2024年湖南理工職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫必考題
- 中國風(fēng)川劇戲曲京劇文化傳統(tǒng)文化國粹世界戲劇日活動(dòng)策劃完整課件兩篇
- (正式版)JTT 1495-2024 公路水運(yùn)危險(xiǎn)性較大工程安全專項(xiàng)施工方案審查規(guī)程
- 醫(yī)院dip付費(fèi)績效考核制度
- 20G520-1-2鋼吊車梁(6m-9m)2020年合訂本
- 電梯維護(hù)保養(yǎng)規(guī)則(TSG T5002-2017)
- 義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)(2022年版)解讀與案例分析
- 植物營養(yǎng)學(xué)課件
- 體育概論課外體育活動(dòng)
- 自考英語二詞性轉(zhuǎn)換大全
- 屋頂拆除方案
評(píng)論
0/150
提交評(píng)論