On 08/15/2017 09:39 PM, Arno Steffens wrote:
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.
Das verstehe ich jetzt nicht ganz - der dump-Befehl liest die Register des angeschlossenen Geräts aus, oder?
Ja genau. Es sind praktisch lese-Funktionen in einer loop, aber immer noch in der Bibliothek.
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 !
Im Quellcode von was? Deinem Programm auf dem ARM oder dem Gerät?
Quelltext, compiliert für ARM und dort augeführt. dump(); write(a,b); write(c,d); write(e,f);
Wenn Dein Programm nicht extra Zeugs macht, nutzt das nicht aus, dass Deine Maschine mehr als eine CPU hat. Was passiert denn beim ersten Mal, nachdem Du b, d und f in g, h und i geändert hast? Zeig mal Dein Programm.
ALlerdings zeigt mir dump() den Inhalt b,d,f an, und nicht den Inhalt vor der Initialisierung.
Auf dem Multicore ARM sollten Dich die Register besser nicht interessieren. Ist Deine Anwendung überhaupt Multithreaded?
Im Moment noch nicht.
Wenn Dein Programm hauptsächlich dafür da ist, um mit dem spi bzw. i2c-Chip zu kommunizieren, lohnt sich Parallelisierung nicht.
Liebe Grüße Uwe