女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 開發(fā)背景:1、主芯片—STM32F207VCT6;2、TCP/IP協(xié)議?!狶WIP,依托ST例程移植;3、操作系統(tǒng)—無(裸機(jī));異?,F(xiàn)象:1、網(wǎng)線不插入的情況下先給設(shè)備上電,之后再插入網(wǎng)線無法ping通;(如果上電前網(wǎng)線

開發(fā)背景:

1、主芯片—STM32F207VCT6;

2、TCP/IP協(xié)議棧—LWIP,依托ST例程移植;

3、操作系統(tǒng)—無(裸機(jī));

異常現(xiàn)象:

1、網(wǎng)線不插入的情況下先給設(shè)備上電,之后再插入網(wǎng)線無法ping通;(如果上電前網(wǎng)線插入,網(wǎng)絡(luò)正常);

2、網(wǎng)絡(luò)已經(jīng)正常的情況下,電腦PC端修改傳輸模式(比如從原來的100M全雙工修改為10M全雙工)導(dǎo)致網(wǎng)絡(luò)不通;


原因分析:

1、針對(duì)第一種異常情況,是由于上電時(shí)網(wǎng)線未插入,導(dǎo)致ETH初始化部分未能成功完成,之后即使再插入網(wǎng)線,程序中沒有再次進(jìn)行初始化的邏輯補(bǔ)充,從而導(dǎo)致網(wǎng)絡(luò)異常;

2、針對(duì)第二種情況,情況是上電時(shí)完成了ETH的初始化并與PC協(xié)商成功,此時(shí)網(wǎng)絡(luò)正常。但當(dāng)PC端修改傳輸模式后,程序中未能執(zhí)行再次協(xié)商與MAC的初始化工作,導(dǎo)致網(wǎng)絡(luò)異常;


解決方法:

首先,要明確上述問題的關(guān)鍵點(diǎn)所在,所有的異常均是網(wǎng)線的拔插導(dǎo)致(PC端修改連接傳輸方式時(shí)也相當(dāng)于網(wǎng)線的拔掉重插),因此主程序中必須要有對(duì)當(dāng)前網(wǎng)絡(luò)連接與斷開的檢測(cè)或者利用PHY芯片的中斷引腳;

其次,無論利用輪詢或是PHY中斷配置引腳,根本的原理都是一樣的,就是感知到網(wǎng)絡(luò)的連接與斷開,下面給出采用的查詢方式:


void Eth_Link_ITHandler(struct netif *netif)

{

/* Check whether the link interrupt has occurred or not */

if(((ETH_ReadPHYRegister(DP83848_PHY_ADDRESS, PHY_MISR)) & PHY_LINK_STATUS) != 0){/*檢測(cè)插拔中斷*/

uint16_t status = ETH_ReadPHYRegister(DP83848_PHY_ADDRESS, PHY_BSR);

if(status & (PHY_AutoNego_Complete | PHY_Linked_Status)){/*檢測(cè)到網(wǎng)線連接*/

if(EthInitStatus == 0){/*之前未成功初始化過*/

/*Reinit PHY*/

ETH_Reinit();

}

else{/*之前已經(jīng)成功初始化*/

/*set link up for re link callbalk function*/

netif_set_link_up(netif);

}

}

else{/*網(wǎng)線斷開*/

/*set link down for re link callbalk function*/

netif_set_link_down(netif);

}

}

}

備注說明:將該檢測(cè)函數(shù)放入主循環(huán),程序中標(biāo)注的部分為解決網(wǎng)線熱拔插問題的關(guān)鍵點(diǎn)。

1、標(biāo)注紅色的部分執(zhí)行的條件是檢測(cè)到網(wǎng)線插入且之前ETH部分未成功初始化過(即之前一直處在上電但網(wǎng)線未插入)的情況,此時(shí)需要對(duì)ETH重新初始化,從而解決異?,F(xiàn)象的第一種情況,具體執(zhí)行內(nèi)容為:

/**

* @brief : first time power on but init failed, do again

* @param : None

*

* @retval : None

* @author : xuk

*/

void ETH_Reinit(void){

/* Configure Ethernet */

EthInitStatus =ETH_Init(Ð_InitStructure, DP83848_PHY_ADDRESS);

}

其中ETH_InitStructure已設(shè)為全局結(jié)構(gòu)體;

2、標(biāo)注藍(lán)色部分的執(zhí)行條件是已經(jīng)成功初始化過ETH,但之后出現(xiàn)了網(wǎng)線的拔插情況,此時(shí)需要在每次檢測(cè)到網(wǎng)絡(luò)連接時(shí)重新進(jìn)行自協(xié)商并初始化MAC,具體的執(zhí)行流程如下介紹:

A、檢測(cè)到該條件時(shí),首先調(diào)用:

netif_set_link_up(netif);

netif_set_link_down(netif);

B、追溯兩個(gè)函數(shù)的定義處,如下:

#if LWIP_NETIF_LINK_CALLBACK

/**

* Called by a driver when its link goes up

*/

void netif_set_link_up(struct netif *netif )

{

netif->flags |= NETIF_FLAG_LINK_UP;

#if LWIP_DHCP

if (netif->dhcp) {

dhcp_network_changed(netif);

}

#endif /* LWIP_DHCP */

#if LWIP_AUTOIP

if (netif->autoip) {

autoip_network_changed(netif);

}

#endif /* LWIP_AUTOIP */

if (netif->flags & NETIF_FLAG_UP) {

#if LWIP_ARP

/* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */

if (netif->flags & NETIF_FLAG_ETHARP) {

etharp_gratuitous(netif);

}

#endif /* LWIP_ARP */

#if LWIP_IGMP

/* resend IGMP memberships */

if (netif->flags & NETIF_FLAG_IGMP) {

igmp_report_groups( netif);

}

#endif /* LWIP_IGMP */

}

NETIF_LINK_CALLBACK(netif);

}

/**

* Called by a driver when its link goes down

*/

void netif_set_link_down(struct netif *netif )

{

netif->flags &= ~NETIF_FLAG_LINK_UP;

NETIF_LINK_CALLBACK(netif);

}

/**

* Ask if a link is up

*/

u8_t netif_is_link_up(struct netif *netif)

{

return (netif->flags & NETIF_FLAG_LINK_UP) ? 1 : 0;

}

/**

* Set callback to be called when link is brought up/down

*/

voidnetif_set_link_callback(struct netif *netif, void (* link_callback)(struct netif *netif ))

{

if (netif) {

netif->link_callback = link_callback;

}

}

#endif /* LWIP_NETIF_LINK_CALLBACK */

注意:I:從上述看出,若要這兩個(gè)函數(shù)有效編譯,則必須定義宏LWIP_NETIF_LINK_CALLBACK 為1,請(qǐng)自行設(shè)置;

II:函數(shù)netif_set_link_callback的作用是指定網(wǎng)絡(luò)連接發(fā)生改變時(shí)的回調(diào)函數(shù);

III:詳細(xì)的講一下主要思路,Eth_Link_ITHandler執(zhí)行中檢測(cè)到網(wǎng)線拔插時(shí)分別調(diào)用netif_set_link_up(netif)、netif_set_link_down(netif);這兩個(gè)函數(shù)的調(diào)用會(huì)引發(fā)netif_set_link_callback的執(zhí)行,從而執(zhí)行指定的網(wǎng)絡(luò)連接或斷開的回調(diào)函數(shù);

Ⅳ:通過netif_set_link_callback該函數(shù)在LWIP初始化的時(shí)候指定網(wǎng)絡(luò)連接變化的回調(diào)函數(shù),可放置如下位置:


void LwIP_Init(void){

......

......

......

......

/*set the link up or link down callback function - xuk*/

netif_set_link_callback(&netif,eth_re_link);

}


其中,回調(diào)函數(shù)eth_re_link的具體內(nèi)容如下,實(shí)現(xiàn)網(wǎng)絡(luò)拔插后的重新自協(xié)商與MAC初始化:

/**

* @brief : process the relink of eth

* @param : netif - - specify the ETH netif

*

* @retval : none

* @author : xuk

*/

voideth_re_link(struct netif *netif){

__IO uint32_t tickstart = 0;

uint32_t regvalue = 0, tmpreg = 0;

if(netif_is_link_up(netif)){/*link up process*/

if(ETH_InitStructure.ETH_AutoNegotiation == ETH_AutoNegotiation_Enable){/*AutoNegotiation_Enable*/

/* Enable Auto-Negotiation */

ETH_WritePHYRegister(DP83848_PHY_ADDRESS, PHY_BCR, PHY_AutoNegotiation);

/* Wait until the auto-negotiation will be completed */

do

{

tickstart++;

} while (!(ETH_ReadPHYRegister(DP83848_PHY_ADDRESS, PHY_BSR) & PHY_AutoNego_Complete) && (tickstart < (uint32_t)PHY_READ_TO));

/* Return ERROR in case of timeout */

if(tickstart == PHY_READ_TO)

{

// return ETH_ERROR;

}

/* Reset Timeout counter */

tickstart = 0;

/* Read the result of the auto-negotiation */

regvalue = ETH_ReadPHYRegister(DP83848_PHY_ADDRESS, PHY_SR);

/* Configure the MAC with the Duplex Mode fixed by the auto-negotiation process */

if((regvalue & PHY_DUPLEX_STATUS) != (uint32_t)RESET)

{

/* Set Ethernet duplex mode to Full-duplex following the auto-negotiation */

ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;

}

else

{

/* Set Ethernet duplex mode to Half-duplex following the auto-negotiation */

ETH_InitStructure.ETH_Mode = ETH_Mode_HalfDuplex;

}

/* Configure the MAC with the speed fixed by the auto-negotiation process */

if(regvalue & PHY_SPEED_STATUS)

{

/* Set Ethernet speed to 10M following the auto-negotiation */

ETH_InitStructure.ETH_Speed = ETH_Speed_10M;

}

else

{

/* Set Ethernet speed to 100M following the auto-negotiation */

ETH_InitStructure.ETH_Speed = ETH_Speed_100M;

}

}

else{/*AutoNegotiation_Disable*/

if(!ETH_WritePHYRegister(DP83848_PHY_ADDRESS, PHY_BCR, ((uint16_t)(ETH_InitStructure.ETH_Mode >> 3) |

(uint16_t)(ETH_InitStructure.ETH_Speed >> 1))))

{

/* Return ERROR in case of write timeout */

// return ETH_ERROR;

}

/* Delay to assure PHY configuration */

// _eth_delay_(PHY_CONFIG_DELAY);

}

/*------------------------ ETHERNET MACCR Configuration --------------------*/

/* Get the ETHERNET MACCR value */

tmpreg = ETH->MACCR;

/* Clear WD, PCE, PS, TE and RE bits */

tmpreg &= MACCR_CLEAR_MASK;

/* Set the WD bit according to ETH_Watchdog value */

/* Set the JD: bit according to ETH_Jabber value */

/* Set the IFG bit according to ETH_InterFrameGap value */

/* Set the DCRS bit according to ETH_CarrierSense value */

/* Set the FES bit according to ETH_Speed value */

/* Set the DO bit according to ETH_ReceiveOwn value */

/* Set the LM bit according to ETH_LoopbackMode value */

/* Set the DM bit according to ETH_Mode value */

/* Set the IPCO bit according to ETH_ChecksumOffload value */

/* Set the DR bit according to ETH_RetryTransmission value */

/* Set the ACS bit according to ETH_AutomaticPadCRCStrip value */

/* Set the BL bit according to ETH_BackOffLimit value */

/* Set the DC bit according to ETH_DeferralCheck value */

tmpreg |= (uint32_t)(ETH_InitStructure.ETH_Watchdog |

ETH_InitStructure.ETH_Jabber |

ETH_InitStructure.ETH_InterFrameGap |

ETH_InitStructure.ETH_CarrierSense |

ETH_InitStructure.ETH_Speed |

ETH_InitStructure.ETH_ReceiveOwn |

ETH_InitStructure.ETH_LoopbackMode |

ETH_InitStructure.ETH_Mode |

ETH_InitStructure.ETH_ChecksumOffload |

ETH_InitStructure.ETH_RetryTransmission |

ETH_InitStructure.ETH_AutomaticPadCRCStrip |

ETH_InitStructure.ETH_BackOffLimit |

ETH_InitStructure.ETH_DeferralCheck);

/* Write to ETHERNET MACCR */

ETH->MACCR = (uint32_t)tmpreg;

/*----------------------- ETHERNET MACFFR Configuration --------------------*/

/* Set the RA bit according to ETH_ReceiveAll value */

/* Set the SAF and SAIF bits according to ETH_SourceAddrFilter value */

/* Set the PCF bit according to ETH_PassControlFrames value */

/* Set the DBF bit according to ETH_BroadcastFramesReception value */

/* Set the DAIF bit according to ETH_DestinationAddrFilter value */

/* Set the PR bit according to ETH_PromiscuousMode value */

/* Set the PM, HMC and HPF bits according to ETH_MulticastFramesFilter value */

/* Set the HUC and HPF bits according to ETH_UnicastFramesFilter value */

/* Write to ETHERNET MACFFR */

ETH->MACFFR = (uint32_t)(ETH_InitStructure.ETH_ReceiveAll |

ETH_InitStructure.ETH_SourceAddrFilter |

ETH_InitStructure.ETH_PassControlFrames |

ETH_InitStructure.ETH_BroadcastFramesReception |

ETH_InitStructure.ETH_DestinationAddrFilter |

ETH_InitStructure.ETH_PromiscuousMode |

ETH_InitStructure.ETH_MulticastFramesFilter |

ETH_InitStructure.ETH_UnicastFramesFilter);

/*--------------- ETHERNET MACHTHR and MACHTLR Configuration ---------------*/

/* Write to ETHERNET MACHTHR */

ETH->MACHTHR = (uint32_t)ETH_InitStructure.ETH_HashTableHigh;

/* Write to ETHERNET MACHTLR */

ETH->MACHTLR = (uint32_t)ETH_InitStructure.ETH_HashTableLow;

/*-----------------------

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

水晶接頭分為rg45接口,這種接頭每條有雙交線,兩頭通過,rg45連接器與網(wǎng)卡之間相連有8根針腳。

關(guān)鍵字: 網(wǎng)線 水晶頭 rg45接口

網(wǎng)線將是下述內(nèi)容的主要介紹對(duì)象,通過這篇文章,小編希望大家可以對(duì)網(wǎng)線的相關(guān)情況以及信息有所認(rèn)識(shí)和了解,詳細(xì)內(nèi)容如下。

關(guān)鍵字: 網(wǎng)線 電纜

在現(xiàn)代網(wǎng)絡(luò)通信中,網(wǎng)線是傳輸數(shù)據(jù)的重要介質(zhì),而水晶頭作為網(wǎng)線的終結(jié)連接部件,在信號(hào)傳輸質(zhì)量、速度以及穩(wěn)定性上起著至關(guān)重要的作用。五類和六類水晶頭分別對(duì)應(yīng)于五類(CAT5)和六類(CAT6)網(wǎng)線標(biāo)準(zhǔn),它們?cè)诮Y(jié)構(gòu)設(shè)計(jì)、性能表...

關(guān)鍵字: 網(wǎng)線水晶頭 網(wǎng)線

廣州2022年8月10日 /美通社/ -- 近期,在王老吉大健康公司成立十周年創(chuàng)新發(fā)展大會(huì)上,廣州王老吉大健康產(chǎn)業(yè)有限公司董事長徐文流表示,"從國內(nèi)市場(chǎng)看,消費(fèi)者健康意識(shí)不斷增強(qiáng),對(duì)健康植物飲品、功能飲品的需求...

關(guān)鍵字: 榮耀 IP BSP 網(wǎng)線

網(wǎng)線,一般由金屬或玻璃制成,它可以用來在網(wǎng)絡(luò)內(nèi)傳遞信息。常用的網(wǎng)絡(luò)電纜有三種:雙絞線、同軸電纜和光纖電纜(光纖)。雙絞線是由許多對(duì)線組成的數(shù)據(jù)傳輸線。它的特點(diǎn)是價(jià)格便宜,所以被廣泛應(yīng)用。雙絞線是用來和RJ45水晶頭相連的...

關(guān)鍵字: 網(wǎng)線 STP UTP

根據(jù)Gartner日前發(fā)布的《全球企業(yè)網(wǎng)絡(luò)設(shè)備市場(chǎng)份額報(bào)告(2021Q2)》,21Q2全球企業(yè)網(wǎng)絡(luò)設(shè)備市場(chǎng)收入總計(jì)157.5億美元,環(huán)比增長11.3%,同比增長13.4%。而在蛋糕逐漸擴(kuò)大過程中,新華三則以全球以太網(wǎng)交換...

關(guān)鍵字: 網(wǎng)線

大家好,我是小林。在大學(xué)時(shí),大家應(yīng)該都有這樣頭疼的事情,寢室到了熄燈的時(shí)間,而大學(xué)室友卻還在打游戲(因?yàn)椴粫?huì)斷網(wǎng))。就算聲音不外放,那個(gè)機(jī)械鍵盤的聲音,在夜晚真的噼里啪啦的響,能讓你徹夜難眠,轉(zhuǎn)輾反側(cè)。我大學(xué)時(shí)候也遇到這...

關(guān)鍵字: 網(wǎng)線

隨著社會(huì)的快速發(fā)展,我們的光纖和網(wǎng)線也在快速發(fā)展,那么你知道光纖和網(wǎng)線的詳細(xì)資料解析嗎?接下來讓小編帶領(lǐng)大家來詳細(xì)地了解有關(guān)的知識(shí)。

關(guān)鍵字: 光纖 網(wǎng)線 電纜

網(wǎng)絡(luò)傳輸介質(zhì)有同軸線纜、網(wǎng)線、光纖三種。其中網(wǎng)線作為網(wǎng)絡(luò)信號(hào)傳輸?shù)闹匾d體,是由兩根具有絕緣保護(hù)層的銅導(dǎo)線組成的。把兩根絕緣的銅導(dǎo)線按一定密度互相絞在一起,每一根導(dǎo)線在傳輸中輻射出來的電波會(huì)被另一根線上發(fā)出的電波抵消,有...

關(guān)鍵字: 網(wǎng)線

網(wǎng)絡(luò)傳輸介質(zhì)有同軸線纜、網(wǎng)線、光纖三種。其中網(wǎng)線作為網(wǎng)絡(luò)信號(hào)傳輸?shù)闹匾d體,是由兩根具有絕緣保護(hù)層的銅導(dǎo)線組成的。把兩根絕緣的銅導(dǎo)線按一定密度互相絞在一起,每一根導(dǎo)線在傳輸中輻射出來的電波會(huì)被另一根線上發(fā)出的電波抵消,有...

關(guān)鍵字: 網(wǎng)線
關(guān)閉