Forum: Mikrocontroller und Digitale Elektronik ringpuffer in assembler mit pic18f2550


von jan (Gast)


Lesenswert?

ich habe ein problem ich prgrammiere momentan den pic18f2550. nun wollte 
ich ihn mit einem ringpuffer beschreiben aber ich bekomme es nicht hin, 
kann mir jemand helfen?

dankeschön

jan

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

jan schrieb:
> aber ich bekomme es nicht hin,
WAS bekommst du nicht hin?
WAS willst du überhaupt machen?
WOFÜR brauchst du den Puffer?
Poste doch einfach mal, was du schon hast.

von Der E. (rogie)


Lesenswert?

Ringspeicher hat Grösse x

Schreiben (sz ist der Schreibzeiger)

ringspeicher[sz]=wert
sz = sz + 1
if sz > x sz = 0

Lesen (lz ist der Lesezeiger):

wert=ringspeicher[lz]
lz = lz + 1
if lz > x lz = 0

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Der Entwickler schrieb:
> Ringspeicher hat Grösse x
>
> Schreiben (sz ist der Schreibzeiger)
>
> ringspeicher[sz]=wert
> sz = sz + 1
> if sz > x sz = 0
>
> Lesen (lz ist der Lesezeiger):
>
> wert=ringspeicher[lz]
> lz = lz + 1
> if lz > x lz = 0

"ringspeicher" muß die Größe x+1 haben bzw die Bedingung um lz wieder
auf 0 zu setzen: if lz >= x.

Welche Sprache wird das ?

von jan (Gast)


Lesenswert?

ich brauche den puffer für eine messung bei der ich impulse zähle. die 
gezählten impulse sollen in den ringpuffer geschrieben werden, damit ich 
einen mittelwert aus meinen impulsen bekomme. reicht das?

jan

von Der E. (rogie)


Lesenswert?

Joachim Drechsel schrieb:
> Der Entwickler schrieb:
>> Ringspeicher hat Grösse x
>>
>> Schreiben (sz ist der Schreibzeiger)
>>
>> ringspeicher[sz]=wert
>> sz = sz + 1
>> if sz > x sz = 0
>>
>> Lesen (lz ist der Lesezeiger):
>>
>> wert=ringspeicher[lz]
>> lz = lz + 1
>> if lz > x lz = 0
>
> "ringspeicher" muß die Größe x+1 haben bzw die Bedingung um lz wieder
> auf 0 zu setzen: if lz >= x.

Stimmt, sorry.

>
> Welche Sprache wird das ?

Eine PseudoSprache, an C angelehnt ;-)

von jan (Gast)


Lesenswert?

Ich verstehe es nicht, in einigen Foren lese ich etwas von LPM und LDI 
oder auch von ZH und ZL die die Register R30/31 sein sollten aber dies 
klappt nicht. Kurz gesagt bräuchte ich nur mal ein Beispiel wie ich ein 
Ringpuffer beschreibe.

Dankeschön

von Clemens M. (panko)


Lesenswert?

Z-Pointer Register auf r30 und r31 hört sich nach avr an... du kannst 
natürlich nicht erwarten, daß fertiger Code für avr auf dem pic läuft.
Heißt: der pic wird auch Pointer Register haben und einen leicht anderen 
Assempler Syntax. Das musst du anpassen - die Funktionsweise des avr 
Beispiels hat aber zum Glück weiterhin Gültigkeit.

P.S. Oder haben die Pics inzwischen auch so viele Register und zufällig 
auch auf r30/31 den Z-Pointer? Ist über 10 Jahtre her daß ich mal einen 
pic ausprobiert habe.

von Der E. (rogie)


Lesenswert?


von Peter D. (peda)


Lesenswert?

jan schrieb:
> Ich verstehe es nicht

Dann versuche mal, den Ablauf in Worten aufzuschreiben.

jan schrieb:
> in einigen Foren lese ich etwas von LPM und LDI

Das ist der Nachteil von Assembler, er ist immer nur für eine bestimmte 
CPU, in diesem Fall AVR.
In Assembler ist es auch erstmal nötig zu wissen, wieviel Elemente und 
wie groß ist ein Element.


Peter

von Krapao (Gast)


Lesenswert?


von michael_ohl (Gast)


Lesenswert?

Hallo,

Document DS39508 von Microchip ist das Family Referenzmanual für die 
PIC18F Familie. Da sind unter memory organisation die möglichkeiten 
indirekt auf den Speicher zuzugreifen recht ausfühlich erklährt.

mfG
Michael

von jan (Gast)


Lesenswert?

danke konnte mein projekt mit dem ringpuffer beschreiben. muss jetzt nur 
noch die ausgabe über eine 7segment anzeige hin bekommen dann habe ich 
es geschafft.

mfg

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
Noch kein Account? Hier anmelden.