2016-07-29 18 views
-1

Ich arbeite derzeit mit dem BeagleBone Black mit Ubuntu und ich versuche, eine Richtung zu finden. Ich habe ein c-Programm erstellt, das auf SIGIO hört und eine read() ausführt, um die Daten in dieser Zeile abzurufen. Aus meiner Recherche im Internet und dem Durchsehen einiger Bücher scheint diese Methode nicht sehr effizient zu sein, da die Verwendung einer Schleife, die auf eine Signalunterbrechung wartet, wegen der großen Menge an Kontextwechsel schlecht ist (es sollte angemerkt werden, dass diese I/Die O-Linie ist besetzt, so dass der SIGIO mindestens 4 Mal pro Sekunde auslöst und dies ist ein asynchroner Vorgang. Es wurde vorgeschlagen, Hardware-Interrupts zu verwenden und diese eine Antwort auszulösen, um die Daten von der Leitung zu nehmen und sie in ein Register zu setzen, und von dem Benutzer vorzugsweise unter Verwendung von direktem Speicherzugriff zugänglich sein wird. Es bleibt also die Frage, wo ich weitere Informationen dazu finden kann. Ich finde viele Informationen zu diesem Thema, aber die meisten sprechen nur davon, wie das Betriebssystem Interrupts unterbricht oder Signale verwendet, die mit einer belebten Leitung verbunden sind ist ziemlich anstrengend.Linux, Verwenden von Hardware-Interrupts auf I/O, um Daten in den Benutzer zugänglichen Bereich über direkten Speicherzugriff

+1

Zum Schließen als "Nach externer Ressource fragen" geschlossen. Formal stimmt das, aber eigentlich ist deine Frage viel zu weit gefasst. Sie müssen viel mehr Grundlagenforschung betreiben, wie Linux funktioniert, über Hardware, Treiber, privilegierte Zugriffe, Nebenläufigkeit, usw., bevor Sie überhaupt eine Idee davon haben, wie breit es ist. Nichts für ungut, aber eine starke Bitte, zuerst selbst zu lernen und zu forschen. – Olaf

+0

Ich freue mich über Ihre Bereitschaft, die Menschen dazu zu bringen, zuerst selbst über das Thema zu lernen. Aber ich habe es ein wenig erforscht, aber alles, was ich finde, ist Theorie. Ich kann keine tatsächlichen Beispiele für Code finden, bei denen peole Hardware-Interrupts verwenden konnte, und dann DMA verwenden, um Daten an andere Stellen zu übertragen. –

+0

"Ich kann keine tatsächlichen Beispiele für Code finden ...". Entschuldigung, aber das kann einfach nicht sein! Linux ist Open Source und alle Quellen sind kostenlos verfügbar. Sie möchten wirklich sagen, dass es keinen einzigen Treiber in den Kernel-Quellen gibt, der Interrupts und DMA verwendet? – Olaf

Antwort

0

Wenn Sie sich so viele Gedanken über Timings und Latenz machen, sollten Sie wahrscheinlich ein Echtzeitsystem verwenden.

Glücklicherweise verfügt Beaglebone black über Echtzeit-Verarbeitungskerne auf seinem SOC, die als PRU (Programmable Real-Time Units) bezeichnet werden. Wenn Sie neu in das Konzept der PRUs sind, möchten Sie wahrscheinlich here starten und dann, sobald Sie die Notwendigkeit und den Zweck der PRUs verstanden haben, die gleiche Website hat einige Tutorials zu beginnen.

Mit den neuesten Software-Unterstützung wie remoteproc, rpmsg und , können PRUs recht einfach verwendet werden, sobald Sie seine Funktionsweise verstanden haben.