Forum: Compiler & IDEs Umsteigen von Bascom auf C


von Christian M. (mcmeyer)


Lesenswert?

Hall


Erst mal mein Ziel:
Ich möchte in zukunft meine MCUs mit C programieren können.

Zu meinem bisherigen Stand:
meine ersten Erfahrungen mit der Programmiererei habe ich noch mit 
Qbasic unter win98 gesammelt später dann Free-Basic.
Im laufe meiner Ausbildung bin ich dan mal mit Bascom in berührung 
gekommen und bin auch seht schnell damit klar gekommen.
In den letzten Wochen haben wir dann in dr Ausbildung eien intensiven
Assembler Kurs auf basis eines 80C537 gemacht (mit Betriebssystem 
Wickenhäuser)

nun zum eigentlichen Problem:
bisher war ich es gewohnt nach dem öffnen einer Entwicklungsumgebun 
(Bascom) einen Eingabebereich zu haben und nach tippen des Proramms 
musst ich nur noch F7 drücken und schon kam ein fertiges .hex file 
heraus.
nun würde ich gerne wissen wie das mit c geht.
Woher kriege ich standard Bibliotehken was ist das überhaupt und wo 
müssen die hin??
Was sind Makefils und brauche ich die überhaupt?? Fragen über fragen die 
in kaum einem von mir gelesenen Tutorial behandelt werden weil diese 
sich ja meistens nur um die Sprache selbst drehen.

Als Programmierumgebung würde ich gerne das AVR Studio nutzen da es ja 
auch die Möglichkeit des Debugging bietet (habe zum Nikolaus einen AVR 
Dragon gekriegt :-))

von Stefan B. (stefan) Benutzerseite


Lesenswert?

1. WinAVR installieren

WinAVR enthält die komplette Toolchain für die C Programmierung 
von AVR Targets auf dem Windows Host. Die Toolchain umfasst in der 
Hauptsache den Compiler GCC, verschiedene binutils-Tools zum Umgang mit 
Dateien, die Include-Dateien und Library-Dateien, ein Mfile Tool zum 
Umgang mit Makefiles. Sowie eine Entwicklungsumgebung (IDE) in Form von 
Programmers Notepad. Und Avrdude zum Übertragen von HEX-Dateien 
zwischen PC und AVR sowie zur Manipulation der AVR Fuses. Und last 
but not least diverse Dokumentationen.

Ab hier kann man bereits AVRs mit C programmieren.

Ein typischer Ablauf sieht so aus:
a/ Makefile erstellen mit MFile
b/ Programm schreiben mit PN
c/ Programm compilieren aus PN heraus
d/ erfolgreich compiliertes Programm mit Avrdude zum AVR übertragen
e/ Programm auf dem AVR testen
f/ nicht erfolgreiches Programm überarbeiten - zurück zu b/
g( freuen ;-)

Zusätzliche Libraries die über den Umfang von Standard-C in Form der 
avr-libc hinausgehen, muss man sich im Internet suchen. Gängige 
Erweiterungslibraries (Interrupt-UART, Ringpuffer, LCD,...) stammen von 
Peter Fleury. Eine wertvolle  Quelle ist auch unsere Codesammlung.

2. AVR Studio installieren

GCC aus WinAVR wird erkannt und eingebunden. AVR Studio wird als 
Alternative IDE benutzt, die eigene Makefiles automatisch erzeugt. 
Zusätzlich kann AVR Studio auch Programme simulieren und - mit Hilfe 
eines AVR Debugadapters - auch in-circuit debuggen.

Ein typischer Ablauf sieht so aus:
a/ Neues Projekt erstellen mit AVR Studio
b/ Programm schreiben mit AVR Studio
c/ Programm compilieren aus AVR Studio heraus
d/ erfolgreich compiliertes Programm mit AVR Studio simulieren
e/ erfolgreich simuliertes Programm mit AVR Studio (wenn ISP-Adapter 
direkt unterstützt wird) oder Avrdude (wenn ISP-Adapter nicht direkt 
unterstützt wird) zum AVR übertragen
f/ Programm auf dem AVR testen, wenn In-circuit Debugger vorhanden ist 
auch mit dessen Hilfe aus AVR Studio heraus debuggen
g/ nicht erfolgreiches Programm überarbeiten - zurück zu b/
h/ freuen ;-)

ADD: Buchtipp für den allgemeinen C-Einstieg

C von A bis Z
Das umfassende Handbuch für Linux, Unix und Windows
Jürgen Wolf
Galileo Computing
http://openbook.galileocomputing.de/c_von_a_bis_z/
(8 MB Download der E-Version, Paperversion ca. 40€)

von Peter D. (peda)


Lesenswert?

Christian Meyer wrote:
> bisher war ich es gewohnt nach dem öffnen einer Entwicklungsumgebun
> (Bascom) einen Eingabebereich zu haben und nach tippen des Proramms
> musst ich nur noch F7 drücken und schon kam ein fertiges .hex file
> heraus.

Im Prinzip soll das mit dem AVRStuadio ähnlich gehen.
Ich habe allerding keine praktischen Erfahrungen damit, da ich den 
WINAVR in der DOS-Box als Batch benutze und dann auch sofort per 
Bootloader das Hex-File brenne.
Compilieren und Brennen ist also nur ein Tastenklick.
Nur den Resettaster muß man noch selber drücken bzw. VCC des Target aus- 
und einschalten, wenn der Resetpin als IO definiert ist.

> nun würde ich gerne wissen wie das mit c geht.
> Woher kriege ich standard Bibliotehken was ist das überhaupt und wo
> müssen die hin??

Erstmal ne schlechte Nachricht, irgendwelche Black-Boxes und extra zu 
lernende Konfigurationstools gibt es unter WINAVR nicht.
Aber ne gute Nachricht: LCD, Tastenentprellung, 1-Wire usw. findet man 
im Web direkt als Quelltext, die man dann in sein Projekt einbinden 
kann.
Und wenn der Autor nen Fehler gemacht hat oder es Seiteneffekte gibt, 
kann man ja den Quelltext editieren.
Die Konfiguration mache ich immer direkt mit der Registerbeschreibung im 
Datenblatt.


> Was sind Makefils und brauche ich die überhaupt??

Braucht man nicht, der WINAVR versteht als Argument *.c, d.h. compiliere 
alle C-Dateien im aktuellen Verzeichnis und linke sie dann zusammen. 
Geht bequem mit einer Batch-Datei.

Das AVRStudio erzeugt aber auch automatisch ein Make.


Peter

von Sven P. (Gast)


Lesenswert?

Christian Meyer wrote:
> Hall
>
>
> Erst mal mein Ziel:
> Ich möchte in zukunft meine MCUs mit C programieren können.

Wenn du den Assembler mal so richtig verdaut hast, bist du schon halb am 
Ziel. Wenn du den auch noch richtig verstanden hast, empfehle ich dir, 
selbiges mit den AVR-Werkzeugen zu tun, und zwar ohne WinAVR und Co.

> nun würde ich gerne wissen wie das mit c geht.
Genauso. Deine IDE kannst du dir nach Belieben aussuchen -- alles, was 
blanken Text speichert, ist in Ordnung.
Zur HEX-Datei kommst du dann über Aufrufe der verschiedenen Werkzeuge, 
z.B. von AVR-GCC. Prinzipieller Ablauf ist:
1
Quelltext:
2
  - C ----------> Compiler ---\
3
  - C++ --------> Compiler ---->--> Assembler-Quelltexte
4
  - ASM ----------------------/
5
  - Forth -------------------/
6
7
Assembler-Quelltexte ---> Assembler ---> (binäre) Objektdateien
8
9
Objektdateien --> Linker --> Programm
10
11
                         /---> FLASH-Speicherabbild
12
Programm --> OBJCOPY ---|
13
                         \---> EEPROM-Speicherabbild
14
15
Speicherabbilder --> Brennprogramm --> AVR


> Woher kriege ich standard Bibliotehken was ist das überhaupt und wo
> müssen die hin??
"C" als Programmiersprache hat weder ne serielle Schnittstelle, noch 
Timer, printf() oder sonst irgendwas. Genaugenommen hat C nicht mal eine 
einzige aufrufbare Funktion ("Sub") an Bord -- das alles kommt aus der 
Standardbibliothek.
Normalerweise kriegst du die gleich mit dem Compiler geliefert und 
installiert.

> Was sind Makefils und brauche ich die überhaupt??
Ist nix weiter als eine Datei, in der drin steht, was wie gemacht werden 
soll. Und zwar in Form von Regeln, die aus einem Ziel (z.B. Hex-Datei), 
Abhängigkeiten (Quelltexte etc.) und Anweisungen (z.B. Compileraufruf) 
bestehen. Der Rest ergibt sich quasi von alleine: Ist ein Ziel älter 
(Dateidatum) als irgendeine seiner Abhängigkeiten (oder existiert ein 
Ziel überhaupt nicht), werden die Anweisungen ausgeführt.
Für dich heißt das: Speicherst du einen Quelltext ab, ist dieser dann 
laut Dateidatum neuer als die Zieldatei (die du z.B. bei einem früheren 
Aufruf mal erzeugt hast), also wird die Zieldatei neu gebaut (sprich: 
compiliert).

von Peter D. (peda)


Lesenswert?

Sven Pauli wrote:
> selbiges mit den AVR-Werkzeugen zu tun, und zwar ohne WinAVR und Co.

Was soll er denn sonst unter XP/Vista benutzen, wenn nicht WINAVR?

Ich behaupte mal, 90% der AVR-GCC-Programmierer benutzen WINAVR.

Ich kann mich noch gut erinnern an die erste ARV-GCC Version mit Cygwin. 
Ich habs in vielen Stunden nicht zum Laufen gebracht.


Peter

von Christian M. (mcmeyer)


Lesenswert?

Also vielen dank erstmal für eure schnelle Hilfe

Habe einigtes auch schon Probiert leider will noch nicht alles so wie 
ich will^^.

Habe gerade mal das einführungsprogramm aus dem AVR-GCC-Tutorial per 
coppy/paste ins AVR Studio eingefügt

#include <avr/io.h>          // (1)

int main (void) {            // (2)

   DDRB  = 0xff;             // (3)
   PORTB = 0x03;             // (4)

   while(1) {                // (5a)
     /* "leere" Schleife*/;  // (5b)
   }                         // (5c)

   /* wird nie erreicht */
   return 0;                 // (6)
}

Nach drücken auf Compie Active File

kommt folgende Meldung:

Build started 6.12.2008 at 18:13:52
      0 [main] sh 2364 sync_with_child: child 4752(0x11C) died before 
initialization with status code 0x0
  62733 [main] sh 2364 sync_with_child: *** child state waiting for 
longjmp
/usr/bin/sh: fork: Resource temporarily unavailable
avr-gcc  -mmcu=atmega32 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT test.o -MF 
dep/test.o.d  -c  ../test.c
../test.c:14: fatal error: opening dependency file dep/test.o.d: No such 
file or directory
compilation terminated.
make: *** [test.o] Error 1
Build failed with 1 errors and 0 warnings...

Was mach ich falsch??


@ Steffan

Galileo Computing
http://openbook.galileocomputing.de/c_von_a_bis_z/
(8 MB Download der E-Version, Paperversion ca. 40€)

das tutorial habe ich bereits ansatzweise gelesen aber irgendwie fehlt 
mir auch hier der ricitige Ansatz und ohne learning by doin komm ich 
irgendwie nicht weiter. kann mir jemand eine konkrete C IDE (mit syhntax 
highliting...) empfehlen?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Christian Meyer wrote:

> Build started 6.12.2008 at 18:13:52
>       0 [main] sh 2364 sync_with_child: child 4752(0x11C) died before
> initialization with status code 0x0
> ...
> Was mach ich falsch??

Nix. Hier geht etwas furchtbar schief und die weiteren Meldungen sind 
Folgefehler.

Um das Problem aufzuklären, würde man hingehen und

1/ mit der allgemeinisierten Fehlermeldung eine Recherche im Netz 
starten. Wenn dein Entwicklungssystem die Probleme hat, hatte sie 
vielleicht schon ein anderer...

http://www.google.de/search?hl=de&q=winavr+sync_with_child%3A+child+died+before&btnG=Suche&meta=

Danach taucht ein Hinweis von Madwizard auf, der auf Probleme mit WinAVR 
und einem 64-Bit Vista eingeht. Hier kommt dann Hinweis 2 zum tragen:

2/ unbedingt näheres zum verwendeten Entwicklungsystem posten: Welches 
Betriebssystem? Welche WinAVR Version?

> @ Steffan

Stefan reicht ;-)

> Galileo Computing
> http://openbook.galileocomputing.de/c_von_a_bis_z/
> (8 MB Download der E-Version, Paperversion ca. 40€)
>
> das tutorial habe ich bereits ansatzweise gelesen aber irgendwie fehlt
> mir auch hier der ricitige Ansatz und ohne learning by doin komm ich
> irgendwie nicht weiter.

Learning by Doing ist Pflicht, da brauchst du dich nicht zu schämen! 
Ansonsten kann ich nur empfehlen, möglichst konkret zu fragen. "Ich 
benutze das Tutorial xyz (hier: erhältlich) und stecke beim Schritt 42: 
Die Variable Fubbel passt nicht zur Fumktion Grabbel(). Wie kommt's?".

> kann mir jemand eine konkrete C IDE (mit syhntax
> highliting...) empfehlen?

Ich nicht, ich benutze immer irgendeinen Editor, der gerade auf dem Host 
vorhanden ist und auf x Maschinen ist das jeweils ein anderer. 
Inzwischen füge ich sogar vi Komamdos in Proton.exe ein. Ein 
Teufelskreis ;-(

von Christian M. (mcmeyer)


Lesenswert?

als erstes möchte ich michfür das nicht korekte nutzen der Suchfunktion 
entschuldigen, und mich für eure geduldige Hilfe bedanken.

Grund dafür dass ich nicht selbst soweit gekommen bin war die Tatsache 
das ein grüner Punkt neben der 3 Zeile der fehlermeldung mich zu der 
Annahme verleitet hat das bisher alles ok war und erst der rote Punkt 
neben Zeile 4 hat mich die folgenden Meldungen registrieren lassen... 
naja mein Fehler ich hoffe mir wird verziehe.

damit alles nun auch seine richtigkeit hat hier noch nachträglich meine 
systemdaten:

ich nutze:
- Wie bereits von euch rescherschiert Windows Vista(home Premium) in der
  64Bit Version.
- AVR Studio 4.15.623
- WinAVR-20080610
- Programmer: AVR Dragon

nun nochmal zur frage der algemeinen C IDE hat da jemand ne idee? da ich 
mit komandozeilen nicht so gut zurechtkomme wär mir eien relativ 
einfache umgebung gelegen in deren benutzeroberfläche der compiller 
bereits integriert ist.
Danke

von Ralf W. (Gast)


Lesenswert?

Hallo,

das AVR Studio erkennt eigentlich ein installiertes WinAvr und
arbeitet mit diesem dann zusammen.
Damit hast du eine C IDE.
Wenn du hier schon Probleme hast. Compiler Fehler, die nicht vom
Quelltext herrühren, nützt dir eine andere IDE auch nichts.
Ausser du bekommst zu Weihnachten eine solche geschenkt. Es
gibt durchaus kommerzielle IDE's.
Denn alle freien IDE's arbeiten irgenwie mit AVRGCC zusammen.
Die meisten hier nutzen halt den AVRGCC, der mit WinAvr kommt,
weil er frei ist. Nicht umsonst, wie du merkst. Du musst hier
halt bereit sein die Probleme zu lösen.
Als alternative IDE's kenne ich CodeBlocks und Eclipse.
Ich arbeite mit CodeBlocks. Das habe ich so hinbekommen, das
ich in CodeBlocks und AVR Studio das selbe Projekt bearbeiten kann.
Wegen des debuggens im AVR Studio. Ich habe die Debug Funktion im
AVR Studio allerdings so gut wie noch nie benutzt.
Was ich an der Kombination mit CodeBlocks gut finde, ist das ich
auf dem PC bestimmte Teile meines Codes direkt testen kann.

Hier noch ein Link der vielleicht bei deinem Problem hilfreich ist:
http://www.madwizard.org/electronics/articles/winavrvista

dort zum Abschnitt sync_with_child problem scrollen, da werden
sie dann geholfen ;-)

gruss ralf

von Thomas H. (innot)


Lesenswert?

@Christian,

auch wenn ich ungerne Werbung in eigener Sache mache ;-)

Hast Du schon mal überlegt statt AVR Studio Eclipse zu probieren?

Mit dem 'AVR Eclipse Plugin' kann man recht einfach mit Eclipse AVR 
Programme schreiben.

Vorteile:

- Eclipse ist als Entwicklungsumgebung AVR Studio weit überlegen
- Viele Feature die das Programmieren in C erleichtern.
- Kein Ärger mit makefiles, da diese im Hintergrund automatisch erzeugt 
werden.

Nachteile:
- Das debuggen ist (noch) nicht so integriert wie bei AVR Studio
- Kein Zugriff auf die Simulatoren von AVR Studio

Die Homepage des AVR Eclipse Plugins findest Du hier: 
http://avr-eclipse.sourceforge.net

Wo Du Eclipse bekommst, was Du sonst noch brauchst und wie Du das Plugin 
installieren kannst steht hier: 
http://avr-eclipse.sourceforge.net/wiki/index.php/Plugin_Download

LG, Thomas (AVR Eclipse Plugin Programmierer)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.