Forum: Mikrocontroller und Digitale Elektronik Simulator Bug MplabX 3.65?


von Florian P. (ol1cr0n)


Lesenswert?

Hallo zusammen,

ich versuche gerade einen Teil meines Codes über den Simulator in MplabX 
zu debuggen.
1
while (1)
2
{
3
4
    diffPressureBuffer[diffPressureBufferIndex] = debug;
5
            
6
    if (diffPressureBufferIndex < 20
7
    {
8
         diffPressureBufferIndex++;
9
    }
10
    else diffPressureBufferIndex = 0;
11
 
12
}


Die Variable debug wird später durch einen Wert der über I2C übertragen 
wird ersetzt. Dient aktuell nur zum Testen. Ebenso das While(1), da ich 
das Problem auf die o.g. Zeilen einschränken konnte.

Das ganze ist Teil eines Ringbuffers zur Mittelwertbildung.

Sobald die else Bedingung greift, wird debug ebenfalls verändert. Sprich 
er schreibt exakt 20x den Wert ins Array diffPressureBuffer und sobald 
der Index auf 0 springt, wird debug ebenfalls auf 0 gesetzt. Habe ich 
was übersehen oder ist das ein Simulator Bug?

Gruß

von Peter (Gast)


Lesenswert?

Bitte poste einen vernünftigen Code-Ausschnitt der auch compiliert. Der 
den du gepostet hast, compiliert mit Sicherheit nicht weil mindestens 
eine Klammer fehlt. Ausserdem wäre interessant was für Datentypen die 
Variablen sind, ob sie nur deklariert oder auch initialisiert werden und 
und und ...

von Florian P. (ol1cr0n)


Lesenswert?

Hi,

hier nochmal eine kompilierbare Aufstellung:
1
#include <xc.h>
2
3
void main (void)
4
{
5
6
unsigned int diffPressureBuffer[20] = {0};
7
unsigned char diffPressureBufferIndex = 0x00;  
8
unsigned int debug = 0;
9
  
10
  
11
     while (1)
12
     {
13
          diffPressureBuffer[diffPressureBufferIndex] = debug;
14
            
15
          if (diffPressureBufferIndex < 20)
16
          {
17
               diffPressureBufferIndex++;
18
          }
19
          else diffPressureBufferIndex = 0;
20
     }
21
}


Wie gesagt, debug wird nur genutzt, um im Simulator Werte eingeben zu 
können. Sobald diffPressureBufferIndex auf 0 gesetzt wird, wird debug es 
ebenfalls. Debug wird im gesammten Programm nur an dieser Stelle 
genutzt.


Das While(1) dient ebenfalls nur dem debuggen über den Simulator.

von aba (Gast)


Lesenswert?

Wirres Zeug was du da von dir gibst.

Was willst du tun und warum?

von Florian P. (ol1cr0n)


Lesenswert?

Der oben gepostete Ausschnitt ist Teil eines größeren Programms. Ich 
bekomme Werte über I2C übermittelt und möchte gerne einen gleitenden 
Mittelwert über 20 Werte bilden. Dazu der oben gezeigte Ringbuffer.

Die Variable debug ist zu Testzwecken eingebaut und wird im späteren 
Programm durch eine I2C Leseoperation ersetzt. Habe akutell aber die 
Hardware noch nicht auf dem Tisch.

Im Simulator kann ich über die Variable debug Werte zum Testen des Codes 
eingeben (da wie gesagt Hardware noch nicht hier).

Das Array (diffPressureBuffer[]) lässt sich auch wunderbar mit Werten 
füllen. Sobald ich dann aber an Index 20 angekommen bin und meine 
Indexvariable (diffPressureBufferIndex) auf 0 gesetzt wird, ist der Wert 
in debug ebenfalls 0.

von Murkser (Gast)


Lesenswert?

Buffer overflow bei Zugriff auf diffPressureBuffer[20].

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.