jgmischke Geschrieben April 29, 2017 at 17:53 Geschrieben April 29, 2017 at 17:53 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? Zitieren
photron Geschrieben May 5, 2017 at 14:50 Geschrieben May 5, 2017 at 14:50 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. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.