Кто-то научился используя библиотеку WCHNET WCH работать с
медленными коннектами? У меня выскакивает ошибка 0x11 (#define
WCHNET_ERR_MEM 0x11 //Out of memory error) Главное что по локалке все прекрасно успевает выкинуть , продергиваешь через глобальный интернет - библиотека пытается засунуть во внутренние буфера больше, чем может прожевать стек, выкидывает
код 0x11. Смотрю в отладчике что возвращает
WCHNET_QueryUnack - если все нормально (быстрая локалка) то и запас сегментов памяти есть. А если медленная, то запаса сегментов нет и крашит память (сегменты кончаются и назад не высвобождаются.).
uint8_t send_bin_data(uint8_t socket_id, uint8_t *data, uint32_t total_len)
{
uint8_t *p = data;
uint32_t remaining = total_len;
uint8_t ret = 0;
uint8_t ier = 0;
while(remaining > 0)
{
// Ждем свободного места в буфере
if(WCHNET_QueryUnack(socket_id, NULL, NULL) < (WCHNET_NUM_TCP_SEG-2))
{
ret = WCHNET_SocketSend(socket_id, p, &try_to_send);
}
else
{
vTaskDelay(pdMS_TO_TICKS(1));
}
if((ret == WCHNET_ERR_CLSD) || (ret == WCHNET_ERR_CONN))
{
WCHNET_SocketClose(socket_id, TCP_CLOSE_ABANDON);
return ret;
}
if(ret == WCHNET_ERR_SUCCESS && try_to_send > 0)
{
remaining -= try_to_send;
p += try_to_send;
}
}
return WCHNET_ERR_SUCCESS;
}