PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablenschar als Schieberegister möglich??



drivepro82
05.10.2008, 12:52
Hallo!
Ich brauche mal wieder etwas Hilfe, und zwar möchte ich 24 Speicherstellen (Variablen!?) deklarieren, die wie eine Art Schieberegister funktionieren: alle 10ms kommt ein neuer wert, der den vorigen wert eine stelle weiter schieben soll: der erste wert geht also in die erste speicherstelle, der zweite, nach 10ms, schiebt den ersten in die zweite speicherstelle und geht selbst in die erste, der dritte wert, nach weiteren 10ms, schiebt wieder alle eine stelle weiter hoch. nach 24 stellen fällt der erste wert am ende heraus und nach 10ms der zweite,.... dann möchte ich alle 10ms, nachdem jeweils ein neuer wert eingeschoben wurde, die aktuelle summe aller werte in den 24 speicherstellen für eine rechnung benutzen. die werte in den einzelnen speicherstellen sind immer ganze zahlen (eine anzahl von gemmessenen impulsen innerhalb der 10ms)
Hat da jemand ne idee, wie ich das programmieren kann?
Grüße christian

McJenso
05.10.2008, 13:12
Hallo,

nimm ein Array mit mit 24 Feldern und und schiebe einen Zeiger von Feld zu Feld. Am Ende angekommen fängst du wieder von Vorne an. Dann können die Werte bleiben wo sie sind.

Gruß

Jens

Edit: oh, sry hab mich ins bascom Forum 'Verirrt', aber vielleicht ist das ja auch in Bascom so möglich

linux_80
05.10.2008, 13:19
Hallo,

suche mal nach "Ringpuffer".
Man legt sich ein Array an, und einen Zeiger für die aktuelle Position.
Wenn ein neuer Wert dazu kommt, wird der Zeiger eine Position weitergezählt, am Ende fängt man wieder von Vorne an.

Für das auslesen legt man sich einen 2. Zeiger an, der auf den ältesten Wert zeigt. Dieser muss dann auch mitwandern, falls der Puffer "voll" ist, also die ersten Werte wieder überschrieben werden.

python_rocks
05.10.2008, 13:53
alle 10ms kommt ein neuer wert, der den vorigen wert eine stelle weiter schieben soll
Hallo Christian!

Eine Möglichkeit: http://paste.pocoo.org/show/87101/

mfg
Gerold
:-)

for_ro
05.10.2008, 15:06
Für das auslesen legt man sich einen 2. Zeiger an, der auf den ältesten Wert zeigt.

@Linux_80: Wofür brauchst du denn den zweiten Zeiger, der erste Zeiger steht doch genau auf der Position, die als nächstes überschrieben werden soll?

@drivepro82: Für die Summe würde ich es nicht so machen, wie in dem Link von Gerold. Dort werden zum Ausdruck jedesmal alle 24 Werte addiert. Das kann man auch einfacher haben.
Halte dir die Summe immer in einer Variable vor. Bevor du den neuen Wert ins Array ablegst, ziehst du erst den alten Wert an dieser Stelle von der Summe ab. Dann addierst du den neuen hinzu und überschreibst den alten Wert ins Array. Also etwa so:

Dim Pointer as Byte
Dim My_sum as Word 'falls nötig auch Long
Dim My_array(24) as byte 'falls nötig Word
Incr Pointer
My_sum = My_sum - My_array(Pointer)
My_sum = My_sum + Neuer_wert
My_array(Pointer) = Neuer_wert

Gruß

Rolf