Hallo, mit Mehr-Kern Prozessoren wird das Programmieren doch wieder etwas anders, wie ich zuletzt gemerkt hab. Wie löst man elegant unaufwändig folgendes Problem?
Am einem ARM-board ist per spi/i2c ein Gerät angeschlossen. Eine kleine Bibliothek device.so übersetzt befehle wie "Lese register x", "Schreibe Register y mit z" und führt dann ioctl Befehle aus. Es gibt auch ein dump() Kommando, dass alle Register liest und ausgibt.
Aus dem Anwendungsprogramm wird dann das angeschlossene Gerät mit den device_read(x), device_write(y,z) programmiert.
Jetzt ist mir aufgefallen, dass das dump() welches zuerst aufgerufen wird, die eigentlich erst später im Quellcode geschriebenen Register liefert !
Erwartet hatte ich die reset/default Werte – weil ja dump (nach poweron) zuerst gecoded ist. Selbst ein sleep(5); dazwischen hat daran nichts geändert, erst sleep(10); was ja irrsinnige Zeiten sind!!!
So richtig hab ich das nicht verstanden, aber bei mir ist Alarm. Kann denn das wirklich sein? 10 sekunden? Klar durch die vielen printf ist das dump länger beschäftigt.
Aber selbst wenn der dump auf einem anderen Kern läuft als der Rest, kann das wirklich passieren ? Und wie kann ich das verhindern? Mitunter kommt es beim Schreiben der Register auf eine Reihenfolge an – das ist letztlich was mich umtreibt.
Selbst wenn ich als erstes die device.so Befehle threadsave machen und mit locks sichere – im Beispiel wird das erste Kommando in der Anwendung nach den darauffolgenden ausgeführt ?!?
Mit neugierigen Grüßen Arno