Den Befehl „outport“ in der Programmiersprache C gibt’s bei Win-32 nicht mehr.
Welchen Ersatzbefehl gibt es denn da?
MfG
Jo
Den Befehl „outport“ in der Programmiersprache C gibt’s bei Win-32 nicht mehr.
Welchen Ersatzbefehl gibt es denn da?
MfG
Jo
Hallo Hans !
Den Befehl „outport“ in der
Programmiersprache C gibt’s bei Win-32
nicht mehr.
Welchen Ersatzbefehl gibt es denn da?
Direkte Hardwarezugriffe solltest Du dem Betriebssystem ueberlassen. Unter VC++ 6.0 gibts noch den Befehl _outp. Der geht aber nur bis Win98. Unter NT oder W2000 ist mit sowas aber endgueltig Schluss. Bei direkten Hardwarezugriffen kommst Du im Multitasking naemlich ganz schnell ins Schleudern. Was machst Du denn, wenn Du einen Port auslesen musst und Dein Programm gerade nicht dran ist ??? Fuer die meiste Standarthardware gibt es Zugriffsfunktionen in der Win-Api. Ansonsten musst Du entweder einen Treiber fuer Deine Hardware besorgen oder selber schreiben (meist aufwendig) oder einen Universaltreiber nehmen. Fuer Portzugriffe habe ich mal einen Universaltreiber gesehen. Den hast Du im Windows installiert und spaeter über eine mitgelieferte DLL zu Laufzeit korrekt fuer die jeweilige Aufgabe eingestellt und angesprochen. Leider weiss ich nur noch dass das Ding aus Russland kam.
Bei den richtigen Multitaskingsystemen wie Unix gibt es die wilden Hardwarezugriffe aus der Userebene schon lange nicht mehr.
Tschuess !
Andreas
MfG
Jo
Hallo Andreas!
Das klingt aber gar nicht lustig
Ich wollte meine Download-Software für Microcontroller auf WIN32 umschreiben, aber daraus wird nun scheinbar nichts.
Das Multitasking-Problem hätte mich nicht gestört, weil der Takt ohnehin nur vom PC kommt und da stören Pausen nicht.
Schade, dass eine Programmiersprache wie C, mit der man sich in den „Niederungen der Hardware“ austoben kann, nun doch viel von ihrem Reiz verliert.
Bleibt die Frage, warum man in einem Treiber kann, was man in Normal-Programmen nicht kann? Gibt’s dort privilegierte Befehle?
Jedenfalls besten Dank für Deine Hilfe !!!
Hans
Hallo Hans
Das klingt aber gar nicht lustig
Ich wollte meine Download-Software für
Microcontroller auf WIN32 umschreiben,
aber daraus wird nun scheinbar nichts.
Das Multitasking-Problem hätte mich nicht
gestört, weil der Takt ohnehin nur vom PC
kommt und da stören Pausen nicht.
So aufs erste gesehen kommen, für mich, 4 Varianten in Frage:
Du benutzt ein COM_Port:
Null Problemo, kannste alles über sen normalen Treiber machen.
das Druckerport
Hier musst du dich mal mit dem DDK (Device Driver Kit) rumschlagen.
Joystick
über DirectX
du hast ein eigenes Interface
Hier MUSST du einen eigenen Treiber schreiben.
Schade, dass eine Programmiersprache wie
C, mit der man sich in den „Niederungen
der Hardware“ austoben kann, nun doch
viel von ihrem Reiz verliert.
Kannst du ja auch, du musst dich nur an die Regeln halten, sprich als Treiber programmieren wenn’s denn wirklich sein muss.
Bleibt die Frage, warum man in einem
Treiber kann, was man in
Normal-Programmen nicht kann? Gibt’s dort
privilegierte Befehle?
JAIN: Es giebt schon priviligierte Befehle bei den Intel’s, aber die sind hauptsächlich für die Task-Verwaltung. Bei „normalen“ Programmen widen die Speicherbereiche auf welche zugegriffen werden kann beschränkt, unter anderem eben auch der I/O.bereich.
MfG Peter(TOO)
Hallo Hans !
Schade, dass eine Programmiersprache wie
C, mit der man sich in den „Niederungen
der Hardware“ austoben kann, nun doch
viel von ihrem Reiz verliert.
Da muss ich Dir aber widersprechen. Mit der Programmiersprache C++ kannst Du Dich weiterhin in den Niederungen der Hardware oder in den abstraktesten Objektprogrammierebenen rumtreiben. C hat noch genausoviel Funktionalitaet wie frueher. Lediglich werden Deine Moeglichkeiten durch das Betriebssystem eingeschraenkt. Das hat ueberhaupt nichts mit der Programmiersprache zu tuen. Du kannst Hardware auch weiterhin in C programmieren, wenn Du z.B.:
-Treiber fuer Win schreibst
-Den Linux Kernel (auch C) um neue Hardwaretreiber erweiterst
-Mikrocontroller oder DSP’s in C programmierst
Normal-Programmen nicht kann? Gibt’s dort
privilegierte Befehle?
Nein-> aber privilegierten Code. Alle Tasks werden staendig ein und ausgeschaltet. Was soll’s den werden, wenn sich da jedes Userprogramm an Interrupts und IO’s bedient ? Wer kriegt denn dann die Interrupts ? Wer darf den Port beschreiben ?
Ein Treiber ist nur einmal da-> das Problem der gleichzeitigen Zugriffe ist somit erledigt-> Sharing kann ja der Treiber verwalten. Das Betriebssystem weiss durch die Treiberanmeldung welche Resourcen benoetigt werden. Der Treiber wird bei Bedarf vom Betriebssystem an die Hardware gelassen (kein sinnloses Polling; Interrupts koennen benutzt werden). Der Treiber wird nicht wie die anderen Usertasks ein- und ausgeschaltet. Dein Programm benutzt die Hardware ueber den Treiber. Das ist doch viel sicherer und ordentlicher als das Kraut und Rueben Zugriffssystem.
Nun noch mal zu Deinem Problem:
Du willst den Mikrocontroller doch sicherlich ueber die COM- Schnittstelle beschreiben ? Das ist unter Win doch gar kein Problem. Der COM und der LPT Port werden von dem Win API wie Dateien behandelt. Als erstes holts Du Dir mit CreateFile ein Handel auf den Com Port. Dann kannst Du mit SetCommProperties und SetCommTimeOuts die Eigenschaften einstellen. Dann kannst Du mit ReadFile und WriteFile von der Schnittstelle lesen oder auf die Schnittstelle schreiben. Falls Du kein Standartprotokoll zur Uebertragung benutzt, kannst Du mit irgendeinem Befehl die Statusleitungen abfragen oder setzen.
Dann schliesst Du das Handel wieder.
Wenn Du ein Beispiel willst (einfaches Konsolenprogramm, was die serielle Schnittstelle ausliesst und alle ankommenden Bytes als Zeichen auf den Bildschirm bringt) schreib mir bitte eine E-Mail. Das Programm brauchst Du bloss von lesen auf schreiben umstellen -> und fertig ist Dein Ladeprogramm.
Viele Gruesse !
Andreas