RS485/232??
-
Hallo zusammen ich habe mal ein paar grundlegende Fragen zur Seriellen-Schnittstellenprogrammierung.
1. Wenn ich sende übergebe ich dann immer genau ein Byte und dann das nächste usw oder schreibe ich mehrere in einen Buffer und schicke es dann mit einmal los?
2. Wenn es mehrere mit einmal sind, wie bekomme ich dann raus wo die Grenze für die größe ist?Gruß Carsten
-
es is so dass mann jeweils einen buffer auf die serielle schnittstelle sendet
wie meinst du das groesste? die buffer die du sendest ist immer gleichgross...
hoffe das hilft dir ein wenig weiter mfg hazelnoot
-
Hallo hazelnoot,
mir ging es darum herauszubekommen, wenn ich ein Protokoll wie folgt habe:SYNC Synchronization byte
HDB2 Header Definition Byte 2
HDB1 Header Definition Byte 1
DAB1 Destination Address Byte
SAB1 Source Address Byte
DB8 Data Byte 8
DB7 Data Byte 7
DB6 Data Byte 6
DB5 Data Byte 5
DB4 Data Byte 4
DB3 Data Byte 3
DB2 Data Byte 2
DB1 Data Byte 1
CRC CRC-8Schreibe ich das dann in ein Array und schiebe die Daten zusammen in einen Buffer oder muss ich jedes Byte einzeln in den Buffer schieben und dann sagen sende?
Gruß Carsten
-
soulfly79 schrieb:
1. Wenn ich sende übergebe ich dann immer genau ein Byte und dann das nächste usw oder schreibe ich mehrere in einen Buffer und schicke es dann mit einmal los?
das kommt drauf an. benutzt du z.b. windoofs, dann wird immer gepuffert, auch wenn du scheinbar einzelne bytes versenden kann.
soulfly79 schrieb:
2. Wenn es mehrere mit einmal sind, wie bekomme ich dann raus wo die Grenze für die größe ist?
bei rs232 z.b. kann man verschiedene arten der flusskontrolle verwenden. über steuerleitungen (z.b. cts/rts) oder per software (xon/xoff). mit flusskontrolle sagt der empfänger dem sender, dass er langsam machen soll, wenn ihm der speicherplatz o.ä. ausgeht. ersteres ist schneller, braucht aber 2 drähte mehr. zweites ist langsam, unzuverlässig und nicht für rohdaten geeignet. guckst du: http://www.lammertbies.nl/comm/info/RS-232_flow_control.html
ohne flusskontrolle muss der sender vorher wissen, was der empfänger verkraftet damit nix verlorengeht. also entweder es wird immer langsam gesendet oder ein buffer wird schnell versendet und dann eine pasue eingelegt....
-
also wenn ich das jetzt richtig verstehe, kann ich prinzipiell alles mit einmal senden und muss dies ncht byte für byte machen. ist aber besser ein byte nach dem anderen zu senden und immer zu warten?
im Beispiel:
sende SYNC
warte bis es raus ist
sende HDB2....
korrekt?
-
also ich kann jetzt mal nur von linux berichten da wo ich das gemacht habe da koenntest du theoretisch auch alles in einem schwung senden kommt halt auf den empfaenger an... linuxintern wird das ganze sowieso gepuffert
aber so wie du das siehst ist es vollkommen korrekt meiner ansicht nach!