Heim php教程 PHP开发 Implementierung eines Tastaturtreibers für ein eingebettetes Linux-System (1) (2)

Implementierung eines Tastaturtreibers für ein eingebettetes Linux-System (1) (2)

Dec 23, 2016 pm 02:03 PM

Initialisierungsteil. Dieser Teil umfasst die Initialisierung auf der Hardware- und Softwareschicht. In diesem Beispiel müssen Sie zunächst die Matrixschaltung und die vom SN74hc164-Chip verwendeten GPIO-Ports konfigurieren, damit die CPU sie steuern und darauf zugreifen kann. Um einen GPIO-Port als Eingabe-, Ausgabe- oder Interrupt-Quelle zu konfigurieren, müssen Sie den richtigen Wert im entsprechenden GPIO-Steuerregister einstellen. Den spezifischen Wert finden Sie im Handbuch der S3C2410-Entwicklungsplatine. Um beispielsweise GPB1 als Eingangsanschluss von SN74hc164 festzulegen, müssen zwei Bits 2 und 3 im GPBCON-Steuerwort auf binär 01 gesetzt werden. Um GPG6 als Niederspannungs-Sprung-Interrupt-Quelle festzulegen, müssen zwei Bits 12 und 12 eingestellt werden 13 in GPGCON muss auf binär 10 gesetzt werden. Nach Abschluss des Hardware-Initialisierungsvorgangs erfolgt die Initialisierung auf der Softwareebene. Registrieren Sie zunächst die Tastatur-Interrupt-Verarbeitungsfunktion im System und richten Sie dann eine Timer-Struktur ein, damit der Interrupt beim Auftreten in der Timer-Warteschlange des Kernels hängen bleibt. Der Timer löst den Scanvorgang der Tastatur aus. Abschließend werden die 16 Spalten der Matrixschaltung über SN74hc164 auf Null gesetzt.

Verarbeitungsteil unterbrechen. Wie bereits erwähnt, sollte dieser Teil der Software die spezielle Tastatur scannen, feststellen, welche Taste gedrückt wird, einen stabilen Scancode erhalten und dann die Kernel-Exportfunktion handle_scancode aufrufen. In dieser Anwendung ähnelt das Layout der Spezialtastatur dem Layout der PC-Standardtastatur, sodass wir den Systemscancode der entsprechenden Taste auf der PC-Tastatur direkt als Scancode für jede Taste auf unserer Spezialtastatur verwenden Gleichzeitig verwenden wir den PC-Tastaturtreiber. Die Konvertierungsfunktion pckbd_translate vom Scancode in den Tastencode wird als unsere kbd_translate-Funktion verwendet.

Der Algorithmus zur Bestimmung, welche Taste gedrückt wird, ist wie folgt. Wenn der Interrupt kommt, können wir anhand der Interrupt-Nummer bereits feststellen, zu welcher Zeile die gedrückte Taste gehört, und wir müssen auch bestimmen, zu welcher Spalte die gedrückte Taste gehört. Zu diesem Zweck senden wir zunächst ein CLR-Signal an die beiden in Reihe geschalteten SN74hc164-Chips, löschen es und senden dann 16 1s, sodass die Spalten der Spezialtastatur zu diesem Zeitpunkt alle hoch sind Die Anschlüsse der Tastatur sind alle potenzialstark. Unter 16 Taktimpulsen werden 1 0 und 15 1s an den SN74hc164-Chip gesendet, sodass 0 nur einmal in jeder Spalte erscheint und gleichzeitig der Tastaturzeilen-Port gescannt wird. Wenn die Spalte der gedrückten Taste auf 0 gesetzt ist, zeigt die Zeile, in der sie sich befindet, einen niedrigen Pegel an. Mit dieser „Walk 0-Methode“ können wir feststellen, welche Taste auf der Tastatur gedrückt wurde. Dieser einfache Scan-Algorithmus reicht jedoch nicht aus, da bei dieser Art von Matrix-Scan-Tastatur jedes Mal, wenn eine Taste gedrückt und angehoben wird, ein Burr-Jitter von 10 bis 20 ms auftritt (die Länge dieses Zeitraums wird durch die Hardwareeigenschaften bestimmt). ., wie in Abbildung 2 dargestellt. Um stabile Tasteninformationen zu erhalten, muss eine Möglichkeit gefunden werden, diesen Jitter zu beseitigen, um zu vermeiden, dass ein Tastendruck des Benutzers mit mehreren Tastendrücken verwechselt wird. Eine übliche Methode zum Entgraten besteht darin, die Tastatur nicht sofort zu scannen, wenn eine Tastaturunterbrechung eintrifft, sondern eine Zeit lang zu warten und dann die Tastatur zu scannen, nachdem der Grat-Jitter übersprungen wurde. Der Pseudocode lautet wie folgt:

Warten Sie eine Weile und überspringen Sie den Jitter.

Wenn keine Taste auf der Tastatur gedrückt wird.

Wenn a Taste auf der Tastatur wird gedrückt

Warten Sie eine Weile und prüfen Sie dann, ob dieselbe Taste immer noch gedrückt wird

Wenn dieselbe Taste immer noch gedrückt wird

Geben Sie den Lesescan zurück Code;

else

Direkt zurückgeben

Diese Lösung ist sicherlich machbar, aber das System verwendet die Busy-Warte-Methode, um Grate zu entfernen jede nützliche Arbeit erledigen. Dies ist eine luxuriöse Verschwendung für eingebettete Linux-Systeme mit begrenzten Rechenressourcen. Für diese Anwendung haben wir eine Entgratungslösung entwickelt, die für eingebettete Systeme geeignet ist und gute Ergebnisse liefert.

Da der Linux-Kernel eine Timer-Warteschlange bereitstellt, können wir diesen Mechanismus nutzen, um geschäftiges Warten zu vermeiden und die Systemleistung zu verbessern. Wenn eine Taste auf der Tastatur gedrückt wird, schließt der Tastatur-Interrupt-Handler zunächst die Interrupt-Quelle, wechselt in den Abfragemodus und endet, nachdem ein Timerlist-Objekt in die Timer-Warteschlange eingefügt wurde. Der in den Kernel eingebundene Timer wird pünktlich ausgelöst und die von ihm ausgelöste Funktion führt die folgenden Aufgaben aus: Scannt zunächst alle Tasten auf der gesamten Tastatur und speichert die Scanergebnisse in einer statischen zweidimensionalen Array-Variablen snap_shot_matrix[16][4 ]. Diese Variable beschreibt den Druckstatus aller Tasten auf der Tastatur zu diesem Zeitpunkt dieses Tastaturscans. Ist eine Taste nicht gedrückt, also im losgelassenen Zustand, dann wird der entsprechende Wert in snap_shot_matrix auf 0 gesetzt. Wird eine Taste gedrückt, dann wird der entsprechende Wert in snap_shot_matrix um 1 erhöht. Wenn Wenn der Wert nach einer Erhöhung um 1 größer als eine vorab festgelegte Zahl ist, können wir ihn als stabilen Wert betrachten und den Wert in den entsprechenden Koordinaten einer anderen zweidimensionalen Array-Variablen current_matrix mit einer Größe von 16*4 festlegen auf 1, andernfalls auf 0 setzen. Diese Variable beschreibt den stabilen Wert der aktuellen Tastenanschläge auf der Tastatur. Das heißt, wir verarbeiten zuerst die in diesem Scan erhaltenen Abtastdaten, speichern sie in snap_shot_matrix und filtern sie dann, um die current_matrix basierend auf dem Wert in dieser Variablen zu erhalten. Durch diesen Prozess führen wir eine Entgratungsverarbeitung durch. Nachdem wir den stabilen Wert current_matrix dieses Scans erhalten haben, vergleichen wir ihn mit dem stabilen Wert previous_matrix, der beim letzten Mal erhalten wurde, um festzustellen, ob sich die Tastenbedingungen auf der Tastatur in diesem Moment im Vergleich zum letzten Scan geändert haben und ob sich die Tastaturbedingungen in diesem Moment geändert haben geändert, ob eine Taste gedrückt wird. Wenn festgestellt wird, dass keine Tasten auf der Tastatur gedrückt werden, schalten Sie den Tastatur-Interrupt ein und wechseln Sie erneut in den Interrupt-Modus. Wenn eine Taste auf der Tastatur gedrückt wird und diese sich von der zuletzt gescannten gedrückten Taste unterscheidet, rufen wir sofort die Tastenverarbeitungsfunktion „process_key“ auf, die die übergeordnete Funktion „handle_scancode“ im Tastaturtreiber aufruft. Wenn die Taste, die auf der Tastatur gedrückt wurde, die zuletzt gedrückte Taste ist, erhöhen wir einen Zähler. Wenn der Zähler einen bestimmten festgelegten Wert erreicht, starten wir die sogenannte Auto-Repeat-Funktion, das heißt, der Benutzer drückt weiterhin eine bestimmte Taste. Der Treiber generiert automatisch wiederholt Tastatureingaben. Dieser Zähler wird auf 0 gesetzt, wenn sich die gedrückte Taste ändert. Solange aber noch Tasten auf der Tastatur gedrückt sind, kopieren wir den aktuell gelesenen stabilen Tastaturwert current_matrix in die previous_matrix und hängen das zuvor beschriebene Timer-Objekt nach einer Weile in die Kernel-Timer-Warteschlange ein. Anschließend scannen wir das Ganze erneut erneut auf der Tastatur, bis keine Tasten mehr gedrückt werden.

4 Fazit

Mit der Weiterentwicklung der Informationsgesellschaft und der Computersoftware- und -hardwaretechnologie haben sich Design und Anwendung eingebetteter Informationsprodukte rasant weiterentwickelt, und es ist notwendig, Ihren eingebetteten Produkten spezielle Funktionen hinzuzufügen Auch der Bedarf an Tastaturtreibern wird immer größer. Nach der Einführung des Gesamtrahmens des Tastaturtreibers unter Linux wird in diesem Artikel eine spezielle Tastatur auf der S3C2410-Entwicklungsplatine als Beispiel verwendet, um sich auf die Beschreibung der Arbeit zu konzentrieren, die beim Schreiben eines Treibers für eine spezielle Tastatur in einer eingebetteten Linux-Umgebung ausgeführt werden muss , Bereitstellung einer Grundlage für ähnliche Die Entwicklung bietet eine Idee und Referenz.


(T114)

Das Obige ist der Inhalt der Tastaturtreiberimplementierung (1) (2) eines eingebetteten Linux-Systems. Bitte beachten Sie mehr Verwandte Inhalte. PHP-chinesische Website (www.php.cn)!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Verwenden des Task-Managers unter Linux Verwenden des Task-Managers unter Linux Aug 15, 2024 am 07:30 AM

Es gibt viele Fragen, die Linux-Anfänger oft stellen: „Verfügt Linux über einen Task-Manager?“, „Wie öffnet man den Task-Manager unter Linux?“ Windows-Benutzer wissen, dass der Task-Manager sehr nützlich ist. Sie können den Task-Manager öffnen, indem Sie in Windows Strg+Alt+Entf drücken. Dieser Task-Manager zeigt Ihnen alle laufenden Prozesse und den von ihnen belegten Speicher, und Sie können einen Prozess aus dem Task-Manager-Programm auswählen und beenden. Wenn Sie Linux zum ersten Mal verwenden, werden Sie auch nach etwas suchen, das einem Task-Manager unter Linux entspricht. Ein Linux-Experte verwendet am liebsten die Befehlszeile, um Prozesse, Speicherverbrauch usw. zu finden, aber Sie müssen das nicht tun

Lösen Sie das Problem der verstümmelten Anzeige von Grafiken und Diagrammen auf dem chinesischen Überwachungsserver Zabbix Lösen Sie das Problem der verstümmelten Anzeige von Grafiken und Diagrammen auf dem chinesischen Überwachungsserver Zabbix Jul 31, 2024 pm 02:10 PM

Die Unterstützung für Chinesisch durch Zabbix ist nicht sehr gut, aber manchmal wählen wir Chinesisch für Verwaltungszwecke. In der von Zabbix überwachten Weboberfläche werden unter dem Grafiksymbol kleine Quadrate angezeigt. Dies ist falsch und erfordert das Herunterladen von Schriftarten. Beispiel: „Microsoft Yahei“, „Microsoft Yahei.ttf“ heißt „msyh.ttf“, laden Sie die heruntergeladene Schriftart nach /zabbix/fonts/fonts hoch und ändern Sie die beiden Zeichen in /zabbix/include/defines.inc.php Datei unter define('ZBX_GRAPH_FONT_NAME','DejaVuSans');define('ZBX_FONT_NAME'

7 Möglichkeiten, wie Sie das Registrierungsdatum von Linux-Benutzern überprüfen können 7 Möglichkeiten, wie Sie das Registrierungsdatum von Linux-Benutzern überprüfen können Aug 24, 2024 am 07:31 AM

Wussten Sie, wie man das Erstellungsdatum eines Kontos auf einem Linux-System überprüft? Wenn Sie es wissen, was können Sie tun? War es Ihnen gelungen? Wenn ja, wie geht das? Grundsätzlich verfolgen Linux-Systeme diese Informationen nicht. Welche alternativen Möglichkeiten gibt es also, an diese Informationen zu gelangen? Sie fragen sich vielleicht, warum ich das überprüfe? Ja, es gibt Situationen, in denen Sie diese Informationen möglicherweise noch einmal überprüfen müssen, und sie werden Ihnen zu diesem Zeitpunkt hilfreich sein. Zur Überprüfung können Sie die folgenden 7 Methoden verwenden. Verwenden Sie /var/log/secure. Verwenden Sie das aureport-Tool. Verwenden Sie .bash_logout. Verwenden Sie den Befehl chage. Verwenden Sie den Befehl useradd. Verwenden Sie den Befehl passwd. Verwenden Sie den letzten Befehl. Methode 1: Verwenden Sie /var/l

Was soll ich tun, wenn die fehlenden WPS-Schriftarten unter dem Linux-System dazu führen, dass die Datei verstümmelt wird? Was soll ich tun, wenn die fehlenden WPS-Schriftarten unter dem Linux-System dazu führen, dass die Datei verstümmelt wird? Jul 31, 2024 am 12:41 AM

1. Suchen Sie die Schriftarten Wingdings, Wingdings2, Wingdings3, Webdings und MTExtra im Internet. 2. Öffnen Sie den Hauptordner, drücken Sie Strg+h (versteckte Dateien anzeigen) und prüfen Sie, ob ein .fonts-Ordner vorhanden ist 1. Kopieren Sie die heruntergeladenen Schriftarten wie Wingdings, Wingdings2, Wingdings3, Webdings und MTExtra in den .fonts-Ordner im Hauptordner. Starten Sie dann wps, um zu sehen, ob immer noch ein Erinnerungsdialogfeld „System fehlt“ angezeigt wird Box. Wenn nicht, nur Erfolg!

Erfahren Sie in 5 Minuten, wie Sie Schriftarten zu Fedora hinzufügen Erfahren Sie in 5 Minuten, wie Sie Schriftarten zu Fedora hinzufügen Jul 23, 2024 am 09:45 AM

Systemweite Installation Wenn Sie eine Schriftart systemweit installieren, steht sie allen Benutzern zur Verfügung. Der beste Weg hierfür ist die Verwendung von RPM-Paketen aus den offiziellen Software-Repositories. Bevor Sie beginnen, öffnen Sie das „Software“-Tool in Fedora Workstation oder andere Tools, die das offizielle Repository verwenden. Wählen Sie in der Auswahlleiste die Kategorie „Add-ons“ aus. Wählen Sie dann innerhalb der Kategorie „Schriftarten“ aus. Sie sehen die verfügbaren Schriftarten ähnlich wie im Screenshot unten: Wenn Sie eine Schriftart auswählen, werden einige Details angezeigt. Abhängig von mehreren Szenarios können Sie möglicherweise eine Vorschau einiger Beispieltexte für die Schriftart anzeigen. Klicken Sie auf die Schaltfläche „Installieren“, um es Ihrem System hinzuzufügen. Abhängig von der Systemgeschwindigkeit und der Netzwerkbandbreite kann dieser Vorgang einige Zeit dauern

So verbinden Sie zwei Ubuntu-Hosts mit einem Netzwerkkabel mit dem Internet So verbinden Sie zwei Ubuntu-Hosts mit einem Netzwerkkabel mit dem Internet Aug 07, 2024 pm 01:39 PM

So verwenden Sie ein Netzwerkkabel, um zwei Ubuntu-Hosts mit dem Internet zu verbinden 1. Bereiten Sie Host A: Ubuntu16.04 und Host B: Ubuntu16.042 vor. Host A verfügt über zwei Netzwerkkarten, eine ist mit dem externen Netzwerk verbunden und die andere ist angeschlossen Gastgeber B. Verwenden Sie den Befehl iwconfig, um alle Netzwerkkarten auf dem Host anzuzeigen. Wie oben gezeigt, sind die Netzwerkkarten auf dem A-Host (Laptop) des Autors: wlp2s0: Dies ist eine drahtlose Netzwerkkarte. enp1s0: kabelgebundene Netzwerkkarte, die mit Host B verbundene Netzwerkkarte. Der Rest hat nichts mit uns zu tun, kein Grund zur Sorge. 3. Konfigurieren Sie die statische IP von A. Bearbeiten Sie die Datei #vim/etc/network/interfaces, um eine statische IP-Adresse für die Schnittstelle enp1s0 zu konfigurieren, wie unten gezeigt (wobei #==========

Centos 7 Installation und Konfiguration NTP-Netzwerk-Zeitsynchronisationsserver Centos 7 Installation und Konfiguration NTP-Netzwerk-Zeitsynchronisationsserver Aug 05, 2024 pm 10:35 PM

Experimentelle Umgebung: Betriebssystem: LinuxCentos7.4x86_641. Sehen Sie sich die aktuelle Serverzeitzone an, listen Sie die Zeitzone auf und legen Sie die Zeitzone fest (wenn es bereits die richtige Zeitzone ist, überspringen Sie sie bitte): #timedatectl#timedatectllist-timezones#timedatectlset-timezoneAsia /Shanghai2. Verständnis der Zeitzonenkonzepte: GMT, UTC, CST, DSTUTC: Die gesamte Erde ist aus Gründen der Vereinheitlichung in vierundzwanzig Zeitzonen unterteilt. Es wird eine einheitliche Zeit verwendet, die als Universal Coordinated Time (UTC) bezeichnet wird

werfen! Ausführen von DOS auf Raspberry Pi werfen! Ausführen von DOS auf Raspberry Pi Jul 19, 2024 pm 05:23 PM

Aufgrund unterschiedlicher CPU-Architekturen ist die Ausführung von DOS auf dem Raspberry Pi zwar nicht einfach, stellt aber auch keine großen Probleme dar. FreeDOS dürfte jedem bekannt sein. Es ist ein vollständiges, kostenloses und gut kompatibles Betriebssystem für DOS. Es kann einige ältere DOS-Spiele oder kommerzielle Software ausführen und auch eingebettete Anwendungen entwickeln. Solange das Programm unter MS-DOS ausgeführt werden kann, kann es auch unter FreeDOS ausgeführt werden. Als Initiator und Projektkoordinator von FreeDOS werden mir viele Anwender als Insider Fragen stellen. Die Frage, die mir am häufigsten gestellt wird, ist: „Kann FreeDOS auf einem Raspberry Pi laufen?“ Diese Frage ist nicht überraschend. Schließlich läuft Linux auf dem Raspberry Pi sehr gut

See all articles