pvvx
Активный участник сообщества
Встречный вопрос - когда?Pvvx , а где выполняется отправка буфера в тср ?
Система работает по событиям.
Если приходит запрос открытия соединения TCP, то инициализируется UART драйвер. (если TCP закрыто или закрывается, то драйвер UART зарывается и не работает).
Далее, если приняты символы с этого TCP соединения, то они передаются на отправку UART драйверу, который работает по прерываниям. Он регулирует размер "приемного окна TCP", т.к. поток по TCP (у нас по WiFi 1.2 мегабайта в секунду) превышает скорость вывода UART. Размер "приемного окна в TCP стеке" говорит передающему, что больше не мы не примем. Может падать до нуля, если буферы передачи в UART забиты - тогда передающий ждет. Так-же буфера передачи в UART могут быть заполнены по выставленному сигналу RTS-CTS приемником на ответной UART стороне.
Когда приняты байты по UART, то происходит прерывание, проверяется наличие TCP соединения и байтики отправляются в буфер LwIP с расчетами порций передачи для достижения максимальной производительности и других условий (тех-же "приемного окна в TCP стеке" у принимающей стороны, и если не лезет, то выставляет RTC/CTS сигнал означающий, что больше не может быть принято - занят принимающий или низкая скорость канала). LwIP выдает событие, что отправил предыдущий кусок. Вы туда и впихнули свои процедуры Но там очень критически размеры буферов и блоков отправки основного процесса для получения максимальной производительности при передаче методом TCP (стеком TCP).
Во всей этой цепочке нет места для ваших вставок - они будут нарушать работу теми или иными способами.
Вписывайте специальную задачу вставки в поток приема или передачи своих байтиков при условии активности соединения UART2TCP и анализом свободных объемов в блоках для передачи/приема TCP стека. Это типа ещё один процесс, работающий по событиям, который должен учитывать работу множества других процессов и уловий, не только своих, но и у приемной/передающей стороны
По методу вашей вставки видно, что вам рано даже Arduino, где никакие стандарты TCP или ещё чего не выполняются. По этому, вам и совет – осваивайте Arduino– там ничего не учитывается и без разницы будет ли это работать у других.
Последнее редактирование: