Mit was hardwarenah Programmieren?
Mit was hardwarenah Programmieren?
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
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
- CptKlotz
- Admin a.D.
- Beiträge: 2405
- Registriert: Mo 7. Mär 2005, 23:36
- Wohnort: Dorsten
- Kontaktdaten:
@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
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)
- ChrisR3tro
- Administrator
- Beiträge: 1730
- Registriert: Mo 7. Mär 2005, 23:33
- Wohnort: NRW
- Kontaktdaten:
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
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
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.
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.
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.
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.
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!
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!
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
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 !!!
"Windows 95 needs at least 8MB RAM." - Bill Gates (1996)
... also braucht niemand Windows 95 !!!
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.
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.
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.
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 !!!
"Windows 95 needs at least 8MB RAM." - Bill Gates (1996)
... also braucht niemand Windows 95 !!!
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
). 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....
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

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 !!!
"Windows 95 needs at least 8MB RAM." - Bill Gates (1996)
... also braucht niemand Windows 95 !!!
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.
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.
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
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 !!!
"Windows 95 needs at least 8MB RAM." - Bill Gates (1996)
... also braucht niemand Windows 95 !!!