1、最近項目遇到的問題
最近在stm32上用cubemax移植了lwip協(xié)議棧,lwip就不用過多介紹了,(lightweight IP)一款輕量級的開源TCP/IP協(xié)議棧,專為嵌入式系統(tǒng)設(shè)計,具有小巧高效、可裁剪性強(qiáng),主要是已經(jīng)發(fā)展和廣泛應(yīng)用多年,可靠性還是可以的,基本上大多數(shù)嵌入式系統(tǒng)的網(wǎng)絡(luò)通信需求都可以滿足。
然而最近項目中通信數(shù)據(jù)量大一點(diǎn),老是send超時,運(yùn)行時間久了還會直接掛在ethnetif_input,這可把我給整郁悶了。
最后定位到原因還是lwip適配的兩個線程優(yōu)先級分配得有問題,導(dǎo)致FreeRTOS信號量超時異常。
2、兩個主要線程
在lwIP協(xié)議棧中,ethernetif_input線程和tcpip協(xié)議棧線程是兩個核心的線程,在處理網(wǎng)絡(luò)數(shù)據(jù)包和執(zhí)行TCP/IP協(xié)議棧功能時的作用就不用多說了,下面簡單的介紹下兩個線程的作用:
ethernetif_input線程:
ethernetif_input線程負(fù)責(zé)接收來自網(wǎng)絡(luò)接口(如以太網(wǎng)接口)的數(shù)據(jù)包,并將其傳遞給lwIP協(xié)議棧進(jìn)行處理。
這個線程通常運(yùn)行在較低的優(yōu)先級,因為它主要負(fù)責(zé)接收和緩存數(shù)據(jù)包,而不涉及復(fù)雜的協(xié)議處理。
在實際應(yīng)用中,可以根據(jù)系統(tǒng)的需求和性能進(jìn)行調(diào)整,但通常情況下,ethernetif_input線程的優(yōu)先級相對較低。
tcpip協(xié)議棧線程:
tcpip協(xié)議棧線程是lwIP協(xié)議棧的核心線程,負(fù)責(zé)處理TCP/IP協(xié)議棧的各種功能,包括TCP連接管理、IP數(shù)據(jù)報的路由和轉(zhuǎn)發(fā)、以及UDP數(shù)據(jù)包的處理等。
由于tcpip協(xié)議棧線程需要處理復(fù)雜的協(xié)議邏輯和數(shù)據(jù)包處理,因此它通常運(yùn)行在較高的優(yōu)先級。
保持tcpip協(xié)議棧線程的較高優(yōu)先級有助于確保網(wǎng)絡(luò)數(shù)據(jù)包的及時處理和協(xié)議棧功能的高效執(zhí)行。
在實際的嵌入式系統(tǒng)設(shè)計中,需要根據(jù)具體的硬件平臺和應(yīng)用場景來合理設(shè)置這兩個線程的優(yōu)先級。通常情況下,可以通過操作系統(tǒng)或者裸機(jī)編程的方式來配置線程的優(yōu)先級,以滿足系統(tǒng)對網(wǎng)絡(luò)數(shù)據(jù)處理和協(xié)議棧功能的實時性和效率要求。
3、總 結(jié)
所以通常情況下,tcpip協(xié)議棧線程的優(yōu)先級需要設(shè)置得更高,因為tcpip協(xié)議棧線程需要處理復(fù)雜的協(xié)議邏輯、數(shù)據(jù)包處理、連接管理等任務(wù),保持tcpip協(xié)議棧線程的較高優(yōu)先級可以確保網(wǎng)絡(luò)數(shù)據(jù)包的及時處理和協(xié)議棧功能的高效執(zhí)行,從而提高系統(tǒng)的響應(yīng)速度和網(wǎng)絡(luò)通信的穩(wěn)定性。
ethernetif_input線程通常負(fù)責(zé)接收和緩存數(shù)據(jù)包,相對來說不涉及太多復(fù)雜的處理邏輯,因此可以設(shè)置相對較低的優(yōu)先級。
經(jīng)過優(yōu)先級調(diào)整后,跑了2天都沒有出現(xiàn)異常問題。
審核編輯:黃飛
-
單片機(jī)
+關(guān)注
關(guān)注
6067文章
44973瀏覽量
649984 -
TCP
+關(guān)注
關(guān)注
8文章
1402瀏覽量
80960 -
UDP
+關(guān)注
關(guān)注
0文章
330瀏覽量
34612 -
LwIP
+關(guān)注
關(guān)注
2文章
89瀏覽量
28258 -
線程
+關(guān)注
關(guān)注
0文章
508瀏覽量
20197
原文標(biāo)題:在單片機(jī)上運(yùn)行Lwip線程優(yōu)先級很重要~
文章出處:【微信號:嵌入式情報局,微信公眾號:嵌入式情報局】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
ARM開發(fā)教程之基于ARM微處理器TCPIP協(xié)議棧LwlP實現(xiàn)
請問這個input函數(shù)的原型是在哪里?
HI3861的SDK中LWIP的TCPIP線程優(yōu)先級?
基于STM32單片機(jī)LwIP協(xié)議的相關(guān)資料推薦
MCU_STM32CUBEMX v5.5.0的一個BUG是什么原因造成的呢
為什么CubeMX V6.5.0生成的ethernetif.h文件中會存在錯誤呢
嵌入式TCPIP協(xié)議棧LWIP的內(nèi)部結(jié)構(gòu)

基于ARM的輕量級TCPIP協(xié)議棧的移植及應(yīng)用

TCPIP協(xié)議棧的實現(xiàn)lwip
AN1921 - Microchip TCPIP精簡協(xié)議棧

基于STM32的虛擬多線程(TI_BLE協(xié)議棧_ZStack協(xié)議棧)

tcpip協(xié)議棧是什么?tcpip協(xié)議棧有哪些協(xié)議?tcpip協(xié)議棧中報文封裝和解封裝過程

評論