Ringpuffer

Allgemeine Themen rund um den Propeller Mikrocontroller und Elektronik
Antworten
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Ringpuffer

Beitrag von PIC18F2550 »

Hallo,

hat schon ein mal jemand so etwas Programmiert?
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: Ringpuffer

Beitrag von yeti »

PIC18F2550 hat geschrieben:hat schon ein mal jemand so etwas Programmiert?
Sowas steckt vermutlich in jedem seriellen Objekt mit Sende-/Empfangspuffer.

***wühl***

Verfolg mal in FullDuplexSerial, was mit den Variablen rx_head, rx_tail, rx_buffer und dessen tx-Kollegen angestellt wird.
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Ringpuffer

Beitrag von PIC18F2550 »

Ob das alles richtig ist?
Muss mal Testen..

Code: Alles auswählen

CON
   BUFFER_LENGTH = 2048                                   'Recommended as 64 or higher, but can be 2, 4, 8, 16, 32, 64, 128 256.
   BUFFER_MASK   = BUFFER_LENGTH - 1

VAR
  long  head
  long  tail
  byte  buffer[BUFFER_LENGTH]

PUB Start
  longfill(@head, 0, 2)

PUB CharOut(a)
  repeat until (tail <> ((head + 1) & BUFFER_MASK)) ' Warten auf Platz im Buffer
  buffer[head] := a
  head := (head + 1) & BUFFER_MASK

PUB CharIn : a
  repeat while (a := Check) < 0

PRI Check : a
  a~~
  if tail <> head
    a := buffer[tail]
    tail := (tail + 1) & BUFFER_MASK

PUB Count : a
  a := head - tail
  a -= BUFFER_LENGTH*(a < 0)
Was noch rein muss ist eine Sperre da hier mindestens zwei COG's drann sind.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Antworten