Forum: PC-Programmierung Windows CE Ehternet


von Russe (Gast)


Lesenswert?

Hallo Spezialisten,
könnte mir einer eine Frage beantworten, ob man unter Windows CE 6.0 
eine Interrupt-Routine implementieren kann, so dass bei Eintreffen eines 
Ethernet Paketes diese Interrupt-Routine aufgerufen wird. Im normalen XP 
geht es leider nicht. Ich will nämlich ein eigenes 
Kommunikationsprotokoll auf Ethernet Basis entwickeln.
Vielen Dank

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das kann man natürlich auch unter "normalem Windows XP", sieh Dir mal 
an, wie wireshark (http://www.wireshark.org) funktioniert.

von Russe (Gast)


Lesenswert?

Danke aber dies ist nicht das was ich mir vorgestellt habe. Es muss in 
"Real Time" funktionieren. Ich will keinesfalls die Kommunikation  über 
TCP/IP aufbauen. Wie gesagt sobald ein Ethernet Paket ankommt, wird 
Interrupt ausgelöst, der seinerseits via DMA die Daten ausliest.

von Russe (Gast)


Lesenswert?

Das Betriebsystem ist mir nicht wichtig. Es muss nämlich Real Time OS 
sein. Ich könnte mir auch mir der Keil OS anfreunden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dann kannst Du den Kram nach wie vor unter XP machen - Du wirst Dich nur 
mit der Devicetreiberprogrammierung anfreunden müssen.

Was hast Du großartiges vor?

von Russe (Gast)


Lesenswert?

Ich muss ziemlich schnell die Soll-Werte an Motor-Controller senden.
Würde es gehen, wenn ich eine Isa Bus Karte mit entsprechendem 
Ethernet-Kontroller nehme und per Registeradressierung die Kommunikation 
gestallte?

von Peter (Gast)


Lesenswert?

Russe schrieb:
> Ich muss ziemlich schnell..
wie schnell denn? geht es im µs, ms oder sekunden? Und mal schnell ebend 
in die Treiber-Programmierung einsteigen und ein neuen Protokoll 
entwerfen was dan auch sofort stabiel läuft ist schon sportlich. Ich 
glaube was das du mit den normales Windows CE und UDP Programmierung 
besser dran bist.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Russe schrieb:
> Ich muss ziemlich schnell die Soll-Werte an Motor-Controller senden.

Dafür gibt es Industrial Ethernet mit dafür optimierten 
Ethernet-Karten (die haben dann einen eigenen Rechner onboard, der sich 
um die timingkritischen Dinge kümmert)

> Würde es gehen, wenn ich eine Isa Bus Karte mit entsprechendem
> Ethernet-Kontroller nehme und per Registeradressierung die Kommunikation
> gestallte?

Einerseits wirst Du eine ISA-Karte kaum noch irgendwo hineinstecken 
können, andererseits kannst Du aus Usermode-Programmen nicht auf 
irgendwelche Hardware-I/O-Register zugreifen (außer mit Tricks à la 
giveio.sys) und obendrein kann ein Usermode-Programm nicht auf 
Interrupts reagieren oder gar irgendwelche DMA-gesteuerten Dinge machen.

Hinzu kommt noch, daß gerade der ISA-Bus so extrem langsam ist, daß der 
Ansatz Deine Geschwindigkeits-Idee konterkarieren würde.

Allerdings: Definiere "schnell". Vielleicht ist Dein Problem ja auch 
einfach nur ein Designfehler oder ein Missverständnis.

von Russe (Gast)


Lesenswert?

Ich soll auf 8 Antriebe in 300 µs mit Daten versorgen. Das System wird 
so aufgebaut, dass es keine Kollisionen entstehen  können. Somit 
entfällt der Overhead wie bei SERCOS oder ähnlichen Systemen.  Deswegen 
habe ich mir gedacht ich nehme Ethernet als Kommunikationsmittel.  100 
Mbit, Paketlänge 46 Byte.

von Russe (Gast)


Lesenswert?

Es existiert doch Möglichkeit unter Keil OS Ethernet Interrupt zu 
implementieren.
Kann mir jemand sagen,  ob unter WinCE oder einem anderen Betriebssystem 
ähnlich Vorgehensweise erlaubt ist.


http://www.keil.com/support/man/docs/rlarm/rlarm_interrupt_ethernet.htm

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Russe schrieb:
> Kann mir jemand sagen,  ob unter WinCE oder einem anderen Betriebssystem
> ähnlich Vorgehensweise erlaubt ist.

Spätestens wenn Du einen eigenen Devicetreiber für die Netzwerkkarte 
schreibst, ja. Bei Windows gibt es das Konzept der "layered" Treiber, 
d.h. Du kannst einen Treiber entwickeln, der wiederum mit dem 
eigentlichen Netzwerkkartentreiber kommuniziert.

Für Reaktionsgeschwindigkeiten im Bereich unter 1 msec ist bei Windows 
sowieso nur noch auf Devicetreiberebene etwas zu erreichen.

von SportlichSportlich (Gast)


Lesenswert?

Hmm, Du überlegst ein nicht echtzeitfähiges Betriebssystem zu nehmen, um 
auf einem nicht echtzeitfähigen Bussystem zuverlässig im 300µs Raster 8 
Teilnehmer mit Daten zu versorgen?

Das nenn ich sportlich :-)

von Russe (Gast)


Lesenswert?

Laut Beschreibung soll CE echtzeitfähig sein. Ich erwarte kein 
Kollisionen, da ich nur einen Master habe, der die Daten sequenziell 
(mit Quittierung) an die Antriebe sendet.

von SportlichSportlich (Gast)


Lesenswert?

Nunja, "Echtzeitfähig" ist ein weiter Begriff. Er sagt eigentlich nur 
aus daß ein System innerhalb einer Zeitspanne X reagiert.

Wie Rufus schon schrieb, liegt diese Zeitspanne X bei WinCE 
üblicherweise bei 1ms. Die allerdings auch nur wenn du alles richtig 
einstellst.
Um auf 300µs zu kommen musst du schon viel weiter unten schrauben.

An deiner Stelle würde ich für den Echtzeittask ein "echtes" embedded OS 
nehmen, z.B. das von dir erwähnte von Keil. Wenn Du wegen 
Bedienoberfläche oder was auch immer WinCE benötigst, dann mach zwei 
Systeme draus:
Eines mit dem embedded OS für die Echtzeitaufgaben, und eines mit WinCE, 
daß dein RT-System mit Daten versorgt.


Das mit dem Ethernet passt schon, wenn du sicherstellen kannst daß 
keiner Zwischenfunkt und du zwischen den Paketen genug Reserven 
einplanst für den Fall daß ein Paket nochmal gesendet werden muss. Damit 
musst du im Industriellen Umfeld aufgrund der möglichen Störungen 
rechnen.

von Russe (Gast)


Lesenswert?

>> SportlichSportlich
Danke.

Ungefähr so habe ich mir vorgestellt.
Wenn die Zeitvorgeben hier unten stimmen, dann kann ich in der Zeit 
locker schaffen.
http://www.keil.com/support/man/docs/rlarm/rlarm_ar_technical_data.htm
Gibt es Alternativen zum Keil OS? Vor allem bin ich nicht darüber nicht 
besonders glücklich, dass OS nur auf ARM basierten MCU  läuft.  Aber 
andere Hersteller geben leider keine definitiven zeitlichen Abgaben.

von Atmi (Gast)


Lesenswert?


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.