Mit was hardwarenah Programmieren?

Konfiguration, Anwendungen, Treiber und TSRs unter DOS
becki

Mit was hardwarenah Programmieren?

Beitrag von becki »

Ich würde gerne unter Dos den Paralellport, Gameport, etc ansteuern. Nun stellt sich die Frage: Sollte ich es eher in C mit DJGPP machen oder in Assembler? Habe mit beiden noch nicht unter Dos gearbeitet, habe aber Assemblererfahrung mit Atmel Mikrocontrollern. Was würdet ihr mir denn empfehlen?
Um es zu konkretisieren: Ich will meinen einen Mikrokontroller durch einen Dos PC ersetzen. Ich hoffe ihr könnt mit dieser Info etwas anfangen ;)

MfG becki
Benutzeravatar
CptKlotz
Admin a.D.
Beiträge: 2947
Registriert: Mo 7. Mär 2005, 23:36
Wohnort: Dorsten
Kontaktdaten:

Beitrag von CptKlotz »

@becki: Danke für die Mühe.

Ich habe das Posting in Locutus' Thread dann jetzt entfernt...

Locutus meinte vorhin zu mir, daß man diese Threadjacking-Geschichte nicht zu eng sehen sollte, weil's ja auch nicht sinnvoll wäre, ZU viele neue Threads zu öffnen... Ganz unrecht hat er da wohl nicht :-)

Aber es kommt ja auch auf den Einzelfall an. Hier sind meiner Meinung nach die Unterschiede zwischen den Fragestellungen so groß, daß sich ein eigener Thread lohnt.

Ok, kommen wir zurück zum Thema (ich persönlich habe keine Ahnung...)

Gruß,
Stephan
“It is impossible to defeat an ignorant man in argument.” (William G. McAdoo)
Benutzeravatar
ChrisR3tro
Administrator
Beiträge: 1984
Registriert: Mo 7. Mär 2005, 23:33
Wohnort: NRW
Kontaktdaten:

Beitrag von ChrisR3tro »

Hallo becki,

Assemblererfahrung mit Atmel-Mikrocontrollern... Wie weit gehen diese Erfahrungen denn? Wenn Du gut mit Assembler zurechtkommst, würde sich dann nicht der NASM (Netwide Assembler) anbieten? Der ist free, Erfahrungen habe ich damit aber noch nicht gemacht, abgesehen von einem Hello World-Programm für Win32. :) (Nur am Rande: Wenn ich mal Zeit und Lust finde, werde ich mich ein wenig mit Assembler an PIC-Mikrocontrollern versuchen. Habe aber kaum Assembler-Erfahrung.)

DJGPP kann ich hingegen nur weiterempfehlen. Damit habe ich schon öfter rumgespielt (in Verbindung mit Allegro) und nur gute Erfahrungen gemacht. Dazu gibt's eine recht Borland-ähnliche IDE namens RHIDE. Den Compiler gab's schon zu meiner Schulzeit. Das muß so zwischen 6 und 8 Jahren her sein. ;-) Dementsprechend ausgereift wird er wohl sein...

Viele Grüße,
locutus
becki

Beitrag von becki »

Gut, schonmal danke für die schnellen und hilfreichen Antworten. Ich werde mir jetzt wohl als erstes den DJGPP ansehen, IDE ist mir nicht so wichtig.
Meine Assemblerkenntnisse gehen so ca. bis zur ansteuerung einer RS232 Schnittstelle mit Atmel AVR Controllern um damit Daten auf mein Minicom (vgl. Hyperterminal) anzeigenzulassen. Sprich: Bitoperationen und Interrupt-gesteuertes Programmieren.
Cyberpuer

Beitrag von Cyberpuer »

Also solange du nicht Basic benutzt, sind eigentlich alle sprachen unter Dos sehr Hardwarenah. Sogar Basic (ein wenig... Hat das nicht auch nen Portbefehl?).
Und genau darum gehts.
Ich würde dir Turbo Pascal empfehlen.
Schnell, einfach, Hardwarenah und zur not kannst du da drin auch noch Assembler benützen, wenn du es brauchst.
bttr

Beitrag von bttr »

Ich stimme da "Cyberpuer" voll zu und würde ebenfalls Turbo Pascal 6.0/7.0 empfehlen. Wichtig scheint mir jedoch, daß du ein System einsetzen solltest, daß die CPU nicht in den Protected Mode schaltet, weil dadurch nämlich die hardwarenahe Programmierung schwieriger wird. (Gerade wenn's um exaktes Timing geht.)

Turbo C++ 1.01 wäre auch noch eine Möglichkeit, wenn du bereits etwas C kannst. Damit kann man noch etwas geschickter auf die Hardware zugreifen als bei Pascal. Aber das ist natürlich auch Geschmacksache.

Guck doch mal in den Links-Bereich meiner Seite: http://www.bttr-software.de/ Die Bereiche "Assemblers, compilers" und "Programming information" sollten für dich interessant sein.

Wenn du Hilfe bei TP brauchst, dann kann ich dir dieses Forum empfehlen: http://www.webplain.de/foren/list.php?1 Aber bitte vorher unbedingt die FAQ dort lesen!
Benutzeravatar
Odin
DOS-Guru
Beiträge: 712
Registriert: Fr 3. Feb 2006, 16:52

Beitrag von Odin »

Also wenn du Hardwarenah programmieren willst, musst du wohl Assembler verwenden. Aber unterschätz die Sache nicht, Atmel oder PIC ist nicht gleich x86-CPU. Und auch unter Windows ist Assembler etwas anderes als unter DOS. Unter Windows kannst du die Windows-API benutzen, die dir zum Beispiel die Speicherverwaltung komplett abnimmt. Unter DOS wird das nix mit Speichermodell "FLAT", da muss schon "SMALL" oder ähnliches her...

Also ich kann es jedem, der ASM programmieren will nur anraten, erst einmal klein anzufangen, also "Hello World" und solche Sachen unter Windows. Da ist das um einiges einfacher. Dann sollte man sich erstmal mit dem Aufbau der CPU und des ganzen Rechners tiefgründig beschäftigen, damit man weiss, was man tut. Und dann kann man schrittweise weiter gehen. Man sollte immer eins bedenken: Mit Assembler kann mal viel machen, aber man kann mindestens genauso viel kaputt machen! Ein kleiner Zahlendreher kann da schon reichen!

Also Leute, lasst es euch von einem erfahrenen Programmierer gesagt sein: Assembler ist alles andere als ein Kinderspiel...

Gruss, Odin
"640k ought to be enough for anybody." - Bill Gates (1981)
"Windows 95 needs at least 8MB RAM." - Bill Gates (1996)
... also braucht niemand Windows 95 !!!
bttr

Beitrag von bttr »

Windows-API ist ja dann nicht mehr wirklich hardwarenah. Außerdem sind wir hier in einem DOS-Forum. Da könntest du auch gleich von der Programmierung der Marssonde sprechen, weil für "becki" ebenso belanglos wäre.

Der Vorteil von Turbo C/C++, Turbo Pascal, Power Basic usw. ist ja eben, das man erst mal mit einer Hochsprache ein Grundgerüst zimmern und dann auf Inline-Assembler oder mit einem Assembler erstellte Objektdateien ausweichen kann, wenn die internen Befehle nicht reichen sollten.
Benutzeravatar
Odin
DOS-Guru
Beiträge: 712
Registriert: Fr 3. Feb 2006, 16:52

Beitrag von Odin »

Also das mit der Windows-API war ja auch nur so gemeint, dass ein Anfänger damit besser zurecht kommt, weil er im Grunde keine Hardwarenähe braucht. Das sollte nicht heissen, das er seine Programme in Windows realisieren soll. Warum er das so machen soll habe ich doch weiter oben erklärt. Oder habe ich mich missverständlich ausgedrückt?

Und er kann und soll ja die Hochsprachen verwenden, aber wenn er auf die Ports zugreifen will, braucht er ASM (also den Inline Assembler). Und da ist ja das Problem, denn man hat unter DOS keine API, die einem alles vereinfacht. Er muss also gezwungenermassen "tierisch aufpassen", was er da tut. Der Assembler von Atmel ist anders, es gibt zawr einige Befehle, die gleich sind, aber die meisten sind unterschiedlich. Deshalb bin ich der Meinung, dass er sich erst einmal das benötigte Wissen aneignen sollte. Und auf den Parrallel/Serial/... kann er nur mit Assembler direkt zugreifen. Anders geht es nunmal nicht.
"640k ought to be enough for anybody." - Bill Gates (1981)
"Windows 95 needs at least 8MB RAM." - Bill Gates (1996)
... also braucht niemand Windows 95 !!!
becki

Beitrag von becki »

Ich werde mich mal in Sachen Turbo Pascal schlaumachen, das habe ich auch da. Als nächstes werde ich dann mal schaun, wie das mit dem Inline-Assembler ist. Mir schon klar, dass man da tierisch aufpassen muss ;) Mit Turbo Pascal wird das scheinbar nicht ganz so "fusselig" wie mit DJGPP
bttr

Beitrag von bttr »

1. Er hat doch aber gesagt, daß er hardwarenah programmieren will...

2. 'tschuldige, aber du erzählst Unsinn! Um auf Ports zuzugreifen gibt's in BASIC "OUT" und "INP", in Turbo Pascal "Port" und "PortW". C hat sowas ebenfalls im Angebot. Also dafür braucht er noch lange keinen Assembler.
becki

Beitrag von becki »

Das C das kann, weiß ich, nur dachte ich gerade, das geht da ganz ganz umständlich unter Dos. Aber wie gesagt, ich schau mir beide Möglichkeiten mal an.
Benutzeravatar
Odin
DOS-Guru
Beiträge: 712
Registriert: Fr 3. Feb 2006, 16:52

Beitrag von Odin »

zu 1.: Das ist wohl korrekt, das er das gesagt hat. Aber er hat auch gesagt, das er bereits Erfahrung in Assembler mit Atmel-Mikrocontrollern hat.
Das bedeutet wohl, dass er noch nie auf einer x86-Plattform in Assembler programmiert hat, oder? Oder könntest du von gleich auf jetzt mal eben so ein ASM-Programm hinzaubern, ohne überhaupt zu wissen, wie das zugrunde liegende System funktioniert bzw. die benötigten Befehle zu kennen? Ich gehe mal davon aus, das du das nicht kannst (ich konnte das vor 4 Jahren auch noch nicht :wink: ). Und das will ich ihm ja klar machen: man kann nicht mal eben so in ASM programmieren... so genug davon...

kommen wir zu 2.: Das würde ich nicht so sagen. Du hast zwar recht, aber becki hat auch gesagt, dass er seinen Mikrocontroller quasi "ersetzen" will. Er braucht also vollen Zugriff auf die Ports und zwar mit einer ordentlichen Geschwindigkeit. Und ausserdem ist das meiner Meinung nach auch eleganter - nur so am Rande. Also im Prinzip ist das auch von der vorgesehenen Verwendung abhängig. Wenn er nur eine Lampe an oder ausmachen will, dann gehts auch ohne. Um aber Daten zu übertragen, muss er Assembler nehmen, damit die Daten auch Sauber übertragen werden können... glaub mir das oder nicht....
"640k ought to be enough for anybody." - Bill Gates (1981)
"Windows 95 needs at least 8MB RAM." - Bill Gates (1996)
... also braucht niemand Windows 95 !!!
becki

Beitrag von becki »

zu 2. Ja das glaube ich dir, das da Assembler günstiger ist. und zu
1. Ich weiß so ca. wie mein Linux/BSD funktioniert, das wird unter DOS wahrscheinlich nur soweit anders sein, dass man nicht über Syscalla auf die Hardware zugreift sondern direkt auf die jeweiligen Adressen, oder? Naja, streitet euch nicht tot, ich lern mal beides an und schau, was mir mehr nutzt und das lerne ich dann.
Ja, unter Assembler kann man schön viel falsch machen, vor alem unter Dos, deswegen geh ich da langsam rann, nochmal danke für die Hinweise.
Benutzeravatar
Odin
DOS-Guru
Beiträge: 712
Registriert: Fr 3. Feb 2006, 16:52

Beitrag von Odin »

Vorsicht....

Ich glaube, du hast mich etwas falsch verstanden: zu wissen, wie das System funktioniert, damit meinte ich die Hardware und das gesamte Zusammenspiel und nicht das Betriebssystem.

Linux funktioniert ähnlich wie Windows, das haben die beiden nun einmal gemeinsam. Und diese Gemeinsamkeit besteht darin, das man eben nicht direkt auf die Hardware zugreift, sondern über die Syscalls bei Linux bzw. die API bei Windows darauf zugreift. Der Nachteil dabei ist halt, das man nur einen eingeschränkten Spielraum hat.

Unter DOS ist so etwas (noch) nicht vorhanden, und deshalb musst du dir deine Hardwarezugriffe selber basteln, was natürlich, wenn man das System nicht kennt, zu grossen Problemen führen kann.

Was das Lernen angeht: Wenn ich deinen letzten Satz richtig deute, willst du wissen, welche Sprache du lernen sollst, um so etwas zu realisieren, oder? Oder habe ich das jetzt falsch verstanden? Wenn du noch keine dieser Programmiersprachen beherrschst, dann kann ich dir nur raten erst einmal einfach anzufangen und erst später mit ASM anzufangen...

Gruss, Odin
"640k ought to be enough for anybody." - Bill Gates (1981)
"Windows 95 needs at least 8MB RAM." - Bill Gates (1996)
... also braucht niemand Windows 95 !!!
Antworten