Daten via RS232 nur senden wenn Daten verändert

OP #2621127
Hi,

Habe derzeit erfolgreich folgenden Bascom Code (Auszug) am laufen:

'-----------------------------------
' Ringbuffer für RX und TX Daten.
'-----------------------------------
Config Com4 = 256000 , Synchrone = 0 , Parity = None , Stopbits = 1 , 
Databits = 8 , Clockpol = 0
Config Serialin3 = Buffered , Size = 254 , Bytematch = 13
Config Serialout3 = Buffered , Size = 254


Do
  If Flag_zt = 1 Then
    Print #4 , "zt*" ; 1h ; Tz ; 1m ; Tz ; 1s ; Tz ;
  End If

 if Flag_....
    print....
 end if
Loop

Ok, wie man sieht werden ständig Daten gesendet, obwoh sich deren inhalt 
gar nicht ändert.

Ich bin am überlegen das umzustellen. Jetzt könnte ich alles in einen 
String packen, und beim nächsten Durchlauf den neuen String mit dem 
alten vergleichen. Braucht aber ne Menge Ram und Zeit

Bin am überlegen ob ich nicht alles immer in den selben String packe, 
und davon eine Prüfsumme mache und mir nur die Prüfsumme merke, nur wenn 
diese sich unterscheidet werden Daten gesendet, dann auch gleich mit 
Prüfsumme.

Was ich nicht sende muss der PC nicht auswerten.

???
Gast #2621149
Wer ändert den die Daten? Liegt das nicht auch in deiner Kontrolle?

Dann könntest du einfach ein Flag setzen in dem moment wo dein Daten 
tatsächlich geändert werden. Das Flag brauchst du nur noch abzuprüfen in 
deiner Senderoutine.
OP #2621156
Es werden viele PORT Eingänge gelesen, die ändern sich, darauf habe ich 
keinen Einfluss. Auch von I2C Slaves. Aber da bekomme ich es mit wenn 
neue Daten kommen, da habe ich noch eine extra leitung für Interrupt 
verlegt.

Ja, was ist besser, immer wieder das selbe senden, auch wenn Daten nicht 
verändert, oder wie oben, ab in einen String und Prüfsumme erzeugen, 
merken, vergleichen?
#2621165
Mr Kaktus schrieb:
> Es werden viele PORT Eingänge gelesen, die ändern sich, darauf habe ich
> keinen Einfluss
Dann merk' dir zu Beginn der Schleife den Zustand des Ports und 
vergleiche ihn mit dem momentanen Zustand.
Mal ein unvollständiges und ungetestetes Beispiel:
1
while(1) {
2
 if(old!=PORT) {
3
  old = PORT;
4
  //hat sich geändert; Flag setzen o.ä.
5
 }
6
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.