Outb 2 C -Funktion

Outb 2 C -Funktion
„Die CPU hat mehrere Verbindungen zu externer Hardware, einschließlich LCDs und Festplatten. Die CPUs werden verwendet, um Daten in und aus den Peripheriegeräten zu übertragen. Diese Gesamttransaktionsdatenübertragungsrate kann von Bits bis zu Terabyte reichen. Wenn Daten zwischen einer CPU und einem peripheren Daten gesendet werden, stellt die CPU zahlreiche Ports bereit, die häufig als Eingang und Ausgabe oder IO bezeichnet werden, oder IO. Diese Ports werden von der CPU verwendet, um verschiedene intelligente Geräte zu verwalten. Während Sie in einer Programmiersprache arbeiten, haben Sie möglicherweise viele Funktionen und Variablen mit einigen Portnummern oder Informationen zu Ports verwendet. Einfach so hatte die Linux Possix C -Bibliothek auch solche Funktionen. Einige der C-Funktionen der C-Funktionen gehören zur Eingangs- und Ausgangsfamilie eines POSIX auf niedriger Ebene, um Eingangs- und Ausgangsvorgänge auf niedriger Ebene durchzuführen. Die Outb () 2 C -Funktion von POSIX ist eine davon.

OUTB scheint eine Funktionskapselung für nur einen Montagebefehl derselben Bezeichnung zu sein, die zur Kommunikation mit den peripheren Port-Made-Peripheriegeräten verwendet wird, wie z. In diesem Artikel werden wir die Verwendung der Outb () C -Funktion bei der Verwendung des Ubuntu 20 diskutieren.04 Linux -Betriebssystem. Um die Funktionsweise der Outb () -Funktion zu verstehen, müssen Sie sich zuerst die I/O nach dem Karten ansehen.”

Was ist portkartierende I/O?

Speicher- und portkartierende E/A sind die beiden üblichen Möglichkeiten, wie Computerchips zu externen Geräten verknüpfen. Trotzdem scheinen alle Ansätze gleichwertig zu sein, wenn es um die Peripherie geht. Der portgestellte E/A ist über einen bestimmten Satz von CPU -Befehlen und einen bestimmten, speziellen Adressraum zugänglich. Die In- und Out -Befehle sind auf Intel -Computerprozessoren zu sehen.

Um E/A -Geräte einen anderen Adressraum als normaler Speicherplatz zu geben, wurde entweder ein zusätzlicher „E/A“ -Pin zum Zugangspunkt der CPU hinzugefügt, oder ein ganzer Bus wurde für I/O beiseite gelegt. Es handelt sich um eine CPU-zu-Peripherie-Kommunikationstechnik, die verwendet wird, wenn eindeutige Befehle erforderlich sind, da der Prozessor mit dem RAM und den Peripheriegeräten kommunizieren muss. Dies wird häufig als isoliertes E/A bezeichnet, da die Adresse für E/A von der für die Primärspeicherung getrennt ist. Der alternative und beliebteste Weg sind derzeit maßstabsgemedelte E/A, in denen keine zusätzlichen Befehle erforderlich sind, da alles denselben Adressraum aufweist. Zugeordnet auf die Speicher -E/A ist auf fast die gleiche Weise wie Programmspeicher und/oder Benutzerspeicher zugegriffen, da er in denselben Adressraum gezogen wird.

Low-Level-Anschlüsse- und Ausgangsvorgänge werden von dieser Gruppe von POSIX-Methoden behandelt. Die B-Suffix-Methoden sind Byte-Breiten-Prozeduren, die W-Suffix-Methoden sind Wortbreitenverfahren und die _P-Suffix-Methoden verzögern, bis die E/A beendet ist. Die Out* -Operationen führen die Portausgabe aus, während die In* -Prozesse die Porteingabe durchführen. Obwohl sie immer noch im Benutzermodus verwendet werden können, sind sie im Allgemeinen für den inneren Kerngebrauch ausgelegt.

#enthalten
void outb (vorzeichenloser Zeichenwert, nicht signierter kurzer Port);

Wir müssen O, O2 oder einen gleichwertigen Compiler verwenden. Da die Methoden als Inline -Makros angegeben sind, können problematische Referenzen der Verbindungszeit auftreten, wenn die Optimierung nicht aktiviert ist. Um den Kernel zu unterweisen, das Benutzer-Mode-Programm die betroffenen E/A-Ports zu verwenden, können Sie die Ioperm (2) oder optional die Befehle ioPl (2) verwenden. Wenn Sie dies nicht ausführen, erhält das Programm einen Segmentierungsfehler. Hardware-spezifische Funktionen wie Outb () und Gefährten im Gegensatz zu der Funktionsweise der meisten DOS-Systeme, der Wertparameter wird zuerst bereitgestellt und der Portparameter folgt.

Beispiel

Schauen wir uns die Verwendung der Outb () -Funktion im C -Programm an. Dieses Programm wird eine kleine Demonstration sein, wie wir es in jedem C -Programmcode verwenden können, ohne die Ausgabe zu betrachten.e., Meistens wird es nicht so ausgegeben, wie wir es wollen. Wir müssen also zuerst eine C -Datei in unserem Linux -Betriebssystem erstellen. Öffnen Sie das Schalenanschluss über die Verwendung von "Strg+Alt+T".

Verwenden Sie danach die Berührungsanweisung des Linux zusammen mit dem Namen einer Datei “OutB.c ”mit dem zu erstellen“.C ”Erweiterung am Ende. Diese Datei finden Sie im aktuellen Arbeitsverzeichnis Ihres Linux -Systems, i.e., "heim". Öffnen Sie den Datei -Explorer und tippen Sie doppelt auf die Datei, um sie zu öffnen.

Die leere Datei wird auf Ihrem Bildschirm geöffnet. Schreiben Sie den Codes für den Codes für den 2er-Verschluss der OUTB () -Funktion darin und drücken Sie die Schaltfläche Speichern, um sie zu speichern. Wir haben diesen C -Code mit der Verwendung einiger Hauptheader von C begonnen. Erstens haben wir die „Konfiguration“ hinzugefügt.H ”-Header, um den C -Code zu konfigurieren. Das „sys/io.H ”ist der Hauptkopf, der für die Verwendung und Ausführung der Outb () -Funktion im C -Programm erforderlich ist. Also haben wir es auch hinzugefügt. Danach das sys/ioctl.H und Linux/Parport.H Header wurden für die Verwendung von Portinformationen verwendet. Der Standard -Stdio.H und Stdlib.H Header werden verwendet, um Standardeingang und Ausgabe innerhalb des Programms zu verwenden.

Die Initialisierung der ADDR -Variablen hat die Haupt- () -Funktion gestartet. Mit der Funktion Ioperm () werden die Berechtigungsbits der Portzugriffsanschlüsse festgelegt und das Ergebnis an das variable Ergebnis übergeben. Die OutB () -Funktion ist hier, um die Portausgabe durchzuführen. Sie können dieses Programm mit dem GCC -Compiler auf Ihrem System ausführen.

Abschluss

In Bezug. Die E/A-Flexibilität, die von Speicher-abgebildeten Plattformen angeboten wird, verringert andererseits die vom Prozessor benötigte interne Logik und ermöglicht die Implementierung von schneller, kostengünstigeren und leistungsstärkeren CPUs. Parallel zu RISC -Systemen besteht die Begründung darin, die Komplexität zu verringern, um ein fokussierteres und zuverlässigeres System zu erhalten, das beispielsweise für eingebettete Geräte nützlich ist. Dieser Leitfaden hat eines der grundlegenden Beispiele, um die Idee der OUB -Funktion in der C -Sprache zu demonstrieren.