Я пытаюсь периодически отправлять клиенту некоторые данные с помощью LWIP с микроконтроллера.Я начал с кода из примера Atmel-Studio, который называется «Базовый пример lwIP Raw HTTP».После отправки около 100 объектов разрывается соединение.
Я посылаю сигнал сердцебиения и другой объект каждые 100 мс от клиента к микроконтроллеру.Тогда моя функция receive-callback вызывается из lwIP.Отправка данных таким способом работает нормально.
Но я хочу отправить данные отсоединенными от получения данных.В моей попытке я посылаю данные с теми же функциями, которые я также использую в контексте обратного вызова, но в основном цикле while.Я использую указатель на tcp_pcb из инициализации в own_init ().Когда соединение разрывается, состояние печатной платы изменяется с УСТАНОВЛЕНО на ЗАКРЫТО.Я подозреваю, что я неправильно использую указатели pcb, но я не могу придумать другой способ сделать это.Спасибо!
int main(void)
{
...
/* Bring up the ethernet interface & initialize timer0, channel0. */
init_ethernet();
/* Bring up the server. */
struct tcp_pcb* pcb;
pcb=own_init();
uint32_t sendInterval=100; //ms
uint32_t lastTimeSFSsent=0;
uint32_t lastTimeHeartbeatSent=0;
uint32_t currentTime=0;
uint8_t is_connected=0;
initSFS();
while(1)
{
currentTime=sys_get_ms();
if(currentTime > lastTimeSFSsent + sendInterval && pcb->state==ESTABLISHED){
lastTimeSFSsent=sys_get_ms();
sendSFS(pcb);
}
if(currentTime> lastTimeHeartbeatSent + sendInterval && pcb->state==ESTABLISHED){
lastTimeHeartbeatSent=sys_get_ms();
sendHeartbeat(pcb);
}
ethernet_task();
}
}
Это отличается от примера кода:
struct tcp_pcb* own_init(void)
{
struct tcp_pcb *pcb;
struct tcp_pcb *tpcb;
pcb = tcp_new();
tcp_bind(pcb, IP_ADDR_ANY, 5005);
tpcb = tcp_listen(pcb);
tcp_accept(tpcb, own_accept);
return pcb;
}