Hallo, ich komme eigentlich aus der embedded Welt und habe kein PC programmier Erfahrung. Wir haben einen Speicher bereich (256 x 64KByte) wo bisher von einer HW Einheit automatisch die Daten abgeholt werden, sobald jemand in den Speicher schreibt. Nun soll das ganze als Host Test laufen und es soll so wenig Code wie möglich verändert werden. D.h. ich suche nach einem Weg, wenn ein x beliebiger Prozess in einen der 256 Slots schreibt, ein bestimmter Prozess automatisch über den beschriebenen Slot informiert wird und dort die Daten abholen und weiter verarbeiten kann. Der Code sollte unter Linux wie Windows laufen. Ich dachte vielleicht könnte man dies auch als Exception ausführen ????? Vielleicht weiss auch jemand wie ich den Segment Pointer und die Adresse auslesen könnte, wenn die Exception auftritt. Ich hoffe Ihr könnt mir helfen. Und kennt jemand von Euch gute Literatur zum einlesen in die PC Programmierung. /Peter
irgenewie ist es nicht verständlich was du machen willst. Wo ist denn der Speicher auf den Geschrieben werden soll.
Halt nur ein Stück allozierter Specher. Kurz gesagt soll ein Prozess in einen Speicherbereich schreiben (allozieirt oder geshared) und ein anderer automatisch raus lesen. Ich weiss nicht wie man das am schönsten auf dem PC macht. Kann ich dafür eine exception nutzen? Wenn ja wie. Am liebsten hätte ich automatisch den Pointer auf die geschriebenen Daten. Und kennt jemand von Euch gute Literatur zum einlesen in die PC Programmierung. /Peter
Was die Literatur angeht, kann Dir geholfen werden. http://www.amazon.de/Programmieren-Dummies-Gegen-allt%C3%A4glichen-Frust/dp/3826628691/ref=sr_1_1?ie=UTF8&qid=1313411620&sr=8-1
ich habe mal (probehalber) ein embedded system per kernel-parameter um ein oder zwei megabyte RAM "betrogen" und dann einfach einen fixen pointer auf den speicherbreich verwendet um zwischen prozessen daten auszutauschen - hässlich aber funktioniert ;-) von mir gibts mal ein paar stichwörter: - shared memory: http://www.cs.cf.ac.uk/Dave/C/node27.html#SECTION002700000000000000000 - semaphores: http://www.cs.cf.ac.uk/Dave/C/node26.html#SECTION002600000000000000000 - signals: http://www.cs.cf.ac.uk/Dave/C/node24.html#SECTION002400000000000000000 - queues: http://www.cs.cf.ac.uk/Dave/C/node25.html#SECTION002500000000000000000 - sockets: http://www.cs.cf.ac.uk/Dave/C/node28.html#SECTION002800000000000000000 je nach genauer architektur kann man damit eine schöne shared-memory anwendung aufbauen. C-kenntnisse setze ich mal voraus ("...komme aus der embedded welt...").
Hi Daniel,
danke für die Links. Eigentlich ist mir shared Memory nicht so lieb.
Exceptions wären mir lieber. So nach dem Motto Der Server schreibt in
den Speicher, der client bekommt eine exception und kann lesen, da er
die genaue Adresse des Speicherbereichs kennt. Lauffähig unter Linux und
Windows. Ich weiss allerdings sehr wenig über die PC Architektur und
Exception Handling auf dem PC. Das ganze soll im Endeffekt Datenraten
>100Mbit/S zulassen.
Hast Du da auch nen Tip?
/Peter
Pepe schrieb: > Hi Daniel, > danke für die Links. Eigentlich ist mir shared Memory nicht so lieb. > Exceptions wären mir lieber. So nach dem Motto Der Server schreibt in > den Speicher, der client bekommt eine exception und kann lesen, da er > die genaue Adresse des Speicherbereichs kennt. http://www.boost.org/doc/libs/1_47_0/doc/html/interprocess.html > Lauffähig unter Linux und > Windows. Ich weiss allerdings sehr wenig über die PC Architektur und > Exception Handling auf dem PC. Das ganze soll im Endeffekt Datenraten >>100Mbit/S zulassen. > Hast Du da auch nen Tip? IPC mit Context-Wechsel hat bei Linux/Windows einen Overhead von 2500/3000 Taktzyklen. Angaben aus 1) (da dort Round Trip Zeiten angegeben sind, hier durch zwei geteilt.) bzw. aus 2) Wenn da nicht jedes Byte einzeln signalisiert/übertragen wird, sollte das funktionieren. 1) http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.109.1184&rep=rep1&type=pdf 2) http://www.cs.virginia.edu/~kc5dm/projects/osperf.pdf > /Peter
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.