Forum: Mikrocontroller und Digitale Elektronik lwip: Unterschied der APIs


von Alexander M. (a_lexander)


Lesenswert?

Hallo Zusammen.

Ich bin dabei einen HTTP Server auf dem ESP aufzusetzen. Nur leider 
verstehe ich die Unterschiede der jeweiligen APIs nicht. Folgende 
Bibliothek verwende ich: lwip

Es gibt dazu mehrere APIs für die Implementierung:

https://www.nongnu.org/lwip/2_1_x/group__api.html

1. raw API
2. Sequential-style API
3. Socket API

Die raw API wird meiner Meinung nach verwendet, wenn kein Betriebssystem 
verwendet werden kann (Aufrufen durch Events).

Wie sieht's mit den anderen beiden aus? Will mir da jemand kurz den 
Unterschied erklären.

Danke ;)

von c-hater (Gast)


Lesenswert?

Alexander M. schrieb:

> https://www.nongnu.org/lwip/2_1_x/group__api.html
>
> 1. raw API
> 2. Sequential-style API
> 3. Socket API
>
> Die raw API wird meiner Meinung nach verwendet, wenn kein Betriebssystem
> verwendet werden kann (Aufrufen durch Events).
>
> Wie sieht's mit den anderen beiden aus? Will mir da jemand kurz den
> Unterschied erklären.

Die einzige Aufgabe der von dir selbst verlinkten Doku ist: dir genau 
diese Unterschiede zu erklären.

Lesen und verstehen musst du das selbst. Da kann dir niemand bei helfen. 
Lernen ist immer eigene Anstrengung.

von Chris (Gast)


Lesenswert?

Warum muss es unbedingt eigener Server sein und nicht bspw.:

https://github.com/me-no-dev/ESPAsyncWebServer

?

Was hast du nochmal vor? Vielleicht gibts schon fertig?

MfG

von Alexander M. (a_lexander)


Lesenswert?

Danke, die library habe ich mir schon mal angeschaut.
Ich benötige aber die Sockets so schon, weil ich noch ein paar weitere 
Server implementieren möchte..

Mir ist der grundlegende Gedanke aber zwischen der sequential und der 
socket API aber nicht ganz klar, stimmt das:
Verwendung der Socket API bei Netzwerkprogrammierung in Windows / Unix, 
Verwendung der sequential API bei embedded Devices? Ich kapiere es 
einfach nicht..

Grüße

von Chris (Gast)


Lesenswert?

Wie genau guckst du denn so?

https://github.com/me-no-dev/ESPAsyncTCP
8266

https://github.com/me-no-dev/AsyncTCP
32

Wenn es nur lwip werden soll, wird es raw und unter dem Link von dir 
steht auch warum. ;-)

Welcher Art weiterer Server?

von Stefan F. (Gast)


Lesenswert?

Alexander M. schrieb:
> Ich benötige aber die Sockets so schon

Dann ist die Entscheidung schon schon gefällt, warum fragst du noch?

von Alexander M. (a_lexander)


Lesenswert?

Danke :)

http, https & dns. Die 3 Services bräuchte ich.

OS: FreeRTOS, jeder Service läuft auf 1 Task

Warum denn "raw", meiner Meinung nach wird "raw" nur dann verwendet, 
wenn kein Betriebssystem vorhanden ist?

Grüße

von Stefan F. (Gast)


Lesenswert?

Alexander M. schrieb:
> http, https & dns. Die 3 Services bräuchte ich.

Die sind alle drei icht Bestandteil von lwIP, die würde man oben drauf 
setzen.

> meiner Meinung nach wird "raw" nur dann verwendet,
> wenn kein Betriebssystem vorhanden ist?

Ich denke, da irrst du dich.

von Rolf M. (rmagnus)


Lesenswert?

Alexander M. schrieb:
> 1. raw API
> 2. Sequential-style API
> 3. Socket API

Nummer 3 wird 1:1 genutzt, wie bei klassischen Berkeley-Sockets, wie man 
sie von anderen Systemen her kennt, hat aber einen großen Overhead.
Nummer 2 bietet im Prinzip die gleichen Funktionen, aber mit anderen 
Parametern. Die ist so ausgelegt, dass die Daten nicht alle jedes mal im 
Speicher umher kopiert werden müssen, braucht damit weniger Speicher und 
Laufzeit als Nummmer 3, aber die Benutzung ist immer noch sehr ähnlich.
Beide brauchen Multithreading.
Nummer 1 wird komplett anders verwendet, ist aber bei weitem am 
effizientesten und geht auch ohne Multithreading.

Nummer 3 setzt auf Nummer 2 auf, das wiederum auf Nummer 1 aufsetzt. 
Somit verhält sich dann auch die Codegröße entsprechend, da man nicht 
benötigte Interfaces komplett abschalten kann.

von Programmierer (Gast)


Lesenswert?

Man kann das "raw" Interface auch mit einem RTOS verwenden. Dann muss 
man sich aber selbst darum kümmern, die Daten zwischen dem Threads hin 
und her zu schicken, weil lwip dann keine Synchronisation mehr bietet. 
Das ist bei den anderen beiden APIs anders.

von Alexander M. (a_lexander)


Lesenswert?

Vielen Dank ;)

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.