最近在學(xué)習(xí)物聯(lián)網(wǎng)相關(guān)的知識(shí),打算用ST的開發(fā)板STM32F407ZGT6作為控制中心,上面搭載FreeROTS實(shí)時(shí)系統(tǒng),STM32F407開發(fā)板作為 TCP client,網(wǎng)絡(luò)調(diào)試助手作為TCP server,利用串口獲取兩者的連接狀態(tài)。在用原子的lwip工程移植到自己的STM32F407開發(fā)板時(shí),可以正常獲取DHCP分配的IP,也能通過網(wǎng)絡(luò)和網(wǎng)絡(luò)工具正常通信,但是串口一直提示錯(cuò)誤:
從port.c文件中,定位到該行。
從文件中來看,應(yīng)該是和中斷有關(guān)的,從網(wǎng)上查閱了很多資料發(fā)現(xiàn),首先懷疑串口的中斷的優(yōu)先級(jí)超過FreeRTOS的管理最高優(yōu)先級(jí),需要將串口中斷的優(yōu)先級(jí)降為FreeRTOS的管理最高優(yōu)先級(jí)以下就可以。
據(jù)此,分別確認(rèn)以下中斷配置:主函數(shù)中,(1)系統(tǒng)中斷優(yōu)先級(jí)分組,位于main.c文件(2)串口中斷,位于usart.c文件(3)FreeRTOS系統(tǒng)可以管理的中斷最高優(yōu)先級(jí),位于freertosconfig.h文件
可以發(fā)現(xiàn),串口中斷的優(yōu)先級(jí)為3,freeRTOS最大可管理的中斷優(yōu)先級(jí)是5(中斷級(jí)小于等于5,freeRTOS無法管理),中斷優(yōu)先級(jí)更改為6,發(fā)現(xiàn)不行。再繼續(xù)查閱資料。
發(fā)現(xiàn)在ethernetif.c源碼中,low_level_input中有一個(gè)pbuf_alloc,而源碼中恰恰有sys_arch.c的sys_arch_protect()和sys_arch_unprotect()的臨界保護(hù)
而low_level_input是在中斷中調(diào)用的。
發(fā)現(xiàn)參考DEMO的sys_arch.c中的sys_arch_protect()和sys_arch_unprotect()是使用的任務(wù)級(jí)的臨界保護(hù),所以芯片會(huì)出現(xiàn)未知的異常。
發(fā)現(xiàn)編譯下載到板卡中,串口還是會(huì)出現(xiàn)同樣的問題。
此外sys_mbox_trypost也要用中斷級(jí)入隊(duì)函數(shù)。
修改后,重新編譯下載,串口打印ok.
出現(xiàn)這個(gè)問題應(yīng)該就是在中斷中調(diào)用了任務(wù)級(jí)臨界保護(hù),建議逐條查看中斷中調(diào)用的函數(shù)中是否用到了任務(wù)級(jí)臨界保護(hù)。
-
FreeRTOS
+關(guān)注
關(guān)注
12文章
483瀏覽量
62018 -
LwIP協(xié)議
+關(guān)注
關(guān)注
0文章
11瀏覽量
8903 -
串口中斷
+關(guān)注
關(guān)注
0文章
64瀏覽量
13862 -
DHCP網(wǎng)絡(luò)
+關(guān)注
關(guān)注
0文章
2瀏覽量
4920 -
STM32F407ZGT6
+關(guān)注
關(guān)注
4文章
4瀏覽量
4825
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論