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. ???
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.
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?
Wem tut es weh, wenn du ständig sendest? Kostet nichts.
mhhh. Auch was drann Die serielle ist vom AVR gesehen eigentlich ein nadelöhr. Entlastet man den Prozessor, wenn man Daten reduziert, oder macht es alles nur schlimmer?
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 | }
|
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.