Forum: Mikrocontroller und Digitale Elektronik Betriebssystem Texteingabe


von Paul S. (techpaul)


Lesenswert?

Hallo Leute,
ich hab mich in letzter Zeit mehr und mehr mit dem Thema Betriebssystem 
auseinandergesetzt... ich habe gehört dass einkommende Zeichen in einem 
Buffer zwischengelegt und von dort weiterverarbeitet werden. Soweit 
alles klar doch nun meinte kürzlich jemand, dass dies in 
Betriebssystemen wie Windows oder MacOS nicht über einen Buffer sondern 
über z.B.: Windows messages gelöst wird.
Kann mir bitte jemand erklären wie genau das funktioniert? Wie kommen 
die Zeichen über eine Message in das Programm? Gibt es für die Messages 
eine reservierte RAM Adresse?
Gruß, Paul

von Thomas W. (diddl)


Lesenswert?

In Windows, wie in allen anderen GUI, da hast du ja meist mehrere 
Fenster geöffnet.

Die Texteingabe kommt zb. immer vom selben Device (Keyboard) und geht 
immer in das Fenster, was gerade im Vordergrund (aktiv) ist.

Damit das funktioniert braucht es so ein Message System ...

=============

Wenn du zb. ein Fenster definierst in deiner App, dann gibst du dem OS 
vom Windows eine Handler Funktion bekannt, die für dein Fenster 
"zuständig" ist.

Windows ruft dann immer wenn etwas passiert (Event), was dein Fenster 
betrifft, den Event Handler deines Fensters auf.

Auf deutsch, wenn dein Fenster im Vordergund ist, und du ein "Z" am 
Keyboard drückst, dann wird deine Event Handler Funktion aufgerufen mit 
der Information "Taste gedrückt - Z".

Wenn du die Taste loslässt, dann kommt ein Event "Taste losgelassen- Z".

Dieses Event System nennt man auch Message Messages ...

von Paul S. (techpaul)


Lesenswert?

Hallo,
ok vielen Dank für die rasche und informative Antwort ;).
Und wo in der Application sich der Handler befindet (also wohin genau 
die Message geleitet wird) wird beim start des Programmes festgestellt 
nehme ich an?

Liebe Grüße

von Thomas W. (diddl)


Lesenswert?

Paul S. schrieb:
> Und wo in der Application sich der Handler befindet (also wohin genau
> die Message geleitet wird) wird beim start des Programmes festgestellt
> nehme ich an?

Im Fall von Windows gibt es zwei Arten wie man es machen kann:

- klassisch command line
- ein "richtiges" Windows Programm (Fenster)


Im Falle des Command Line Modell läuft es wie früher.
Das Programm kommuniziert über zwei Pipes (Stdin/Stdout).

Pipes sind aus Sicht der Applikation wie Dateien zu handhaben.
Man öffnet die Pipe und kommuniziert mit Standard Lese/Schreib 
Funktionen.
Alles was man auf STDOUT schreibt wird am Fenster angezeigt.
Wenn man ein Zeichen eintippt kommt es als Byte vom STDIN herein.

---

Im Falle eines richtigen Windows Programm mit einem Fenster, da muss man 
für jedes Fenster eine Handler Funktion schreiben, die alle Events des 
Fenster behandelt.

Diese Handler Funktion wird dem OS (Wndwows) meist gleich beim 
Programmstart bekannt gegeben (über eine API Funktion).

"Hallo Windows, ich möchte bitte ein Fenster haben, und hier bitte schön 
ist meine Handler Funktion für dieses Fenster"

von Paul S. (techpaul)


Lesenswert?

Vielen lieben Dank Thomas für deine Antworten, echt top ;)
Eine Frage hab ich leider noch:
Ich möchte meinem selbstgebauten DMX Mischpult eine Tastatur anbasteln 
um die z.B.: Szenen zu benennen und die Fader besser ins System 
einbinden. Als CPU dient ein 32-bit ARM AVR.

Wenn ich das richtig verstanden habe, müsste ich für das eine Art HAL 
schreiben welche:
Für die verschiedenen Applikationen auf dem Mischpult: Lichtsteuerung, 
medienbrowser, Soundsteuerung, Soundschnitt... muss ich einen handler 
schreiben. Dessen position wird beim Start in eine Liste des OS 
geschrieben wo man die Handleradressen aller laufenden Programme 
aufbewahrt und eine bool variable dazu um zu wissen welches Programm 
aktiv ist.
Einen Interrupt auslöst wenn vom Keyboard Daten kommen
Ich muss eine Art driver schreiben damit mein System die Tastatur 
"verseht"
Das Zeichen wird in einem Buffer des OS gespeichert und an die Gerade 
offene Anwendung geschrieben "Nachricht taste z gedrückt"

Und die Fader auch in Messages wie "Fader1 hoch/ab" verpacken?
Würde das so Funktionieren?

Alles Liebe und vielen Dank, Paul

von Thomas W. (diddl)


Lesenswert?

Paul S. schrieb:
> Ich möchte meinem selbstgebauten DMX Mischpult eine Tastatur anbasteln
> um die z.B.: Szenen zu benennen und die Fader besser ins System
> einbinden. Als CPU dient ein 32-bit ARM AVR.

32 bit Arm?
Womöglich ein STM32?

Viele STM haben schon alles was man braucht in den Libs vom Hersteller 
bzw. in dem Sample Code des Hersteller dabei.

Ich nehme mal an eine USB Tastatur?
Es gibt fertige Implementierungen für USB devices, auch Keyboard.



Paul S. schrieb:
> Ich muss eine Art driver schreiben damit mein System die Tastatur
> "verseht"

Du denkst zu kompliziert.

Da es ein selbstgebautes DMX Mischpult ist, wird auch die Software 
selbstgebaut sein?

Wenn alles aus einer Hand kommt, dann ist es meist recht simpel:

Da mach ich einen Tastatur Buffer und lasse alle meine Module auf diesen 
Buffer zugreifen.

==

Im Falle eines OS wie Windows ist es nur deshalb so kompliziert, weil 
es:

- standardisiert sein muss
- verschiedenste Entwickler betrifft die sich nicht kennen
- closed source ist
- gegenseitig abgeschottet sein muss

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.