最近在學習物聯網相關的知識,打算用ST的開發板STM32F407ZGT6作為控制中心,上面搭載FreeROTS實時系統,STM32F407開發板作為 TCP client,網絡調試助手作為TCP server,利用串口獲取兩者的連接狀態。在用原子的lwip工程移植到自己的STM32F407開發板時,可以正常獲取DHCP分配的IP,也能通過網絡和網絡工具正常通信,但是串口一直提示錯誤:
從port.c文件中,定位到該行。
從文件中來看,應該是和中斷有關的,從網上查閱了很多資料發現,首先懷疑串口的中斷的優先級超過FreeRTOS的管理最高優先級,需要將串口中斷的優先級降為FreeRTOS的管理最高優先級以下就可以。
據此,分別確認以下中斷配置:主函數中,(1)系統中斷優先級分組,位于main.c文件(2)串口中斷,位于usart.c文件(3)FreeRTOS系統可以管理的中斷最高優先級,位于freertosconfig.h文件
可以發現,串口中斷的優先級為3,freeRTOS最大可管理的中斷優先級是5(中斷級小于等于5,freeRTOS無法管理),中斷優先級更改為6,發現不行。再繼續查閱資料。
發現在ethernetif.c源碼中,low_level_input中有一個pbuf_alloc,而源碼中恰恰有sys_arch.c的sys_arch_protect()和sys_arch_unprotect()的臨界保護
而low_level_input是在中斷中調用的。
發現參考DEMO的sys_arch.c中的sys_arch_protect()和sys_arch_unprotect()是使用的任務級的臨界保護,所以芯片會出現未知的異常。
發現編譯下載到板卡中,串口還是會出現同樣的問題。
此外sys_mbox_trypost也要用中斷級入隊函數。
修改后,重新編譯下載,串口打印ok.
出現這個問題應該就是在中斷中調用了任務級臨界保護,建議逐條查看中斷中調用的函數中是否用到了任務級臨界保護。
-
FreeRTOS
+關注
關注
12文章
485瀏覽量
63420 -
LwIP協議
+關注
關注
0文章
11瀏覽量
9038 -
串口中斷
+關注
關注
0文章
67瀏覽量
14177 -
DHCP網絡
+關注
關注
0文章
2瀏覽量
4972 -
STM32F407ZGT6
+關注
關注
4文章
4瀏覽量
4977
發布評論請先 登錄
相關推薦
移植LWIP+FREERTOS時遇到的問題怎么解決?
為什么探索者stm32f407移植UCOSIII+LWIP1.4.1后無法穩定運行?
lwip帶freertos操作系統移植代碼分享!
freeRTOS+LWIP在STM32F407上的移植分享!
STM32F407+ucos-iii+lwip1.4.1移植分享!
請問有reeRTOS+STM32F407ZGT和lwip1.4.1+dp83848程序嗎?
STM32F107+LWIP+FreeRTOS 精選資料分享
STM32F107VCT6+DP83848 移植 LWip-1.4.1 筆記
FreeRTOS-stm32f407移植

【STM32】FreeRTOS移植

使用STM32CubeMX對F407ZGT6移植LWIP(全網最全)

評論