今天在除錯乙太網驅動的時候遇到一個問題,當程式執行到這個 /* add the network interface (IPv4/IPv6) with RTOS */ netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);
函式里面的netif_invoke_ext_callback(netif, LWIP_NSC_NETIF_ADDED, NULL);
這個函式時就會卡死在configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );
透過查詢資料發現是中斷優先順序設定的問題。
CORTEX核心的優先順序是數值越小優先順序越高,即0是最高優先順序。FreeRTOS為了滿足某些應用對中斷實時性要求高的需求,使得中斷優先順序高於某個值之後,就不能呼叫作業系統的核心函式來提高實時性。