Ich mag es, ein Signal zu probieren, das von den Pins meines Raspberry Pi erzeugt wird. Ich habe die Erfahrung gemacht, dass hohe Sample-Raten schwer zu realisieren sind.Was ist der beste Weg, um regelmäßig GPIO-Pins in Linux zu testen?
Zuerst habe ich einen schnellen Ansatz mit Python (super langsam) gemacht. Dann wechselte ich zu ANSI C + die bcm2835.h lib. Ich habe deutliche Leistungssteigerungen erzielt.
Jetzt stelle ich mir selbst die Frage: Wie kann ich die beste Sampling-Methode unter Linux durchführen?
Meine Versuche wurden im Benutzerraum unternommen. Aber was ist, Wechsel zum Kernel-Raum? Ich kann ein einfaches Zeichen-Gerätekernmodul schreiben. In diesem Modul werden die Pins periodisch überprüft. Wenn sich der Status ändert, werden einige Informationen in einen Puffer gelegt. Dieser E/A-Puffer wird von einer synchronen Datei gelesen, die für eine Anwendung im Benutzerbereich gelesen wird. Die beste Lösung für mich wäre, wenn die Pin-Prüfung mit einer festen Frequenz durchgeführt werden kann (die Sample-Periode sollte für die Signalverarbeitung konstant sein).
Die dafür eingerichtet sein könnte:
@kernel: character Modul + Kernel-Thread + GPIO-Schnittstelle Gerätebaum + DSP bei konstanten Abtastzeit
@user space: i/o app Lesen von synchronen Zeichenmodul
Ideen/Tipps?
Dies im Kernel zu tun wäre ein Vorteil, wenn Sie eine Art Interrupt verwenden könnten, wenn sich der GPIO ändert. Wenn Sie einen Kernel-Modus-Thread schreiben, dann sind Sie wahrscheinlich besser mit einem Echtzeit-Thread im User-Space. – rodrigo
Wenn Sie dies im Benutzerbereich tun möchten, müssen Sie sicherstellen, dass Sie den aktuellen Kernel haben und 'libgpiod' installiert haben. – 0andriy
Die libgpiod verwendet die Kernelschnittstelle "gpio.h". Das Zeichenmodul liest die Pins wie eine Datei. ppoll + timeout wird verwendet, um zu überprüfen, ob eine Änderung stattgefunden hat. Die lib bcm2845 verwendet eine Speicherzuordnung, um auf die GPIO-Register zuzugreifen. Ich denke, das ist der schnellste Weg, weil das MMU nur die logische Adresse in die physische übersetzt. Die Verwendung der mmap vermeidet die Geräteebene beim Überprüfen der Pins. Was ist mit der Kombination mmap + thread, die zyklisch einen Teil des Speichers liest? –