MCU_STM32CUBEMX v5.5.0的一個BUG:ethernetif_input引起進入HardFault_Handler

STM32CUBEMX v5.5.0 配置FreeRTOS + LWIP,在MX_LWIP_Init()中的倒數第二句,

osThreadNew(ethernetif_input, &link_arg, &attributes);

這裏是錯誤的,link_arg顯然不能是ethernetif_input的參數,

正確的用法是

osThreadNew(ethernetif_set_link, &link_arg, &attributes);

不過,如果你下載最新版STM32CUBEMX的話,這個BUG已經修復了。

順便說兩句,發現這個BUG的原因,是仿真調試時會在ethernetif_input中因爲指針錯誤而直接進入HardFault_Handler。好奇在網上查找了一下,發現有不少在啓動FreeRTOS+LWIP時在prvStartFirstTask中調用“svc 0"這條指令時會進入HardFault,當然本質上是SVC中斷進入vPortSVCHandler中斷服務,中斷服務調用第一個最近的Task就是這個ethernetif_set_link,這個Task也是MX_LWIP_Init()中最後加入的那個,也是用戶創建的Task的前一個(使用默認優先級的情況)。

不過貌似現在最新版已經把MX_LWIP_INIT移到第一個任務裏去了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章