FAQ |
Gut
zu wissen
Spass muss sein. Warum
echte (Fortran-)Programmierer kein Pascal mögen?
Einfache
Programmierung
Sicherlich plagen sich schon viele Anwender und Programmierer mit der schwierigen Einbindung von PC-Karten in eine 32-bit Windows-Applikation herum. Üblicherweise bedient man sich eines DLL-Treibers, der bei der Programmierung der Anwendung angeblich "einfach" nur noch dazugebunden wird. Die Praxis zeigt oft einen weitaus schwierigeren Weg auf. Resultat: Oft klappt nichts, oder nicht so, wie es eben sein sollte. Dies liegt zum Teil daran, dass nicht jede DLL in jeder Betriebssystemumgebung funktioniert. Es gibt beispielsweise DLLs, die nur unter Windows 95/98 oder andere, die nur unter Windows NT4 oder 2000/XP...7 funktionieren. Manche DLLs benötigen zusätzliche System-Treiber wie VXD oder SYS, die im Anwendungsverzeichnis oder im System/Driver-Verzeichnis angelegt sein müssen bzw. zusätzlich in der Windows-Registry eingetragen werden, damit sie überhaupt aus der Anwendung heraus funktionieren. Auch die Integration einer noch so guten DLL in die eigene Programmiersprache bzw. Anwendung kann auf verschiedenen Rechnern bzw. Konfigurationen unterschiedlich ausfallen und zu erheblichen Schwankungen bezüglich der Port-read/-write Zyklen oder zu anderen Systemkonflikten führen. Um gute Treiber wirklich ohne "Wenn und Aber" dem Produkt beizufügen, bedarf es einer Reihe von mörderischen Tests auf ebenso vielen verschiedenen Rechnern mit unterschiedlichen Konfigurationen, daß es heutzutage schier unmöglich scheint, Fehler bzw. Inkompatibilitäten vermeiden zu können. Die quasi beste Art (schnellster Zugriff) eine I/O-Karte in eine bestehende oder noch zu programmierende Applikation zu integrieren, ist gleichzeitig auch der mühsamste Weg und sollte daher in Assembler vollzogen werden. Da aber zum größten Teil nur noch Hochsprachen wie Delphi, Visual-Basic oder Visual-C++ verwendet werden, ist oftmals die Programmierweise von Assembler unbekannt, auch wenn sich die ASM-Befehle in den meissten neuen Compilern als inline-code integrieren läßt. Doch gerade in dieser, etwas antiquarisch anmutenden Sprache, liegt das größte Potential, wenn es um echte Geschwindigkeit geht. Tips für eine erfolgreiche I/O-Karten-Programmierung: - Auswahl
einer geeigneten Programmiersprache wie Delphi, MSVC, GNU-C
Betriebssysteme mit direktem I/O-Portzugriff sind beispielsweise:
Eine wesentlich bessere und leichtere Einbindung von I/O- und Mess-Karten ist durch die Freigabe des "Karten-device" quasi als OPEN-Source immer zweckentsprechend. So kann der Programmierer die Kartenansteuerung einsehen und seine Einbettung je nach Bedarf selbst optimieren, erweitern und an seine Umgebung ideal anpassen. Eine DLL ist bequem, wenn sie funktioniert. Leider wird oft verschwiegen, dass DLLs aber nicht die 100%ige Leistung einer Karte übermitteln kann. Durch Rücksichtnahme auf unterschiedliche Systemkonfigurationen, muss (sollte) eine DLL auf quasi alles gefasst sein. So müssen neben der zusätzlichen Variablenindezierung, weitere Delayschleifen, Sicherheitsmechanissmen und div. Abfragen implementiert werden, die bei einer direkten Programmierung entfallen würden. Nicht zuletzt der Umweg DLL selbst erzeugt weitere thread-Verzögerungen im System und verlangsamt den Datentransfer bzw. Wandlungsprozess. Wir haben daher auf die DLL-Programmierung oft verzichtet und stattdessen den eigentlichen Treiber-Code als offenen Source freigegeben. Dies halten wir für die ehrlichste Art, ein Produkt zu vermarkten, auch wenn dabei das eine oder andere Geheimnis gelüftet wird und dabei die DLL-Mystik verloren geht bzw. ein bisschen mehr Programmierarbeit für den Administrator ansteht.
Die wahren Schwächen wo Windows NT NichtsTaugt Meiner Meinung nach, ist NT gegen 9x die bessere Wahl, wenn man bereit ist, einige Eigenheiten und Einschänkungen in mehr Stabilität einzutauschen. Soviel zur Theorie. Wer aber schon mal beide Systeme installiert und ausgiebig getestet hat, weiß anschließend mehr über die Inkompatibilitäten und Abstürze beider Fenster-Oberflächen. Windows 95/98/ME bietet gegenüber NT wesendlich mehr an Geräte-Performance. Installiert man Windows 98 ohne zusätzliche Media-Spielchen und fummelt nicht an der Registry herum, ist 98 genauso sicher wie NT. Windows-NT war immer etwas stabiler als Windows 95/98, und das aus einem ganz einfachen Grund: weil es so gut wie nichts konnte. Microsoft hielt aus NT alle unsicheren Anwendungen (insbesonders USB) herraus, mit denen die Windows 9x Benutzer fortwährend als Betatester mißbraucht wurden. NT konnte kein Plug&Play, NT unterstützte keine Multimediakarten und von Direct-X mit dreidimensionaler Spielerei wollte man in Redmond schon gar nichts wissen. NT unterstützte einfach nur die entscheidenden Komponeten so gut und stabil es ging - das ist alles. Da NT darmals mit seiner neuen 32-bit-Kernel-Struktur als Nachfolger von Windows 95 einzug hielt, glaubten viele Anwender, daß dieses BS absturzsicherer wäre. Dies, so scheint es, ist ein Gerücht das Microsoft selbst verbreitet hat, um Anwender auf die "geschützte Kernelversion" zu ziehen. Mit NT-Systemen lassen sich nunmal höhere Gewinne einfahren als mit Windows 3x/9x. Eine geschickte Marketingstrategie, die sich aber auch noch zu einem Bummerang entwickeln kann, denn anstatt endlich mal eine Bug-freie Version abzuliefern, wartet die Firma aus Redmond lieber mit immer neueren Versionen auf (bzw. Service-Packs), die die Anwender im Glauben auf eine bessere Stabilität fortwährend installiert und anschließend maßlos enttäuscht. Nicht gerade selten tauscht man bei diesen Packs einen alten Bug gegen zwei neue ein - und das traurige Spiel beginnt von Neuem. Echtzeit-Applikationen
unter Windows ?
Der Multithread im Schwitzkasten
Nach dem UPDATE - stille
Problemzone: DIREKTER
HARDWAREZUGRIFF
Entwicklungswerkzeuge
Arbeiten mit "C++"
Resümee
Hier noch ein Link zum Thema:
Linux - die clevere Alternative, nicht nur für Hardwarespezialisten
Die gute Nachricht gleich vorweg : Unter Linux lassen sich generelle Hardwareinstallationen wie I/O-Karten, A/D- und D/A-Messkarten ganz einfach und ohne Probleme mit GNU-C programmieren. Linux gehört heutzutage ins Portfolio und ist somit "State-of-the-Art". Jedoch ist aller Anfang schwer, so auch bei diesem umfangreichen Betriebssystem. Seit den ersten Anfängen hat Linux einen weiten Weg zurückgelegt. Anfangs ein reines Spezialisten-System, schlich es sich langsam, aber stetig in das Bewußtsein der User. Selbst im kommerziellen Einsatz scheint Linux sich als Alternative immer mehr zu etablieren und nicht zuletzt bei Lotus-Notes, wo AOL mit Lotus kooperieren will. Hier werden hohe Summen investiert, um neue Suchmaschinen bzw. Datenbanken unter Notes auf Linux zu portieren. Linux ist schon seit langem eine echte Alternative zu herkömmlichen Betriebssystemen. Erst recht zu Windows-NT. Grund dafür ist nicht nur der stabile und flexible Kern allein. Vielmehr geben die kompletten Systeme, sogenannte Distributionen, den Anwendern jede Menge Tools und zum Teil mächtige Applikationen mit an die Hand. Die Grundlage für die meisten Linux-Entwicklungen bildet die GNU General Public Licence, eine Software-Lizenz, die sicherstellt, daß jeder den Quellcode weiterentwickeln darf und daß die Arbeit der Autoren auch gewürdigt wird. Aufgrund des freien Copyrights gibt es in vielen Bereichen mehrere Programme, die bestimmte Aufgaben erfüllen, so daß der Anwender und Programmierer hier nicht einmal auf bestimmte Programme beschränkt sind. Mit X11 und KDE sind professionelle, grafische Oberflächen in den Paketen bereits enthalten. Zusammen mit der vom Hersteller der Distribution beigelegten Software wird das System zum wahren Multitalent für alle PC-Anwender und Programmierer. Übrigens, wenn Sie von Windows auf Linux umsteigen wollen, sollte auf dem PC zunächst eine Linux-Testinstallation parallel zu Windows 95/98 laufen (am besten auf einer 2.ten Back-Up Platte). So können Sie sich in das neue Betriebssystem einarbeiten, sich von seiner Stabilität und Leistungsfähigkeit überzeugen und haben gleichzeitig noch das vertraute System zur Verfügung. Voraussetzung dafür sind zwei freie Partitionen auf der Festplatte: eine für das Linux-System selbst, eine weitere (kleinere) für die Linux-Swap-Datei. Sie können Linux dann entweder von DOS aus über das Programm LOADLIN.EXE oder über den Linux-eigenen Bootmanager Lilo (Linux Loader) starten. Mit Lilo erhalten Sie beim PC-Start ein Menü, um zwischen Windows und Linux zu wählen. Von Linux aus können Sie auf Windows-95/98- (FAT, FAT32) oder NT-Partitionen (NTFS - nur lesend) zugreifen und die dort abgelegten Daten benutzen. Wenn Sie bislang mit Microsoft Office gearbeitet haben, macht es keine Schwierigkeit, die damit erstellten Dokumente weiterzuverwenden. Die für Linux verfügbaren Office-Pakete StarOffice, WordPerfect und Applixware besitzen Importfilter für alle wichtigen MS-Dokumentformate. Mit dem Wine-Emulator (Gratis-Download unter http://www.winehq.com, rund 2 MB) läßt sich sogar die eine oder anderen Windows-Software unter Linux zum Laufen bringen. Zurück zur Mess-Hardware. Es gibt zum Glück keine getarnte Zugriffmechanissmen, wie sie beispielsweise bei MS-Windows alltäglich sind. Im Gegenteil. Linux bzw. Linux-Anwendungen sind eben alle offen zugängig und zudem oft noch kostenlos. Vergessen Sie die umständliche Programmierung, die Ihnen andere MS-Betriebssysteme abverlangen. Der Hardwarezugriff ist dermaßen einfach, dass jeder ANSI-C Programmierer sofort Erfolg hat. Mit Befehlen wie ioperm und iopl kann die I/O-Port-Welt geöffnet werden, ohne daß zusätzliche device-Treiber von Nöten sind, oder nichteinsehbare, kryptische Includes dazugebunden werden müssen, die angeblich die Programmierung vereinfachen sollen - aber oft nur blauen Dunst vorgaukeln. Die Programmierweise ist ähnlich wie mit einem ANSI-C-Compiler unter DOS und lässt aber neben 8-bit-Zugriffen auch 16-bit und 32-bit Zugriffe zu. Um in den direkten Genuß der Portprogrammierung zu kommen, wird lediglich ein offenes Include <io.h> aus dem Verzeichnis /asm dazugebunden und schon stehen die Befehle outb(wert,adresse) und inb(adresse) zur Verfügung. Die Compilierung kann mit XWPE unter KDE oder mit gcc auf der Linux-Konsole bash erfolgen. Auch andere C-Compiler können den Code compilieren und haben keinerlei Verständigungsprobleme, wie sie bei anderen Betriebssystemen geradezu üblich sind. Programmier-Einsteigern hingegen, sollte ein Komplettpaket wie Debian oder S.u.S.E. ans Herz gelegt werden. Beispielsweise sind ab S.u.S.E. Paket 6.2 alle notwendigen Programme für die erfolgreiche Compilierung des hardwarenahen C-Codes enthalten. Nach der ca. 45-minütigen Installation von S.u.S.E.s Linux, kann bereits das erste C-Programm eingegeben und compiliert werden. Natürlich ist die Eingabe unter KDE wesentlich angenehmer als mit einem einfachen Emac-Texteditor auf Konsolenebene, macht in der Sache aber das Gleiche. Ideal ist die Multitasking-Fähigkeit von Linux, da neben der stilvollen Eingabe unter KDE auch ein bash-Fenster auf dem Desktop geöffnet werden kann. So ist es möglich den Source im Fenster abzuspeichern, um ihn im bash-Fenster anschließend manuell mit gcc zu compilieren. Demnach verpasst man einerseits keine Compilerfehler und ist andererseits sofort in der Lage, das lauffähige Programm in seiner realen Umgebung auszutesten. Bei einem Absturz des Testprogramms kann das bash-Fenster auf der KDE-Oberfläche einfach manuell geschlossen werden, um es anschließend wieder aufzurufen. Linux und KDE müssen dazu nichteinmal verlassen werden. Die Oberfläche bleibt weiterhin stabil und kann der nächsten Eingabe zur Abänderung des Sourcecodes dienen. Hiermit werden die Stärken von Linux ganz klar und deutlich. Kurz um:
Gerade ältere Programmierer, die wie ich schon über 20 Jahre lang bei der Sache sind, werden sich hier wieder fast wie zuhause fühlen, denn unter Linux kommen so manche Abfolgen und Befehlsstrukturen wie sie früher mit CPM oder später unter DOS alltäglich waren, wieder zum Vorschein, gleichwohl unter der Premisse, dass Linux von Unix herrührt und doch noch eine Menge zu lernen gilt. Die Entwicklung und Verbreitung von Linux ist einzigartig. Seit 1991 wird Linux von einer ungezählten Schar Computer-Freaks in der ganzen Welt weiterentwickelt. Das ganze passierte überwiegend in der Freizeit, nur so zum Spaß und gänzlich ohne Bezahlung. Nicht einmal der Riese Microsoft verfügt über eine solche Anzahl an motivierten und begabten Betriebssystem-Entwicklern. Fehler im System werden über das Internet sofort an den jeweiligen Programmierer weitergegeben und beseitigt. Dies erklärt die schnelle Weiterentwicklung und letztlich die Stabilität des Systems, da alle User ein eigenes Interesse daran haben, daß das System fortwährend verbessert wird. Der Betriebssystem-Kernel, der dann jeweils von Linus Thorvald freigegeben wird, läuft somit immer sehr stabil.
Treiber ohne Ende ? Treiber für Hardwarekomponenten zu entwickeln war immer schon mühselig und zeitraubend (insbesonders für Hardwareentwickler), gleichgültig um welches BS (Betriebssystem) es sich handelt. Mit steigender Integrationsdichte der Hardware, vervielfältigen Anforderungen und neue, mächtige Betriebssysteme, auch die damit verbundenen Treiber. Kurz um: alles wird komplexer und komplizierter - insbesonders für jene, die diese Treiber schreiben müssen. Damit entwickelt sich die Treibergenerierung immer mehr zum Engpass im Projektzyklus der Hardwareentwicklung bis zur Produktfreigabe und unterbindet teilweise die rechtzeitige Markteinführung oder neue Entwicklungen. Somit ist es nicht verwunderlich, dass es an eine Zumutung grenzt, wieviele Treiber heute ein modernes Produkt beinhalten muss, dass beispielsweise unter Microsoft eingesetzt werden soll, um allen Kundenwünschen einigermaßen gerecht zu werden. Dies hat mit Programmierfaulheit oder Arroganz nichts zu tun, denn es ist einfach schlichtweg zu viel und oft auch für den Hersteller nicht erkennbar, welche Treiber der Anwender vorraussetzt bzw. wirklich benötigt. Und nicht zu unterschätzen gilt der notwendige Aufwand, um vom Prototypenzustand zu einer robusten, serienreifen Gesamtlösung zu gelangen. Alles das kostet jedem Hersteller Entwicklungszeit und Resourcen (bsp. Mitarbeiter und Ausbildung, neue Compiler, MSDN-Support, schnellere und aktuelle Test-Rechner, Compliance-Tests, Dokumentationserstellung, Langzeituntersuchungen, Installationstest, Web-Seiten-Support...). Die hierbei anfallenden Kosten werden auf das Produkt später wieder aufgeschlagen, um die damit verbundenen Vorleistungen bzw. Entstehungskosten wieder einzufahren. Die Hardware selbst fällt kostenmäßig somit immer weniger ins Gewicht, wenn es darum geht ein neues Produkt marktreif einzuführen. Momentan liegt sie im Vergleich zur Softwareentwicklung etwa gleich auf. Die Kostenschere spreitzt sich aber um so mehr, wenn das Produkt kaum einen Absatz am Massenmarkt erhält oder nur für eine kurze Dauer am Markt besteht. Da wir die Software-Vorlieben unserer Anwender nicht im Einzelnen kennen, werden üblicherweise Delphi-5 Beispielprogramme zu unseren Produkten als Source-Code mitgeliefert. Ähnlichkeiten zwischen Delphi mit C++ und Visual-BASIC sind sofort erkennbar und für den erfahrenen Programmierer kein Problem, den Source in seine bevorzugte Programmiersprache umzuwandeln, sofern nicht bereits Beispiele für diese Programmiersprachen bereit stehen. Da es sich sowieso oft nur um ein paar Zeilen Treibersource handelt ist die Sache recht einfach: Komplexe Anwendungsprogramme werden in der Regel nur um diese Zeilen ergänzt, um die jeweilige I/O-Karte in das System einzubinden. Dazu ist im Normalfall (unter Windows 9x) auch keine SYS, DLL oder anderweitige Thread-Programmierung erforderlich und für Windows-NT, 2000 oder XP bieten wir bereits Device-Treiber an, um die benötigten I/O-Resourcen automatisch freizuschalten (siehe NTP und HWT mit klibdrv). Weiterhin bieten wir Ihnen zunehmend mehr Unterstützung hinsichtlich der Direktprogrammierung in Visual-BASIC und Delphi-5 bzw. als DLL- und SYS-Treiber für alle neuen Windows-Betriebssysteme an. Bitte fragen Sie uns möglichst vor dem Kauf, ob wir einen entsprechenden Treiber und/oder Source-Code für Ihren Vorzugs-Compiler anbieten können, denn wir bieten nicht für jedes Produkt das ganze Sortiment zu allen möglichen Programmiersprachen an.
KOLTER ELECTRONIC ist nicht für die Inhalte fremder Seiten verantwortlich. Es gelten ausschließlich die AGB der Firma KOLTER ELECTRONIC. Für die Richtigkeit der Angaben wird keine Gewähr übernommen. Alle Preisangaben sind gewerblich. Das Zahlungsmittel ist EURO. Alle Rechte vorbehalten. (c) copyright H.Kolter |