Forum: Mikrocontroller und Digitale Elektronik Ringpuffer Zählerproblem


von lisa (Gast)


Lesenswert?

Hallo Leute,
ich habe bei für meinen Mikrocontroller einen Ringpuffer programmiert 
und der macht mir etwas problem. Das Problem ist, dass ich daten zum 
mikrocontroller schicke und dieser dann eine Spannung ausgibt. Leider 
gibt es zuviele Ausreißer (0V). Ich vermute, dass es am Ringpuffer 
liegt, da sich die Fehlerquote mit änderung der Puffergröße verändert. 
Ich poste einfach mal meinen Quellecode und ihr könnt euch lustig machen 
;-).
1
char uartbuf[30];
1
interrupt (UART1RX_VECTOR) usart1_rx (void)
2
{
3
    uartbuf[uartpos] = U1RXBUF;
4
     uartpos++;
5
     if (uartpos==30)
6
     {
7
       uartpos=0;
8
     }
9
}

[c]
  char *pch;
  int j=0;
  int Trans;
  char *command;
  char *val1s;
  char Buffer[11];

  if (abs(uartpos-uartlesen)>10)
  {
    for(j=0;j!=11;j++)
    {
      Buffer[j]=uartbuf[uartlesen];
      uartlesen++;
      if (uartlesen==30)
      {
         uartlesen=0;
      }
    }
  pch = strtok (Buffer,"#_");
  for(j = 0; pch != NULL; j++)
        {
            if(j == 0) command = pch;
            if(j == 1) val1s = pch;
            pch = strtok (NULL,"#_");
        }
        Trans =atoi(val1s);
        Output (command,Trans);
  }
}

Hoffe der Quellecode ist so okay und es handelt sich vielleicht nur um 
einen Zähler fehler.
Wenn der Rinpuffer 30 zeichen groß ist, liegt die Fehlerquote bei ca.10% 
bei 130 zeichen bei ca 1,4 %.

danke schonmal

lisa
von Sascha W. (sascha-w)


Lesenswert?

Hallo,

schau mal
1
if (abs(uartpos-uartlesen)>10)
z.B.
buffer-Größe: 30
uartpos:      2   ;kurz nach dem Überlauf
uartlesen:    28  ;kurz vor dem Überlauf

abs(2 - 28) =26 ;obwohl doch nur 4Byte im Puffer sind!

Sascha
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.