Jump to content

Recommended Posts

Geschrieben

Habe hier ein kleines Problem mit einem C Programm. Läuft unter x86 wunderbar, aber es macht auf dem RED ein Problem.

 

In einem seperaten Thread habe ich ein Ausgabeprogramm, welches über eine Struktur Daten für ein paar 20x4 LCD ausgeben soll. Die Daten sind global in einer Includedatei definiert.

 

Die Struktur ist simpel und sieht so aus:

 

struct OutLCD {

char z[4][21];

uint8_t virtuell; // Für NCURSES Emulation

uint8_t aktiv; // Ist der Puffer, die LCD aktiv

uint8_t OLCDNr; // auf welche Anzeigennr.

uint8_t dauer; // 0 = permanenten Anzeige  > 0 wechsel nach  X sekunden

Device lcd;

WINDOW *LCD;

} OLCD[20]; 

 

Um eine Anzeige auch auf dem Bildschirm darstellen zu können, habe ich auch eine virtuelle LCD Anzeige mit ncurses ( dafür der *LCD Eintrag, für die echten LCDs die Device lcd.

 

Für die Ausgabe gibt es jetzt den Merker virtuell. Und da beginnt mein Problem. Auf dem x86 bleibt der Wert (=1) auch im Thread erhalten, auf dem RED ist der Wert 0, obwohl er eindeutig zugewiesen wurde, allerdings vor dem Thread.

 

Werden globale Variablen da anders behandelt? Oder wo liegt da mein Fehler?

 

 

 

 

 

 

Geschrieben

Ich würde da auf eine Race Condition tippen. Der RED Brick hat nur einen Kern, daher laufen dein Haupt-Thread im Programm und deine Extra-Thread niemals parallel. Dein PC hat sicherlich mehr als einen Kern, daher werde die beiden Threads sich zeitlich anders verhalten.

 

Sprich, dass es auf einem PC funktioniert ist reines Glück, bedingt dadurch wie dein PC die Threads ausführt. Auf dem RED Brick werden die Threads zeitlich anders ausgeführt und dadurch kommt dann ein Bug in deinem Programm zutage den du auf deinem PC nicht gesehen hast.

 

Vielleicht zeigt du dein Programm mal vor, dann können wir vielleicht sehen wo das Problem steckt.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...