Hallo, ich suche eine Bibliothek, welche den bidirektionalen (seriellen) Datenaustausch zwischen µC und PC (Programm auch in C) eine Stufe 'über' der low level Kommunikation managen kann. Was meine ich mit low-level: In verschiedenen Projekten verwende ich verschiedene (virtuell) serielle Verbindungen zwischen µC und PC (derzeit USB mit dem virtual serial code von atmel, PC seite boost::asio). Mit low-level meine ich die serielle Datenübetragung, also am 'Ende der Linie' fallen 8-bit Datenblöcke 'raus'. Was meine ich mit 'eine Stufe drüber': Das ist die Schicht, welche die Datenblöcke zusammensetzt, erkennt, daß es sich um Daten oder ggf. einen Befehl handelt und entsprechende Aktionen ausfürt. Bisher habe ich einen unidirektionalen Ansatz (µC ist der Sender, PC der Empfänger). Ich kann Datensatzstrukturen definieren, also z.B. Format 1: float, uint32_t, uint8_t Format 2: uint32_t, uint8_t, uint8_t Senderseitig kann ich vom Programm aus die einzelnen Daten für verchiedene Formate in einen 'Zwischencontainer' schreiben, und, sobald der Satz vollständig ist rausschicken. Die übertragung sieht dann (xml-inspiriert) so aus: <f>1</f><d> .......</d><d> .......</d><d> .......</d> <f>2</f><d> .......</d><f>1</f><d> .......</d> ... Ich gebe bekannt, daß nun daten nach format 1 kommen (-> der sender weiß wie er die nächsten x bit interpretieren soll). <d> kapselt die daten (zur kontrolle u.a. checksum). Irgenwann sende ich einen Block nach Format 2 und dann wieder Format 1. Das ganze würde ich nun erweitern um Befehle, Befehle mit Argumenten und Bidirektionalität. Beispiel: Ich sende vom PC aus den Befehl 'schalte port ab: port1'. Bevor ich das mache wollte ich mal nachfragen ob's sowas nicht schon irgendwo (in C) gibt. Man muß das Rad ja nicht neu erfinden... Gruß Alex
Hi Ob es das in C gibt weiß ich nicht. Aber in Pascal nennt sich das Stream. MfG Spess
Alexander Poddey schrieb: > Bevor ich das mache wollte ich mal nachfragen ob's sowas nicht schon > irgendwo (in C) gibt. Man muß das Rad ja nicht neu erfinden... Ja, Datenübertragungsprotokolle gibt es hunderte. Man baut das auch im allgemeinen in "Schichten" auf, wie Du das ja schon angefangen hast. In der Ebene2, das heißt eine oberhalb der RS232 macht man normalerweise ein Protokoll, das 3 Dinge beherrscht: 1. Block Beginn und Block Ende Kennzeichnen 2. Ein "Prüfzeichen" um Übertragungsstörungen zu erkennen 3. Einen Mechanismus um den Datenfluss zu steuern (Der Empfänger kann den Sender bremsen, damit die Daten nicht zu schnell kommen) Beispiele für ein solches Protokoll: PPP oder LSV Eine Anmerkung noch: Wenn Du ein eigenes Protokoll erfinden willst, dann schau Dir doch die ASCII Tabelle mal genauer an. Im unteren Bereich gibt es Zeichen, die dafür vorgesehen sind. Z.B. "Start of Text" und "End of Text" usw. Das macht das erkennen des Blockanfangs und Blockendes viel einfacher. XML ist ein DATEIFORMAT und für serielle Datenübertragung nicht sehr geeignet. Erstens ist der overhead sehr groß und zweitens brauchst Du einen Parser, weil Du ja immer mehrere Zeichen gemeinsam kennen musst, um z.B. einen Anfang zu erkennen. Wenn Du ein Standard Protokoll implementierst, dann könnte Dein PC direkt mit dem Mikrocontroller sprechen, ohne dass Du am PC was programmieren musst. Du müsstest dann z.B. PPP, IP und UDP Ipmlementieren. Hier ist beschrieben wie PPP geht: http://www.rfc-editor.org/rfc/rfc1661.txt
Hallo Thomas, Du hast recht: ich will ja eigentlich kein eigenes protokoll erfinden - das haben schlauere vor mir schon gemacht. Am liebsten würde ich auf eine existierende implementierung (µC Zielplattform: AT91SAM7 und ATMEGA) zurückgreifen. Gibts da was? Danke Alex
Alexander Poddey schrieb: > am liebsten würde ich auf eine existierende implementierung (µC > Zielplattform: AT91SAM7 und ATMEGA) zurückgreifen. > > Gibts da was? Ich kenne leider nichts.
Hi schau dir mal MODBUS an. Das Protokoll ist leicht zu implementieren. geholfen wird dir auf www.modbus.org oder hier im Forum (siehe auch Linksammlung) mfg Stephan
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.