我想在开启 DHCP 和 TCP 连接的情况下制作 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 连接以下载它。
然后我有一个间隔为 2 秒的轮询计时器,它检查 PHY 并读取电缆状态:
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);
或者:
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