Hallo zusammen,
meine Frage steht in der Überschrift.
C-Programme kann ich zwar auch auf dem µC-Board testen, aber da habe ich
immer eine Strippe mit einem Klotz dran am Notebook baumeln.
Immer möchte ich das nicht, und es wäre nett, wenn ich kleine Funktionen
auch mal nur rein am Notebook teste, meinetwegen kann das auch was ganz
simples altes sein, was noch in der virtuellen DOS-Maschine DOSbox 0.74
läuft.
Allerdings bin ich ein Hobbyist mit knappem Budget, suche da was in
Richtung Freeware, wie z.B. SDCC von Sourceforge es für µC ist. Rein
fürs Hobby nur.
Manchmal möchte ich kleine Funktionen testen, wie z.B. eine Binär- zu
BCD-Wandlung, oder Worte in einem Text zählen, so im Stil wie Übungen
EDV1 in der Hochschule mal waren.
Irgendwo hatte ich vor vielen Jahren mal Turbo C, das war gut genug,
ging aber verloren.
C++ und Fensterprogrammierung muß es definitiv nicht sein.
Meine Betriebssysteme sind Vista und Windows7.
15:42 schrieb:> http://bellard.org/tcc/> Schade das er ihn nicht mehr weiterentwickelt.
Fabrice ist zwar ein begnadeter Programmierer, aber warum ist es schade,
dass er sich aus der Weiterentwicklung zurückgezogen hat?
http://repo.or.cz/w/tinycc.git
Ich selbst empfehle (in diesem Fall) MinGW. Bei TinyCC wird für meinen
Geschmack noch viel zu oft falscher Code generiert. Sein einziger
Vorteil ist es klein und schnell zu sein, was in Zeiten von TB und GHz
nicht mehr viel wert ist.
heinz (Gast) schrieb:
> http://www.cs.virginia.edu/~lcc-win32/> Nur frei für nicht kommerziel
Der lcc-win32 hat zwei Probleme, a) die Virenscanner mögen ihn nicht ;)
und b) die wedit Gui ist einfach nur schaurig.
Die Pelles C IDE hingegen ist wesentlich besser gestaltet und einfacher
zu bedienen.
Ach ja, ... Jetzt kommen wir wieder zu dem Thema
"Will ich einen guten Compiler oder ein Rundum-sorglos-Paket?"
Seit ich damals von MSVC++ 1.0 auf DJGPP 1.xx umgestiegen bin, benutze
ich zum Entwickeln keine IDE mehr. Ein guter Editor mit
Syntax-Highlighting und eine Shell reichen. Und als Debugger erfüllt GDB
auf allen Plattformen seinen Dienst.
Stephan B. (matrixstorm) schrieb:
> Ein Browser (+Internet) reicht:> * mit Linux spielen: http://bellard.org/jslinux/> * Mikrocontroller :> http://vps.matrixstorm.com:1114/bideavr/simple.html>> * universelle Browser IDE: https://c9.io/
Ganz nette Spielerei, aber die Frage lautete
" Was brauche ich, um am PC etwas C zu programmieren? "
Also einen Browser in erster Linie ganz bestimmt nicht.
;-)
Häsch Define schrieb:> Manchmal möchte ich kleine Funktionen testen, wie z.B. eine Binär- zu> BCD-Wandlung, oder Worte in einem Text zählen, so im Stil wie Übungen> EDV1 in der Hochschule mal waren.> C++ und Fensterprogrammierung muß es definitiv nicht sein.
Turbo-C von Borland. Ist kostenlos und läuft in der DOS-Box.
> Turbo-C von Borland. Ist kostenlos und läuft in der DOS-Box.
Wenn sie wenigstens die letzte veröffentlichte Version freigegeben
hätten und nicht die uralt 2er.
Speichersegmentierung der 16-bit Win3.x Zeit will man sich auch nicht
mehr unbedingt antun.
Visualdingens schrieb:> Wenn sie wenigstens die letzte veröffentlichte Version freigegeben> hätten und nicht die uralt 2er.
Was willst du denn?
Der TO hat um eine (schnelle IDE) gebeten, um kleine C Programmfragmente
zu testen.
Im übrigen kann man auch Turbo-C "woanders" finden. Jemandem, dem das
didaktische Ziel wichtig ist, sucht auch "woanders".
> Der TO hat um eine (schnelle IDE) gebeten, um kleine C Programmfragmente> zu testen.
Schnell und DOS-Emulation geht nicht zusammen. Außerdem bleibt das
Problem der Speichersegmentierung und des alten 16-bit Codes.
> Im übrigen kann man auch Turbo-C "woanders" finden. Jemandem, dem das> didaktische Ziel wichtig ist, sucht auch "woanders".
Raubkopie?
Visualdingens schrieb:> Speichersegmentierung der 16-bit Win3.x Zeit will man sich auch nicht> mehr unbedingt antun.
Da der TE den C-Compiler nutzen möchte, um irgendwelche Berechnungen und
Algorithmen für Mikrocontroller vorher auf dem PC zu testen, ist es
vorteilhaft, wenn die Größe von int auf beiden Plattformen dieselbe
ist.
Arbeitet er also vorwiegend mit 8-Bit-Controllern (AVR, 8051, PIC u.ä.)
mit 16-Bit-Ints, sollte der Compiler auf dem PC idealerweise ebenfalls
diese Int-Größe verwenden. Leider ist die Int-Größe bei den meisten
PC-Compilern fest vorgegeben (32 Bit bei Linux und Windows, 16 Bit bei
DOS). Für 8-Bit-µC-Kompatibilität sind diese alten DOS-Compiler also
ganz praktisch.
Oder kennt jemand einen C-Compiler, der auf 32- oder 64-Bit-Windows oder
-Linux direkt (also ohne DOS-Box) lauffähigen Code generiert, bei dem
man aber die Int-Größe aber optional auf 16 Bit einstellen kann?
So etwas könnte ich nämlich ebenfalls manchmal gut gebrauchen :)
Visualdingens schrieb:> Außerdem bleibt das> Problem der Speichersegmentierung und des alten 16-bit Codes.
Wann hast du das jemals benötigt?
Wahrscheinlich nicht, denn dann wüßtest du um diverse 32bit-Extender -
zumindestens dann, wenn du Protected-Mode Programme unter DOS
ausprobieren wolltest.
Yalu X. schrieb:> Oder kennt jemand einen C-Compiler, der auf 32- oder 64-Bit-Windows oder> -Linux direkt (also ohne DOS-Box) lauffähigen Code generiert, bei dem> man aber die Int-Größe aber optional auf 16 Bit einstellen kann?
Also wenn -std=c99 beim gcc angegeben wird sollten uint8_t und uint16_t
funktionieren.
Ansonsten muß man halt selber deklarieren:
1
typedef unsigned char uint8_t;
Universell einen Header definieren der auf dem PC eingebunden wird.
Nimm Codeblocks. Ist eine IDE die gleich einen guten C und C++ Compiler
dabei hat.
Finger weg von diversen Microsoft Produkten wie Visual Studio, da deren
Compilerqualität leider zu wünschen übrig lässt.
Und zum oben genannten "Problem" mit unterschiedlich großen
Ganzzahltypen: wenn es wirklich auf die exakte Größe ankommt, dann nimmt
man einfach uint8_t, uint16_t, ... damit ist das Problem auch schon
wieder gelöst!
D. V. (mazze69) schrieb:
Visualdingens schrieb:
>> Außerdem bleibt das>> Problem der Speichersegmentierung und des alten 16-bit Codes.> Wann hast du das jemals benötigt?
Das "benötigt" man nicht. Das ist vorhanden.
> Wahrscheinlich nicht, denn dann wüßtest du um diverse 32bit-Extender -> zumindestens dann, wenn du Protected-Mode Programme unter DOS> ausprobieren wolltest.
Ja klar, jetzt auch noch einen DOS-Extender einsetzen. Dümmer geht's
nimmer.
> Und zum oben genannten "Problem" mit unterschiedlich großen> Ganzzahltypen: wenn es wirklich auf die exakte Größe ankommt, dann nimmt> man einfach uint8_t, uint16_t, ... damit ist das Problem auch schon> wieder gelöst!
Eben!
Aber wegen mir kann der TE sich auch ein altes TC herunterladen.
Bitte schön:
http://www.retroarchive.org/dos/lang/
Bediene er sich!
Visualdingens schrieb:> Ja klar, jetzt auch noch einen DOS-Extender einsetzen. Dümmer geht's> nimmer.
Bisher haben nur dumme Progger das Prob so bewältigt. Hast du eine
bessere Idee?
Dann nur raus damit.
kopfkratzer schrieb:> Yalu X. schrieb:>> Oder kennt jemand einen C-Compiler, der auf 32- oder 64-Bit-Windows oder>> -Linux direkt (also ohne DOS-Box) lauffähigen Code generiert, bei dem>> man aber die Int-Größe aber optional auf 16 Bit einstellen kann?>> Also wenn -std=c99 beim gcc angegeben wird sollten uint8_t und uint16_t> funktionieren.ccccccccccccccccccccccc schrieb:> Und zum oben genannten "Problem" mit unterschiedlich großen> Ganzzahltypen: wenn es wirklich auf die exakte Größe ankommt, dann nimmt> man einfach uint8_t, uint16_t, ... damit ist das Problem auch schon> wieder gelöst!
Das ist nicht das, was ich meine. Es geht mir darum, dass die Typen
"int" und "unsigned int", also die Typen, die i.Allg. implizit für
Zwischenergebnisse in Integer-Berechnungen verwendet werden, ebenfalls
nur 16 Bit groß sind.
Einfaches Beispiel:
1
uint16_tx=1000*1000/100;
Auf einem PC ist erwartungsgemäß x = 10000, auf einem AVR aber x = 169,
da das Zwischenergebnis 1000 * 1000 = 1000000 nicht in 16 Bit passt und
abgeschnitten wird. Um solche Überlauffehler in AVR-Programmen schon
beim Test auf dem PC aufzudecken, möchte ich (ind evtl. auch der TE),
dass auch dort Integer-Berechnungen mit nur 16 Bit ausgeführt werden.
Man kann sich zwar damit behelfen, dass man zu Testzwecken vor jeden
Teilausdruck einen uint16_t-Cast schreibt, das ist aber mühsam, macht
den Code unleserlich, und meistens vergisst man den Cast dann doch an
irgendeiner Stelle.
Hab nochmal nachgesehen, das sollte mit allen C Compilern gehen die
stdint.h kennen: https://en.wikipedia.org/wiki/Stdint.h
Ist in C99 deklariert daher klappt's beim gcc auch mit der C99 option,
oder man bindet halt immer explizit <stdint.h> ein.
> Bisher haben nur dumme Progger das Prob so bewältigt.
Dafür gab es auch Gründe. Man wollte schließlich endlich die verdammte
Speichersegmentierung der Win3x Zeit überwinden. Hat dein Windows die
etwa noch? Meines nicht!
> Hast du eine> bessere Idee?> Dann nur raus damit.
Aber sicher, einfach einen der (vernünftigen) Vorschläge hier folgen,
heißt eine aktuelle Entwicklungsumgebung einsetzen. Das veruracht
weniger Kopfschmerzen.
An alter DOS-Box Software kann man sich gelegentlich in seinen
sentimentalen 5 Minuten erfreuen. Das reicht dann auch.
Yalu X. (yalu) (Moderator) schrieb:
> Es geht mir darum, dass die Typen> "int" und "unsigned int", also die Typen, die i.Allg. implizit für> Zwischenergebnisse in Integer-Berechnungen verwendet werden, ebenfalls> nur 16 Bit groß sind.> Einfaches Beispiel:> uint16_t x = 1000 * 1000 / 100;> Auf einem PC ist erwartungsgemäß x = 10000, auf einem AVR aber x = 169,
Jetzt auch?
uint16_t x = 1000 * (1000 / 100);
> da das Zwischenergebnis 1000 * 1000 = 1000000 nicht in 16 Bit passt und> abgeschnitten wird. Um solche Überlauffehler in AVR-Programmen schon> beim Test auf dem PC aufzudecken, möchte ich (ind evtl. auch der TE),> dass auch dort Integer-Berechnungen mit nur 16 Bit ausgeführt werden.
Wie wäre es da mit etwas modernerem wie OpenWatcom?
http://www.openwatcom.org/index.php/Open_Watcom_FAQ
" What does the Open Watcom compiler give us that we don't already get
with other free compilers?
The Open Watcom compiler has a number of advantages over other free
compilers, such as full support for 16-bit DOS, Windows, and embedded
x86 development, powerful commercial level debugger with full remote
debugging capabilities (serial, parallel, NetBIOS, TCP/IP etc). The Open
Watcom C/C++ compiler is also the only freely available compiler for
16-bit Windows and OS/2 device driver development. Finally, Open Watcom
is a comprehensive package, easy to install and use, with full range of
tools and documentation. "
Visualdingens schrieb:> Aber sicher, einfach einen der (vernünftigen) Vorschläge hier folgen,> heißt eine aktuelle Entwicklungsumgebung einsetzen. Das veruracht> weniger Kopfschmerzen.
Eine Entwicklungsumgebung kann aber die Segmentierung (Versäumniss der
Intel-Fuzzies) nicht aufheben.
Im Prinzip bestehen aktuelle intel-CPUs aus Einzel-Verwaltern von
jeweils 64kB (im Gegensatz zu den 68xxxeen).
Man hat also auch heute noch OPAs(Grandpas), deren Krückstöcke über
etliche 64kB-Segmente verfügen. Weil dieses so ist, hat MS den
Hardware-Layer eingeführt, um unabhängig gegenüber der Hardware zu sein.
So läuft ein Windows sowohl auf echten als auch auf
"geschalteten"(Segmenten) 32bit Systemen. Ab dem 286 hat intel Register
eingeführt, die das Umschalten via Programmcode erleichtert. Das ändert
aber nichts daran, dass es keinen linear adressierbaren Speicherbereich
gibt, so wie auf 68000ern.
Motorola wäre eindeutig die bessere Wahl gewesen.
> Motorola wäre eindeutig die bessere Wahl gewesen.
Damals (198x/199x) ja, heute nicht mehr. Die Opcodes des MC68000 sind
dermaßen lang, dass allein die vielen Speicherzugriffe den Prozessor
heute alt aussehen lassen. So richtig unsinnig war dann der 68008 mit
8bit Speicherinterface. Schon vor der Jahrtausendwende kam der Abgesang
auf die ganze MC68xxx Serie wegen Ineffizienz.
Visualdingens schrieb:> Yalu X. (yalu) (Moderator) schrieb:>> Einfaches Beispiel:>>> uint16_t x = 1000 * 1000 / 100;>>> Auf einem PC ist erwartungsgemäß x = 10000, auf einem AVR aber x = 169,>> Jetzt auch?>> uint16_t x = 1000 * (1000 / 100);
Das ist aber ein anderer Ausdruck. Und wenn man die Zahlen etwas
verändert (oder Variablen nimmt) dann geht ds Umformulieren auch nicht:
uint16_t x = 1000 * 1000 / 10000;
Vielen Dank mal an alle, da kam ja einiges zusammen, was ich mir in
Ruhe erst mal anschaue.
Also es sollte wirklich was ganz simples sein, z.B. in der Art von Turbo
C 2.0, was ich vor vielen Jahren mal im Hochschullabor für C-Übungen
hatte. Nicht viel initialisieren, einfach direkt mit seiner Übung los
legen. Über die Tastatur Zahlen eingeben können, und am Programmende
eine Bildschirmausgabe.
Von PC-Programmierung habe ich ohnehin keine Ahnung, und das ist auch
nicht mein Arbeitsgebiet.
Visual Studio scheint mir etwas fett, erschrak mich schon mal über die
Downloadgröße, die in Richtung halbes GB geht. Das geht mit dem
Mobilstick kaum. Ein Abbruch beim Download, und meine Monatsflat ist
schon verbraucht. So viel ist es mir wiederum nicht wert.
Als Editor mit Syntax-Highlighting habe ich schon Geany, was mir für µC
sehr gefällt. Also, einfach ein kleines Progrämmchen, was sogar nur aus
einem einzelnen C-File besteht, mal über Kommandozeile compilieren, und
laufen lassen. Meinetwegen in DOSbox, habe da noch weitere
Uraltprogramme wie den Intel ASM und Simulator für 8051 von 1991. Das
tuts doch hervorragend.
Ansonsten darf aber gerne unbehelligt weiter über die Randthemen
diskutiert werden. Ich wollte das jetzt keinesfalls unterbrechen.
Yalu X. schrieb:> Um solche Überlauffehler in AVR-Programmen schon> beim Test auf dem PC aufzudecken, möchte ich (ind evtl. auch der TE),> dass auch dort Integer-Berechnungen mit nur 16 Bit ausgeführt werden.
Man könnte sich mit etwas extra Tipparbeit (siehe Zeilen 22,23) so
behelfen: http://ideone.com/3kQgS1
So kann man angeben in welchen Datentyp jedes Zwischenergebnis gecastet
werden soll (wie eben zB uint16_t), und so kann man das auch nicht
vergessen sofern man alle Integer-Literale durch N16(...) o.ä.
ersetzt. So kann man 16bit-Rechnung auf jeder Plattform erzwingen.
Ausgabe des Programms auf x86:
1
16bit Rechnung: 169
2
32bit Rechnung: 10000
3
Diese Plattform hat 32bit "int", 32bit "long", 32bit Adressraum.
Auf x86_64:
1
16bit Rechnung: 169
2
32bit Rechnung: 10000
3
Diese Plattform hat 32bit "int", 64bit "long", 64bit Adressraum.
kopfkratzer schrieb:> Komisch das bei allen immer die Suche im WWW kaputt ist:
Hier noch mal was für die "Gurgle-Kaputt-Fraktion" zum Nachdenken:
Frage an einem fremden Ort an Einheimische:
Gibt es hier einen guten Italiener?
Antwort:
Stadtplan und Telefonbuch kaputt?
Häsch Define schrieb:> Also es sollte wirklich was ganz simples sein, z.B. in der Art von Turbo
Kannst ja mal schauen ob das stimmt was in wikipedia geschrieben steht;
en.wikipedia.org/wiki/Borland_Turbo_C#Freeware_release
In 2006, Borland's successor, Embarcadero Technologies, re-released
Turbo C and the MS-DOS versions of the Turbo C++ compilers as
freeware.[5]
@REST kleine&etwas :D ...
> Manchmal möchte ich kleine Funktionen ...> am PC etwas C ...
Häsch Define schrieb:> kopfkratzer schrieb:>> Komisch das bei allen immer die Suche im WWW kaputt ist:>> Hier noch mal was für die "Gurgle-Kaputt-Fraktion" zum Nachdenken:>> Frage an einem fremden Ort an Einheimische:> Gibt es hier einen guten Italiener?> Antwort:> Stadtplan und Telefonbuch kaputt?
Es macht allerdings einen Unterschied ob man neu in einem Ort ist und
keinen Stadtplan und Telefonbuch dabei hat oder im WWW nachfragt was man
im WWW genauso schnell suchen und finden kann !
War schneller gefunden als meinen Antwort getippt !
kopfkratzer schrieb:> Es macht allerdings einen Unterschied ob man neu in einem Ort ist und> keinen Stadtplan und Telefonbuch dabei hat oder im WWW nachfragt was man> im WWW genauso schnell suchen und finden kann !
Also ich bin der Fremde nur mit Stadtplan und Telefonbuch, der aber
unter 10 aufgeführten Italienern nicht weiß, welcher wirklich ein guter
Tipp ist.
> War schneller gefunden als meinen Antwort getippt !
Immerhin nanntest du drei Links, da ist einiges verziehen. ;-)
Häsch Define schrieb:> kopfkratzer schrieb:>> Es macht allerdings einen Unterschied ob man neu in einem Ort ist und>> keinen Stadtplan und Telefonbuch dabei hat oder im WWW nachfragt was man>> im WWW genauso schnell suchen und finden kann !>> Also ich bin der Fremde nur mit Stadtplan und Telefonbuch, der aber> unter 10 aufgeführten Italienern nicht weiß, welcher wirklich ein guter> Tipp ist.>>> War schneller gefunden als meinen Antwort getippt !>> Immerhin nanntest du drei Links, da ist einiges verziehen. ;-)
Und wenn Du die Links überprüft hättest würdest Du wissen das da
jedesmal eine Liste mit mehreren Vorschlägen für Freeware-C Compiler
aufgeführt sind.
Mal abgesehen davon gibt es immer verschiedene Geschmäcker, ob das nun
das Restaurant betrifft oder die IDE oder Kommandozeile oder oder oder.
Daher kann man niemals eine universelle Antwort geben, derjenige der es
machen will muß seinen eigenen Vorlieben folgen sonst knallt das idR.
Von daher kann man nur soviel wie möglich aufzeigen, ansehen und für
sich selbst bewerten muß das derjenige den es betrifft.
Wenn jemand mit z.B. MS-Word gut umgehen kann und sich da auch schon
Makros geschrieben hat die ihm Dinge erleichtern wird derjenige wohl
kaum auf LaTex umsteigen nur weil das die mächtigere Lösung für
Publikationen ist.
Yalu X. (yalu) (Moderator) schrieb:
> Da der TE den C-Compiler nutzen möchte, um irgendwelche Berechnungen und> Algorithmen für Mikrocontroller vorher auf dem PC zu testen, ist es> vorteilhaft, wenn die Größe von int auf beiden Plattformen dieselbe> ist.
Ich habe nur nicht den Eindruck, dass dies beim TE oberste Priorität
ist. Ihm scheint es vielmehr einfach darum zu gehen, möglichst wenig dl
zu müssen.