我想通過DHCP和TCP連接來開啓/關閉lwip電纜。兩種解決方案都可以正常工作,但我不知道哪一個更明智,更正確。 (恐怕不合適的環境中函數調用)在FreeRTOS中實現線程間通信的最佳方式是什麼? - 檢查lwIP電纜的狀態
- 解決方案一:
我打電話:
tcpip_init(network_init, &net);
並在那之後:
xTaskCreate(hc_task, (signed portCHAR *) "send hc",1536u, NULL, TCPIP_THREAD_PRIO, NULL);
因此,有2線程主線程lwIP
線程和hc_task
線程。 hc_task
是:
static void hc_task(void *parameters)
{
struct hc_message mes;
mes.client_port_number = 4839;
mes.host_addres = "192.168.1.183\0";
mes.host_add[0] = 192;
mes.host_add[1] = 168;
mes.host_add[2] = 1;
mes.host_add[3] = 183;
mes.host_file = "test/data.php\0";
mes.host_port_number = 80;
mes.target = "http://192.168.1.183/test/data.php\0";
transferEnd = 0;
numberOfPacketsProc = 0;
totalRecievedSize = 0;
hc_send(&mes, 0);
vTaskDelete(NULL);
}
hc_send
做一個TCP連接到一些網頁下載。
然後,我有與檢查PHY並讀取電纜狀態2秒的間隔輪詢定時器:
if cable is on -> ok
if cable is off -> call netif_set_link_down(pxNetIfInUse);
現在下一次當電纜繼續我稱:
netif_set_link_up(pxNetIfInUse);
我猜測在定時器中斷中調用這些函數是正確的。
- 第二溶液:
第二種方法是,定時器中斷將消息發送到主lwip
螺紋:
Link off -> res = sys_mbox_trypost(toOutput, &msg);
定時器中斷髮送主LWIP線程的消息到打電話:
netif_set_link_up(pxNetIfInUse);
o R:
netif_set_link_down(pxNetIfInUse); //(in lwip main thread)
我有一個全局變量來存儲電纜狀態(從定時器中斷保存),我檢查它在主線程lwip
調用正確的函數(或鏈接上下)。所以我問的是哪種解決方案是更好/正確的方式來做到這一點:在定時器中斷調用鏈接關閉或向上(這些是lwip函數)或者定時器中斷向主lwIP線程發送消息?
我的配置: 微處理器LPC1768 - LAN8720 PHY - FreeRTOS操作系統7.4 - LWIP 1.4。1個 - DHCP包括 - TCP/IP包括