Lötzinn :PDer Schreibpointer wie auch der Lesepointer MUSS vom Master kontrolliert werden damit der Slave weis welches Register gemeint ist.
Schau Dir erstmal an wie ein Ringbuffer funktioniert (google).
Der Master adressiert zwar welche Register er schreiben will, das hat mit dem Ringbuffer aber NIX zu tun. Die "Register" sind nur die Daten die in den Ringbuffer reinkommen. Ein Eintrag = Zustand ALLER Register. Daher macht das auch nur für einen kleinen Teil aller Register sinn - z.b. die ersten 8 der Master muss dann immer bei Register 0 anfangen damit das richtig initialisiert ist und keine alten Werte enthält - wird ja in den Beispielen sowieso schon so ähnlich gemacht.
Wird die Übertragung beendet, ist das ein neuer Eintrag im Buffer, der Slave zählt dann den Schreibpointer hoch.
Schreibt der Master mehr Bytes als 8 oder adressiert er direkt die Bytes >7 dann wird nix gebuffert und direkt in die entsprechenden Register geschrieben.
Der Buffer wird also selbstverständlich vom Slave gesteuert - der Schreibpointer wird halt in der ISR gesetzt wenn neue Daten ankommen hat aber nix damit zu tun welches Register der Master schreibt.
Adressiert der Master z.B. Byte 0 bis 7 wird der Schreibpointer vom Slave Code in der ISR um 1 erhöt (neuer Eintrag).
daten[schreibpointer_vom_ringbuffer][Registernummer_vom_Master]
daten[0][0] = Eintrag 0 im Buffer, Register Nummer 0
daten[0][1] = Eintrag 0 im Buffer, Register Nummer 1
daten[0][2] = Eintrag 0 im Buffer, Register Nummer 2
...
daten[1][0] = Eintrag 1 im Buffer, Register Nummer 0
...
Die "Register" sind die Daten im Buffer das könnte aber auch was ganz anderes sein.
Der LESEpointer muss sowieso vom Slave gesteuert werden - nur der weiss ja wo er gerade mit der Abarbeitung der ganzen angekommenen Daten ist.
Klar soweit?
> Du verwendest als Beispiel selbst in ...
grrrrrrich sage doch nicht was der fast 4 Jahre alte Code macht ich sage wie man es richtig machen MÜSSTE sollte hätte könnte wenn man einen Ringbuffer haben hätte wollen...
Ein Ringbuffer ist weder in Deinem noch in meinem Code drin![]()
MfG,
SlyD
EDIT:
Ich glaub Du hast Deinen Beitrag grad nochmal editiert während ich das hier geschrieben hab? Naja egal.
Lesezeichen