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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> tcp_check_send выдает нулевое значение, Стек Keil 4.72
smk
сообщение Jul 29 2014, 19:23
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



По приходу пакета я отправлял тестовый пакет, а пришедший копировал в буфер. Наоборот конечно правильней, но работало же. Смысл своевременных отправок в том, чтобы измеренные значения поступали в тот момент когда они соответствуют обстановке, а не когда все поменялось и сообщение фактически устарело. Скажем периодичность в десятки мС при размере в 256 байт устроила бы. Скажем раз в 25 мС.
Раньше отправка стояла там где сейчас Flags.Send_answer = 1;

CODE
void tcp_send_buff (void)
{
unsigned char remip[4] = {192,168,0,1};

switch (tcp_get_state (my_socket))
{
case TCP_STATE_FREE:
case TCP_STATE_CLOSED:
/* Connection idle, send Connect Request. */
tcp_connect (my_socket, remip, PortNumber, 0);
break;
case TCP_STATE_CONNECT:
Flags.Send_answer = 1;
break;
}
}


unsigned short tcp_callback (uint8_t soc, uint8_t evt, uint8_t *buf, uint16_t len)
{
unsigned int i = 0;
/* This function is called by the TCP module on TCP event */
/* Check the Net_Config.h for possible events. */
switch (evt)
{
case TCP_EVT_DATA: //
/* TCP data frame has arrived, data is located at *buf, */
/* data length is len. Allocate buffer to send reply. */
my_socket = soc;
my_len = len;
tcp_send_buff();
for(i = 0; i <= len; i++)
{
my_rx_buff[i] = *buf;
buf++;
}
break;

case TCP_EVT_CONREQ:
/* Remote host is trying to connect to our TCP socket. */
return (1);

case TCP_EVT_ABORT:
break;

case TCP_EVT_CONNECT:
/* Socket is connected to remote peer. */
return (1);

case TCP_EVT_CLOSE:
break;

case TCP_EVT_ACK:
/* Our sent data has been acknowledged by remote peer */
break;
}
return (0);
}


Теперь в основном цикле:
Код
        if(Flags.Send_answer)
        {
                /* We are connected, send command to remote peer. */
            my_temp = tcp_check_send (my_socket);
            if (my_temp != 0)
                    {
                        maxlen = tcp_max_dsize (my_socket);
                        if(maxlen > 255) maxlen = 255;
                        sendbuf = tcp_get_buf (maxlen);
                        memcpy (sendbuf, my_tx_buff, maxlen);
                        tcp_send (my_socket, sendbuf, maxlen);
                    }
            Flags.Send_answer = 0;
        }


Сообщение отредактировал IgorKossak - Jul 30 2014, 08:27
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 29 2014, 20:12
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Да... чудно это все...

Могу предположить только что кончилась память, типа буфер выделенный для входящего сообщения не дает возможности выделить память для исходящего. Раньше было либо больше памяти, либо короче были сообщения, например....

Go to the top of the page
 
+Quote Post
smk
сообщение Jul 30 2014, 06:50
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Golikov A. @ Jul 29 2014, 23:12) *
Да... чудно это все...

Могу предположить только что кончилась память, типа буфер выделенный для входящего сообщения не дает возможности выделить память для исходящего. Раньше было либо больше памяти, либо короче были сообщения, например....

Интересно сколько оперативки кейловский стек под сокет ТСР резервирует.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 30 2014, 06:57
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну как бы это в net_config.c указывается...
Go to the top of the page
 
+Quote Post

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

 


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


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