реклама на сайте
подробности

 
 
> LwIP инициировать передачу
ConstHw
сообщение Nov 20 2015, 08:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 12-11-15
Пользователь №: 89 287



Разбираюсь с LwIP, c записью данных (PC пишет в Zynq) все вроде понятно.
Пытаюсь иниицировать передачу. Приходит пакет-команда "дай данных", в обработчике пакета вызываю функцию
Код
err_t recv_callback(void *arg, struct tcp_pcb *tpcb,
                               struct pbuf *p, err_t err)

    if (!p) {
        tcp_close(tpcb);
        tcp_recv(tpcb, NULL);
        return ERR_OK;
    }
    /* indicate that the packet has been received */
    tcp_recved(tpcb, p->len);

///// ТУТ ОБРАБОТАЛИ КОМАНДУ И ВЫЯСНИЛИ ЧТО НАДО ЧИТАТЬ/////

for (i=0;i<10;++) // Запускаем передачу 10 раз
        if (tcp_sndbuf(tpcb) > p->len) { //Проверили что есть место
                        tcp_write(tpcb, tcptrx->curr_addr, step, 1); //Пищем пакет длины step
            tcptrx->curr_addr=tcptrx->curr_addr+step; // Инкерементим Step
            xil_printf("    Curr Addr : 0x"); putnum(tcptrx->curr_addr);xil_printf("\r\n");
        }
    }


В консоли вижу пробегание счетчика адресов, но на приемной стороне ничего не появляется.
Мне кажется, что я неправильно инициирую передачу. Как сделать это правильно? Чтобы сначала закончить обработку принятого pbuf а потом начать свою передачу?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
shpongle
сообщение Dec 9 2015, 19:36
Сообщение #2





Группа: Новичок
Сообщений: 4
Регистрация: 1-11-15
Пользователь №: 89 128



После tcp_write надо сделать tcp_output, чтобы отправить данные.
Следующую порцию можно отправить таким же образом, но лучше через функцию sent_callback,
которая привязывается через функцию tcp_sent. Функция sent_callback вызывается всякий раз,
когда приходит подтверждение данных и освобождается память в tcp_sndbuf.
Условие if (tcp_sndbuf(tpcb) > p->len) не внятное, что программа будет делать?

Инициировать передачу лучше в основной программе, в функции main. А в функции recv_callback
устанавливать флаг запроса на передачу/чтение.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th August 2025 - 00:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01341 секунд с 7
ELECTRONIX ©2004-2016