Fragen zum Lwip-Stack

Gast #2738672
Lesenswert?

Hallo, ich möchte den Lwip-Stack auf einen Cortex-M3 (Stm32) einsetzen.
Für diesen Stack benötige ich einen eigenen Hardware-Timer-Interrupt 
oder einen eigenen Task. Wie lange braucht eigentlich der Lwip-Stack bei 
der Bearbeitung eines ankommenden Ethernetpacketes ? Liegt die 
Bearbeitung bzw. Verarbeitung bei ca. 1ms ? Gibt es da bereits Messungen 
?

Vielen Dank im Vorfeld!
Gast #2738958
Lesenswert?

Moin,

1ms sollte zu schaffen sein. Hängt aber von deinem OS bzw. deinem 
Scheduler/Handler ab, wie auch der uC-Performance.
Der lwip läuft zwar auf vielen Systemen, ist aber nicht auf Performance 
getrimmt. Für schnelle, garantierte Antwortzeiten ist das Ding IMHO 
relativ unbrauchbar, besser man schreibt sich seinen auf DMA optimierten 
UDP-Stack (TCP ist für Realtime bekannterweise problematisch).

Grüsse,

- Strubi
Gast #2738962
Lesenswert?

Vielen Dank für die Antwort. Gibt es für den STM32 einen DMA optimierten
UDP-Stack ? In der ersten Variante möchte ich einen Hardwaretimer für 
die einkommenden Ethernetpackete spendieren. Die zweite Variante ich 
verwende das FreeRTOS.
(Firma: Raich Gerätebau & Entwicklung) #2739054
Lesenswert?

Timerinterrupt für sowas? Find ich fragwürdig. Der MAC muss ohnehin die 
Pakete zwischenspeichern ehe du sie durch den Stack prügelst. Wenn das 
geschehen ist,kann man ja ein Flag setzen um zu signalisieren,dass der 
Mac wieder gepollt werden soll. Die meisten Mac's besitzen auch 
Interruptleitungen,die bei Eintreffen eines neuen Paketes gesetzt werden 
=> für hohe Übertragungsraten empfehlenswert.

Grüsse
Gast #2739487
Lesenswert?

Was ist die Verwendung eines Timerinterrupts hiefür fragwürdig ?
Am besten wäre also wenn ich den Empfangsinterrupt für ankommende 
Ethernetpackete nutzen würde ? Ich muss in der STM32 Lib mal 
nachschauen. Aber ich denke der Empfangsinterrupt wird doch schon 
verwendet.
Gast #2739921
Lesenswert?

Ist die Verwendung eines Timerinterrupts hiefür fragwürdig ? Warum ?
Am besten wäre also, wenn ich den Empfangsinterrupt für ankommende
Ethernetpackete nutzen würde ? Ich muss in der STM32 Lib mal
nachschauen. Aber ich denke der Empfangsinterrupt wird doch schon
verwendet.
#2739936
Lesenswert?

Entwickler schrieb:
> Ist die Verwendung eines Timerinterrupts hiefür fragwürdig ? Warum ?

Weil es keinen Grund gibt, einen Timer zu verwenden. Du hast damit dann 
nur den Nachteil, daß du mit der Verabeitung immer bis zum nächsten 
Timer-Interrupt wartest, statt das einfach sofort zu tun. Du schaffst 
dir also eine unnötige zusätzliche Latenz.

> Am besten wäre also, wenn ich den Empfangsinterrupt für ankommende
> Ethernetpackete nutzen würde ?

Ja.
Gast #2739938
Lesenswert?

>1ms sollte zu schaffen sein.
locker. Mein STM32F107 schafft da 60Mbits, kannst gerne ausrechnen. LwIP 
kann ich dir ans Herz legen, toll gemacht, wenn auch anfangs wenig 
unübersichtlich.
Verwende das mit DMA und da reicht auch in deiner Main Loop nach Daten 
zu gucken, hier aus dem Beispiel:
1
    while (1) {
2
      if (ETH_GetRxPktSize()!=0) {
3
        LwIP_Pkt_Handle();
4
      } 
5
    }
Gast #2740201
Lesenswert?

>1ms sollte zu schaffen sein.
Als reine Durchlaufzeit durch den Stack sicherlich. Wenn aber noch 10 
Interrupts, die womöglich schlecht programmiert sind, und 2 DMA*s 
laufen, da kann dann viel passieren. Besser sich nicht auf solche 
Spekulationen einlassen, das fällt einem irgendwann auf den Kopf.

Grüsse
Gast #2740538
Lesenswert?

geb schrieb:
> Als reine Durchlaufzeit durch den Stack sicherlich. Wenn aber noch 10
> Interrupts, die womöglich schlecht programmiert sind, und 2 DMA*s
> laufen, da kann dann viel passieren. Besser sich nicht auf solche
> Spekulationen einlassen, das fällt einem irgendwann auf den Kopf.

Da haste allerdings recht.
Habe bei einem komplexeren Gesamtsystem deswegen gleich uClinux mit 
einem Echtzeit-Hack verwendet. War bisschen ein riskantes Spiel, aber 
lieber mit Kanonen auf Spatzen schiessen, anstatt sich in der 
Entwicklung verzetteln und wochenlang herumoptimieren...
Solange allerdings kein Netzwerk nötig ist, würde ich nicht mehr uClinux 
verwenden. Zudem gibt es einige Chips die dem "halt es simpel"-Prinzip 
der beliebten FTDI-Käfer folgen und direkt TCP <-> SPI bieten, etc. 
Allerdings müsste man da auch div. Echtzeitgarantiern evaluieren..

Grüsse,

- Strubi

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren