1、最近項目遇到的問題
最近在stm32上用cubemax移植了lwip協議棧,lwip就不用過多介紹了,(lightweight IP)一款輕量級的開源TCP/IP協議棧,專為嵌入式系統設計,具有小巧高效、可裁剪性強,主要是已經發展和廣泛應用多年,可靠性還是可以的,基本上大多數嵌入式系統的網絡通信需求都可以滿足。
然而最近項目中通信數據量大一點,老是send超時,運行時間久了還會直接掛在ethnetif_input,這可把我給整郁悶了。
最后定位到原因還是lwip適配的兩個線程優先級分配得有問題,導致FreeRTOS信號量超時異常。
2、兩個主要線程
在lwIP協議棧中,ethernetif_input線程和tcpip協議棧線程是兩個核心的線程,在處理網絡數據包和執行TCP/IP協議棧功能時的作用就不用多說了,下面簡單的介紹下兩個線程的作用:
ethernetif_input線程:
ethernetif_input線程負責接收來自網絡接口(如以太網接口)的數據包,并將其傳遞給lwIP協議棧進行處理。
這個線程通常運行在較低的優先級,因為它主要負責接收和緩存數據包,而不涉及復雜的協議處理。
在實際應用中,可以根據系統的需求和性能進行調整,但通常情況下,ethernetif_input線程的優先級相對較低。
tcpip協議棧線程:
tcpip協議棧線程是lwIP協議棧的核心線程,負責處理TCP/IP協議棧的各種功能,包括TCP連接管理、IP數據報的路由和轉發、以及UDP數據包的處理等。
由于tcpip協議棧線程需要處理復雜的協議邏輯和數據包處理,因此它通常運行在較高的優先級。
保持tcpip協議棧線程的較高優先級有助于確保網絡數據包的及時處理和協議棧功能的高效執行。
在實際的嵌入式系統設計中,需要根據具體的硬件平臺和應用場景來合理設置這兩個線程的優先級。通常情況下,可以通過操作系統或者裸機編程的方式來配置線程的優先級,以滿足系統對網絡數據處理和協議棧功能的實時性和效率要求。
3、總 結
所以通常情況下,tcpip協議棧線程的優先級需要設置得更高,因為tcpip協議棧線程需要處理復雜的協議邏輯、數據包處理、連接管理等任務,保持tcpip協議棧線程的較高優先級可以確保網絡數據包的及時處理和協議棧功能的高效執行,從而提高系統的響應速度和網絡通信的穩定性。
ethernetif_input線程通常負責接收和緩存數據包,相對來說不涉及太多復雜的處理邏輯,因此可以設置相對較低的優先級。
經過優先級調整后,跑了2天都沒有出現異常問題。
審核編輯:黃飛
-
單片機
+關注
關注
6023文章
44378瀏覽量
628561 -
TCP
+關注
關注
8文章
1324瀏覽量
78760 -
UDP
+關注
關注
0文章
317瀏覽量
33801 -
LwIP
+關注
關注
2文章
84瀏覽量
26936 -
線程
+關注
關注
0文章
501瀏覽量
19580
原文標題:在單片機上運行Lwip線程優先級很重要~
文章出處:【微信號:嵌入式情報局,微信公眾號:嵌入式情報局】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論