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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.