Forum: Mikrocontroller und Digitale Elektronik LwIP tcp_write() ERR_MEM


von Gustav G. (gustavgggg)


Lesenswert?

Ich streame Daten per TCP zu einem PC und benutze dafür im STM32 LwIP. 
Die Datenrate kann recht hoch sein und ich möchte gerne vor einem Aufruf 
von tcp_write() wissen, ob noch genügend speicher da ist. Aus der LwIP 
Dokumentation entnehme ich: "The proper way to use this function is to 
call the function with at most tcp_sndbuf() bytes of data". Das habe ich 
gemacht aber es kann immer noch vorkommen, dass ERR_MEM zurückgegeben 
wird.

Wie kann ich vor Aufruf von tcp_write prüfen, ob noch genug Speicher da 
ist? Das ist mir wichtig, da ich Daten von einer queue hole und nicht 
wieder zurückschieben kann aber wenn ich weiß, dass ein senden 
fehlschlagen würde könnte ich die Datenrate intern drosseln.

von Monk (roehrmond)


Lesenswert?

Ich weis die Antwort nicht, würde allerdings so vorgehen:

Im Quelltext von tcp_write() nachschauen, was genau den Fehler ERR_MEM 
auslöst. Vermutlich wird irgendeine Funktion aufgerufen, die den Fehler 
meldet oder es werden zwei Variablen miteinander verglichen. Den 
gleichen Check kannst du dann in dein Programm einbauen und benutzen, 
bevor du tcp_write() aufrufst.

von J. S. (jojos)


Lesenswert?

lwip hat ja eine Menge eine Einstellungen, das TCP ist da per default 
Speichersparend vorkonfiguriert. Man kann die tcp buffer höher setzen 
und damit wahrscheinlich mehr Durchsatz hinbekommen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.