ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
27 января
1567367 Топик полностью
Диaлaп (Вчера, 18:48, просмотров: 7)
Кто-то научился используя библиотеку 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;
}