Ich muss die Zeitdifferenz zwischen high -> low und low -> high Signalflanke an GPIO Pins messen. Ich habe ein einfaches Programm geschrieben, das dies tut. Nach einiger Zeit war ich sehr zufrieden mit dem Ergebnis (0,01 s Variationen). Aber von Zeit zu Zeit gab es ungefähr 0,5 s Fehler. Ich dachte, dass dies auf einen anderen Systemprozess zurückzuführen sein könnte, der zu diesem Zeitpunkt ausgeführt wurde. Meine Frage lautet also:
Kann ich einen Prozessorkern nur für mein Programm reservieren und weitere 3 Kerne für das System zulassen?
Ich verwende Raspbian Jessie Lite, also denke ich, dass 3 Kerne ausreichen werden, um es auszuführen.
operating-systems
process
NonStandardModel
quelle
quelle
Antworten:
Einen Kern zu widmen ist wahrscheinlich übertrieben.
Ich schlage vor, Sie versuchen meine Pigpio- Bibliothek. Standardmäßig ändert sich der GPIO-Pegel innerhalb von 10 µs.
Als schnellen Test schlage ich vor, dass Sie sich dieses Python-Beispiel ansehen , das alle GPIO-Pegelübergänge und die Zeit in Mikrosekunden seit dem letzten Übergang auf diesem GPIO ausgibt.
pigpio ist in Jessie Lite nicht standardmäßig installiert. Installieren Sie entweder die neueste Version von der verknüpften Site oder die ältere Version in den Repositorys.
sudo apt-get install pigpio python-pigpio python3-pigpio
quelle
Sie können Ihr Programm
schedutils
wie in diesem Cyberciti-Artikel beschrieben an einen Kern binden :Andere Prozesse können jedoch weiterhin auf demselben Kern geplant werden. Als Zweites müssen Sie sicherstellen, dass Ihr Befehl mit dem Befehl nice mit der höchsten Priorität ausgeführt wird (dies teilt dem Linux-Kernel mit, dass bei Bedarf andere Prozesse vorab ausgeführt werden sollten ). Starten Sie Ihr Programm auf folgende Weise:
Es gibt einige andere mögliche Gründe für Ihre Zeitprobleme. Dies ist nicht so einfach zu ändern:
Es gibt Möglichkeiten, Ihren Prozess in Echtzeit zu gestalten. Dies bedeutet, dass er mit bestimmten Zeitgarantien ausgeführt wird. Das Problem dabei ist, dass alles andere langsamer sein könnte und es sich um ein komplexes Thema handelt. Wenn Sie dieses Kaninchenbaugebiet erkunden möchten, sollten Sie sich mit Echtzeitprozessen in Linux vertraut machen .
quelle
Da Sie Timing-Anforderungen haben, ist Raspberry Pi nicht mehr die geeignete Plattform dafür. Es ist keine Echtzeitplattform und das Timing kann durch viele verschiedene Störquellen beeinträchtigt werden.
Stattdessen sollten Sie einen Mikrocontroller verwenden, um diese Zeit zu messen, vorzugsweise unter Verwendung von Interrupts, und die Informationen später an den Pi weitergeben.
quelle
Ich glaube nicht, dass Sie einen Single-Core-Prozessor benötigen. Sie müssen sicherstellen, dass Ihr Programm ständig ausgeführt wird. Um dies zu erreichen, können Sie die Priorität Ihres Programms sehr hoch einstellen, damit es von keinem anderen Prozess gestört wird.
Soweit ich weiß, sind die von uns verwendeten Betriebssysteme (General Purpose OS) nicht für den Einsatz in Echtzeitsystemen ausgelegt. Wenn Sie also Ihren Prozess in Echtzeit ausführen möchten, damit ihn kein anderer Prozess stört, müssen Sie loslegen für ein Echtzeit-Betriebssystem (RTOS). Vielleicht haben sie eine Kernauswahl. :)
quelle