我想做一个lwip电缆与DHCP和TCP连接上/关闭防弹。这两种解决方案都很有效,但我不知道哪一种更明智、更正确。(我害怕错误的上下文函数调用)
我呼吁:
tcpip_init(network_init, &net);在那之后:
xTaskCreate(hc_task, ( signed portCHAR * ) "send hc",1536u, NULL, TCPIP_THREAD_PRIO, NULL);所以有两个线程,主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
发布于 2013-06-01 19:12:12
在感谢lwip用户支持(感谢Pomeroy、Sylvain、Richard和其他帮助我-链接到辩论的人)几天后,我回复道:
在计时器呼叫中:
//link off
printf( "Interrupt LINK OFF\n" );
iface_up = 0;
resultCall = tcpip_callback_with_block(tcp_set_link_status, NULL, 0);
//link on
printf("Interrupt LINK ON\n" );
resultCall = tcpip_callback_with_block(tcp_set_link_status, NULL, 0);因此,下面的函数将在主lwip TCP/IP线程的线程上下文中执行,这是正确的:
void tcp_set_link_status(void)
{
if(cableState == 0)
{
printf("TCP callback printf set link down \n");
netif_set_link_down(pxNetIfInUse);
}
else
{
printf("TCP callback Printf set link up \n");
netif_set_link_up(pxNetIfInUse);
}
}https://stackoverflow.com/questions/16694446
复制相似问题