Hallo,
ich möchte zur Einarbeitung in C die Programme ausprobieren, die im
openbook galileo aufgeführt sind. Also solche, wie
1
/* test.c */
2
#include<stdio.h>
3
intmain(void)
4
{
5
printf("Test\n");
6
return0;
7
}
Auf meinem Entwicklungsboard mit dem Mega 16 ist keine Tastatur und auch
kein Bildschirm direkt angeschlossen.
Meine Frage:
Kann ich ein solches Programm, wie oben aufgeführt, mit dem mega16 über
RS232 flashen und dann die Ergebnisse auf dem Monitor meines PC
kontrollieren? Ich bin mir nicht sicher, ob eine printf-Anweisung im
Flash meines mega16 den Bildschirm ansteuert.
Falls das nicht geht, dann möchte ich mir einen Freeware compiler
installieren, mit dem ich C-Programme auf meinem Rechner üben kann.
Kann jemand einen geeigneten Freeware-compiler empfehlen?
Udo
Hmm, ist in dem "openbook galileo" kein Hinweis drin, welcher Compiler
zum Ausprobieren der Beispiele benutzt werden kann?
Zu C-Programmen, die auf dem Mikrocontroller laufen:
Ich benutze für die AVRs den AVR GCC in der Version für Windows,
also den WinAVR.
Deine Idee das printf auf dem Mikrocontroller über RS232 an den
Windows-Rechner weiterzuleiten und auf dessen Monitor darzustellen ist
ein üblicher Weg. es gibt da ein paar Feinheiten, wie das genau gemacht
wird. Die sind aber alle nachzulesen z.B. im AVR-GCC-Tutorial und
zur Not kann man bei dann offenen Fragen immer noch hier nachfragen.
Zum Erlernen von C macht man es sich aber unnötig schwer, wenn man das
auf einem Mikrocontroller macht: Man hat wenige Tools um den
Programmablauf zu inspizieren und ist an zeitaufwändige Prozeduren
gebunden (Flashen, Hardwaredebugger einrichten...).
Deshalb ist deine zweite Idee, auf dem Windows-Rechner C Programme für
Windows zu schreiben, auch schlau.
Zu C-Programmen, die auf dem Windows-Rechner laufen:
Es gibt sehr viele Freeware C-Compiler
(http://www.thefreecountry.com/compilers/cpp.shtml).
Für mich macht es Sinn ebenfalls einen GCC unter Windows zu benutzen,
wenn ich später einen Mikrocontroller mit GCC programmiere. Allerdings
sind einfache Konsolenprogramme (printf...) eigentlich mit jedem
beliebigen C Compiler möglich.
Es gibt da einige Pakete, in denen der GCC drin ist. Ich benutze MinGW
(http://www.mingw.org/) in Verbindung mit MSYS.
MinGW/MSYS ist mehr als ein reiner C Compiler, weil noch etliche
Zusatztools dabei sind und eine Linuxähnliche Umgebung eingerichtet
wird.
Noch näher an Linux würde man unter Windows mit Cygwin kommen, läuft
allerdings auf meinem Rechner nicht.
Wenn nur der C Compiler GCC aus dem MinGW benutzt werden soll und eine
grafische Bedienoberfläche (IDE) drumherum, dann ist *Dev-C++* eine
Option (http://www.bloodshed.net/dev/index.html).
Eine andere grafische Oberfläche ist das bereits erwähnte Code::Blocks
(http://www.codeblocks.org/).
Eine andere grafische Oberfläche ist Eclipse. Das läuft auf meinem
Rechner aber auch nicht.
> Noch näher an Linux würde man unter Windows mit Cygwin kommen, läuft> allerdings auf meinem Rechner nicht.> Eine andere grafische Oberfläche ist Eclipse. Das läuft auf meinem> Rechner aber auch nicht.
Nur um den Eindruck zu korrigieren, diese Programme hätten Probleme.
Ich weiss nicht, welchen Rechner Du hast, und welche Windows Version,
aber beide Programme laufen bei mir schon seit Jahren.
EDIT : und gücklich und zufrieden bin ich auch noch damit ...
Klaus, wenn du das Problem auf meinem Rechner korrigieren kannst, gebe
ich dir einen aus ;-)
Cygwin hatte ich lange Zeit am Laufen und war super zufrieden damit,
dann ging es "eines Tages" nicht mehr. Und seit dem hatte ich es auch
nie mehr zum Laufen bekommen. Selbst durch Neuinstallation auf einem
neuen, alten OS nicht.
Aber wenn mein Text den von mir ungewollten (!) Eindruck erweckt, dass
die genannten Programme von Haus aus instabil sind, ist es gut, dass du
das durch deine Erfahrungen relativierst
Nein, ich erzähle nicht, welche Rechner/OS ich noch einsetze, ich
schäme mich!
Hallo Leute,
Danke zunächst für eure Anregungen.
Ich habe mal versucht das kleine Programm dort oben zu flashen.
1
/* test.c */
2
3
#include<avr/io.h>
4
intmain(void)
5
{
6
printf("test.c\n");
7
return0;
8
}
Habe schon erwartet, dass der avr-gcc compiler meckert. Ich weiß
nämlich nicht, welche #include ??? Datei man noch angeben muss, damit
mein Mega16 das Wort "Test" auf meinen Bildschirm bringt. Im Tutorial
konnte ich das nicht finden, oder übersehe das, wie man printf ins
Programm einbindet.
Udo
Schau Dir mal ein Programm hier in der Codesammlung an, dann bekommst Du
einen guten Eindruck wie komplex ein AVR Programm sein kann/ist.
Und angefangen wird mit dem AVR Tutorial (Oben links im Menü auf AVR
klicken) hier auf der Seite, gelle ? :-)
1udo1 wrote:
> Im Tutorial> konnte ich das nicht finden, oder übersehe das, wie man printf ins> Programm einbindet.
Ja du übersiehst da was.
Die Nutzung von printf steht im Abschnitt und das 2. Beispiel dort
"ist's"
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Nutzung_von_printf
Achte aber mal auf den Scrollbalken an der Seite. Der Scrollbalken ist
ca. bei 75%, d.h. 3/4 des kompletten Tutorials sind vorher.
Nicht alles davon brauchst du für ein printf, aber geh mal davon aus,
dass das Tutorial hierarchisch aufgebaut ist...
Mindestens den Teil zur Initialisierung der seriellen Schnittstelle
(UART) des µC und deren Low-Level-Ansteuerroutinen musst du kennen.
Wenn du C auf dem PC lernen möchtest dann wäre OpenWatcom eine der
Lösungen. Die Doku ist gut, alle Bibliotheksfunktionen sind schön in
PDFs beschrieben. OpenWatcom ist kostenlos.
>Ich habe mal versucht das kleine Programm dort oben zu flashen.
/* test.c */
#include <avr/io.h>
int main (void)
{
printf("test.c\n");
return 0;
}
>Habe schon erwartet, dass der avr-gcc compiler meckert. Ich weiß>nämlich nicht, welche #include ??? Datei man noch angeben muss, damit>mein Mega16 das Wort "Test" auf meinen Bildschirm bringt. Im Tutorial>konnte ich das nicht finden, oder übersehe das, wie man printf ins>Programm einbindet.
Da scheint mir einiges schief zu laufen. Wenn Du dieses Programm
tatsaechlich compiliert bekommst und dann in den Mega16 flashst, woher
soll der Mega16 wissen, dass die Ausgabe auf den PC soll? Woher soll der
PC - gesetzt den Fall, der Mega schickt es an die RS232 (was er auch
nicht weiss)- wissen, was er mit den an der RS232 ankommenden Zeichen
machen soll?
Damit das funktioniert, muss das Programm auf dem PC ausgefuehrt werden.
Dazu muss es natuerlich fuer diesen compiliert werden.
Gast3
>Kann jemand einen geeigneten Freeware-compiler empfehlen?
das wörtchen freeware outet dich aus windows user ;)
wenn dagegen jemand von opensource redet, dann outet er sich
als *nix user.
codeblock ist eine IDE, ist nix compiler
auch wenn die IDEs vielleicht oft einen Compiler mitaufnehmen.
ansonsten, wie du richtig erkannst hast, wird mit einfachen printf
wahrscheinlich nicht laufen. ich weiss jetzt gar nicht, ob avrgcc
printf so implementiert, dass es auf uart hinausschreibt.
ausserdem muss auf der pc seite zb hterm laufen. google mal nach hterm.
in die andere richtung ist es noch umständlicher, wenn man
mit scanf dir werte vom pc einlesen möchte. aber machbar ist alles :)
printf auf einem AVR ist eine Frau ohne Unterleib -- sozusagen.
Du kannst nicht per printf auf dein PC-Terminal druchen, jedenfalls
nicht so einfach. Wenn, dann musst du über (f)printf in ein eigenen FILE
schreiben, das wiederum die ausgzugebenden Zeichen über einen
Callback-Mechanismus auf eine Schnittstelle ausgibt.
Üblich ist die serielle Schnittstelle, also
Weil das zum Anfangen die Overdose ist und du auch erst am C-Lernen
bist, kannst Du Programme, die für den AVR geschrieben sind
-- mit einem AVR-Simulator wie in AVR-Studio durchsteppen und angucken,
was passiert, wie sich die Register und Stasi ändern. Dazu müssen die
Programme für AVR übersetzt worden sein.
-- mit einem Host-Compiler wie gcc für deinen PC übersetzen und dort
laufen lassen. gcc für deinen PC erhält du zB mit Code::Blocks anbei.
C::B brauchst du garnicht zu verwenden, aber es bringt einen MinGW mit
gcc mit. Diesen kannst du ebenfalls von Kommandozeile aus verwenden wie
den avr-gcc und auch die gleichen Optionen und Schalter verwenden.
Ausnahme sind die maschinenabhängigen Schalter, die mit -m anfangen.
Natürlich muss man die Hardware-Abhängigkeiten in der Quelle irgendwie
rausfaktorisieren; was soll ein PC mit einer avr/io.h anfangen?
Wie das aussehen kann ist zB zu sehen in meiner PC-Auskopplung von
Beitrag "Re: AVR: Snake! ------------O"
Für den PC geschrieben ist nur die pc-snake.c. Alles andere sind
Quellen, die auch für AVR funktionieren. Allerdings ist bei pc-snake
nicht das ganze AVR-Projekt dabei, sondern nur das, was für den PC
gebraucht wird.
Wie man die Hardware-Abhängigkeit mit ein paar Zeilen los wird ist zu
sehen im Kopf von snake.c.
Stefan B. wrote:
> Nein, ich erzähle nicht, welche Rechner/OS ich noch einsetze, ich> schäme mich!
Oh, erzähle es doch bitte, es würde mich sehr interessieren; ich denke
nicht, daß man sich für irgendein Equipment schämen muß. Mein
Arbeitsrechner ist ein 1600-MHz-Pentium IV unter Win2000, und ich
arbeite überdies jeden Tag mit einem Pentium 133 MHz unter MS-DOS 6.22
und mit Wordstar - das ist der stabilste PC, den ich besitze und er ist
15 Jahre alt.
> Falls das nicht geht, dann möchte ich mir einen Freeware compiler> installieren, mit dem ich C-Programme auf meinem Rechner üben kann.http://www.smorgasbordet.com/pellesc/