Продолжаю ковырять стек. Прочитал переведенную на русский справку по uip, но особо к решению не продвинулся. в uip выбрал режим webclient. остальные строки с файлами в uip-conf.h закомментил. Разрешил UIP_CONF_UDP, т.к. без него почему-то лезут ошибки...
Железо - stm32f107vb и lan8510a. Вебсервер из примера заработал хорошо.
Клиент, естественно, нет

Код, который я менял и, как я думаю, должен инициализировать uip и запускать get:
CODE
uint32_t uIPMain(void)
{
uip_ipaddr_t ipaddr;
struct uip_conn *conn;
// Sys timer init 1/100 sec tick
clock_init(2);
timer_set(&periodic_timer, CLOCK_SECOND / 2);
timer_set(&arp_timer, CLOCK_SECOND * 10);
// Initialize the ethernet device driver
// Init MAC
// Phy network negotiation
tapdev_init();
// Initialize the uIP TCP/IP stack.
uip_init();
uip_arp_init();
// Init WEB server
uip_ipaddr(&ipaddr, 192,168,0,114);
uip_sethostaddr(&ipaddr);
uip_ipaddr(&ipaddr, 192,168,0,1);
uip_setdraddr(&ipaddr);
uip_ipaddr(&ipaddr, 255,255,255,0);
uip_setnetmask(&ipaddr);
webclient_init();
resolv_init();
return(1);
}
CODE
void vEth(void *pvParameters) {
extern struct timer periodic_timer, arp_timer;
uint32_t i;
Ethernet_Test();
uip_ipaddr_t ipaddr;
char host[] = {"192.168.0.10"};
char buff[300] = { };
uip_ipaddr(&ipaddr, 192,168,0,10);
webclient_get(&host[0],HTONS(80),&buff[0]);
for (;;) {
uip_len = tapdev_read(uip_buf);
if(uip_len > 0)
{
if(BUF->type == htons(UIP_ETHTYPE_IP))
{
uip_arp_ipin();
uip_input();
// If the above function invocation resulted in data that
// should be sent out on the network, the global variable
// uip_len is set to a value > 0.
if(uip_len > 0)
{
uip_arp_out();
tapdev_send(uip_buf,uip_len);
}
}
else if(BUF->type == htons(UIP_ETHTYPE_ARP))
{
uip_arp_arpin();
// If the above function invocation resulted in data that
// should be sent out on the network, the global variable
// uip_len is set to a value > 0.
if(uip_len > 0)
{
tapdev_send(uip_buf,uip_len);
}
}
}
else if(timer_expired(&periodic_timer))
{
timer_reset(&periodic_timer);
for(i = 0; i < UIP_CONNS; i++)
{
uip_periodic(i);
// If the above function invocation resulted in data that
// should be sent out on the network, the global variable
// uip_len is set to a value > 0.
if(uip_len > 0)
{
uip_arp_out();
tapdev_send(uip_buf,uip_len);
}
}
/*#if UIP_UDP
for(i = 0; i < UIP_UDP_CONNS; i++) {
uip_udp_periodic(i);
// If the above function invocation resulted in data that
// should be sent out on the network, the global variable
// uip_len is set to a value > 0.
if(uip_len > 0) {
uip_arp_out();
tapdev_send();
}
}
//#endif // UIP_UDP*/
// Call the ARP timer function every 10 seconds.
if(timer_expired(&arp_timer))
{
timer_reset(&arp_timer);
uip_arp_timer();
}
}
}
vTaskDelete(NULL);
}
webclient_get возвращает 1, wireshark никаких запросов, похожих на мой, не видит. webclient_appcall() из файла webclient.c не вызывается (наверное должен). Железка пингуется. Подскажите пожалуйста, где может быть ошибка