PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfestellung mit C-Programmierung für einen uC



xxrider
12.09.2011, 20:50
Hallo,
gleich vorweg: Ich kann etwas programmieren mit Bascom und kann einen uC mit Bascom beschreiben.
Nun habe ich ein uC Projekt erstanden, wo die Programmiersprache in C ist.
Ich habe einen dazugehörigen Sourcecode, der aus 8 Dateien besteht:
1 x Makefile Datei, mehrere C Source und mehrere C Header Dateien.
Leider blicke ich mit der C-Struktur nicht ganz durch, denn diese 8 Dateien sollen ja eigentlich 1 komplettes Programm darstellen.
Ich habe das Programm Dev-C++ installiert, bei dem ich zwar alle einzelnen Dateien sehen kann , aber nicht zusammenführen.
Wie kann ich den vollständigen Test des Programms denn überhaupt sehen / zusammenführen ? (z. B. in Bascom ist das auch nur eine .bas Datei, dort ist der vollständige Programmtext enthalten)
Wie kann ich das komplette Programm in eine hex datei umwandeln um auf einen uC zu speichern ? (vielleicht geht das speichern der .hex Datei in den uC ja auch mit Bascom?)
Danke und viele Grüße

Hubert.G
12.09.2011, 20:57
Entweder du verwendest das AVR-Studio oder Programmers Notepad mit GCC.
Damit kannst du die einzelnen Files zusammenführen, compilieren. In den µC speichern geht auch mit BASCOM.

xxrider
12.09.2011, 21:45
Entweder du verwendest das AVR-Studio oder Programmers Notepad mit GCC.
Damit kannst du die einzelnen Files zusammenführen, compilieren. In den µC speichern geht auch mit BASCOM.

o.k.danke aber hab ein Problem: Kann das Programm AVR-Studio nicht öffnen - macht das Programm kurz auf und verschwindet dann ins Nirvana.
Gibts noch eine andere Alternative?
Was kann ich eigentlich mit Dev-C++ anfangen - das habe ich auch schon draufinstalliert?

Hubert.G
12.09.2011, 21:55
Wenn du dir hier WIN-AVR herunterladest dann sollte da auch das PN dabei sein.
Mit Dev-C++ wirst du mit den AVR nichts anfangen können.

xxrider
12.09.2011, 22:05
Wenn du dir hier WIN-AVR herunterladest dann sollte da auch das PN dabei sein.
Mit Dev-C++ wirst du mit den AVR nichts anfangen können.

o.k. ich hab das Notepad nun drauf. Wie kann ich die Dateien zusammenführen und in .hex compilieren?

Hubert.G
13.09.2011, 08:10
Die Dateien alle in ein Verzeichnis legen, mit PN öffnen und dann sollte es ein make all geben.
Ist nur schon sehr lange aus das ich mit PN gearbeitet habe. Vielleicht findet sich hier jemand der aktuell damit was tut.

xxrider
13.09.2011, 15:37
Konnte es noch nicht schaffen. Habe alle files im PN geöffnet (werden alle in einem neuen Fenster angelegt) und "make all" gestartet.
Hier gibts aber Fehlermeldungen, sieht so aus:
> "make.exe" all
avr-gcc -g -Os -mcall-prologues -mmcu=atmega8 -Wall -Wstrict-prototypes -Wa,-ahlms=hs.lst -DF_CPU=8000000 -I. -c mediatek.c
mediatek.c:25:24: util/delay.h: No such file or directory
mediatek.c: In function `initGPS':
mediatek.c:60: warning: implicit declaration of function `_delay_ms'
make.exe: *** [mediatek.o] Error 1

> Process Exit Code: 2


Hier ist übrigens der Quellcode zu finden: http://www.d68.nl/sensorboard/resources.html
(unter downloads: Firmware Code (C code, 10 Sept 2011, Version 1.2, Added Ottopilot A/V Sensor support) (http://www.d68.nl/sensorboard/resources/sensorstation-v12-10SEPT11.zip))
Kann mir das mal jemand ausprobieren wie es geht bzw. warum es bei mir hakt?

Besserwessi
13.09.2011, 17:17
Das sieht schon gar nicht so schlecht aus. Das File util/delay.h kann der Compiler nicht finden. Je nach Compiler (bzw. LibC-) Version kann das File an einer etwas anderen Stelle stehen. Das File müsste irgend wo im Ordner WinAvr????/avr/include stehen. Offensichtlich nicht im Unterverzeichnis util - wenn es doch da steht, stimmt etwas mit den voreingestellten Suchpfaden nicht.

Der Code scheint auch von einem Linux / Mac System zu kommen. Das könnte ggf. für den falschen Pfade mit verantwortlich sein.

Hubert.G
13.09.2011, 17:41
Im AVR-Studio lässt es sich einwandfrei kompilieren. Ein kleiner Fehler ist enthalten, im File mediatek.c ist das include<usart.h> zu löschen.
Allerdings bin ich etwas skeptisch da data zu 94,9% voll ist, ob die restlichen 50 Byte genügen.

xxrider
13.09.2011, 20:10
So. Nun hab ich Studio 4 runtergeworfen und dafür Studio 5 drauf und das Programm geht!
Und nun bräuchte ich nur noch die Anleitung wie ich mit meinen 8 Dateien vom oberen link in AVR-Studio verfahren soll.
Die Dateien unter Ordner _MACOSX ist übrigens für Mac Pcs, die anderen wohl für Windows.

Besserwessi
13.09.2011, 20:47
Der Source Code bleibt auch bei AVR Studio verteilt auf die 7 Files ( xxx.h und xxx.c). Das Makefile muss man ggf. an die Compiler-umgebung anpassen. AVRstudio erzeugt normalerweise selber eines aus den Einstellungen die man im Projekt File speichert.
Man muss da eigentlich nur noch die Files in AVRStudio laden und zum Projekt hinzuzufügen. Das Hauptfile (mediatek.c) wird als Startfile markiert.

Wenn man unbedingt will könnte man die Files auch zusammenfügen, indem man das #include "....." direkt ausführt. Das ist aber gerade nicht der Sinn der Sache.

xxrider
13.09.2011, 21:24
Ich habe jetzt alle files, auch das makefile in AVR Studio als einzelne Fenster (Reiter) geöffnet.
Wie muss ich jetzt weiter vorgehen, um eine .hex datei zu erzeugen bzw. um das Programm auf einen uc zu schreiben?
Welche Änderungen muss ich im text noch vornehmen?

xxrider
16.09.2011, 20:35
Ich habe jetzt alle files, auch das makefile in AVR Studio als einzelne Fenster (Reiter) geöffnet.
Wie muss ich jetzt weiter vorgehen, um eine .hex datei zu erzeugen bzw. um das Programm auf einen uc zu schreiben?
Welche Änderungen muss ich im text noch vornehmen?

kann mir keiner weiterhelfen?

Wsk8
16.09.2011, 21:23
Im Normalfall genügt es einfach makefile zu öffnen und dann zu kompilieren. Der compiler, wenn denn alles richtig installiert ist, macht dann die .hex daraus. Diese kannst du flashen wie du willst.

In C ist es halt so üblich die Unterfunktionen auszulagern, somit bleibt der Code sehr übersichtlich. Der Compiler mixt dann alles wieder zusammen.

mfg

Hubert.G
16.09.2011, 22:19
Das AVR-Studio braucht kein externes makefile.
Ansonst nur auf F7 drücken.

xxrider
16.09.2011, 23:29
KLappt irgendwie nicht.

Also, ich öffne AVR-Studio. Gehe auf open file und öffne alle files, außer das makefile.
Dann gehe ich auf F7. Nichts passiert.

Oder ich nehme das makefile dazu, öffne es durch doppelklick.
Nun weiß ich bei dem Programm nicht mit welchem Befehl ich kompilieren kann !?!

Hubert.G
17.09.2011, 08:41
Ich habe übersehen das du Studio5 hast. Es wird aber auch hier einen Button oder einen Menuepunkt mit Build oder Compile geben.

xxrider
17.09.2011, 10:17
Einen Schritt bin ich schon weitergekommen:
Ich erstelle ein neues Projekt (executable project, suche den Atmega8, o.k.). Dann erscheint ein AVRGCC2.c im Fenster.
Zu diesem Fenster dazu öffne ich die anderen files (werden auch alle in unterschiedlichen Fenstern geöffnet).
Ich lösche nun das Fenster AVRGCC2.c und das makefile fenster.
Dann gehe ich auf "build solution".
Offensichtich kompiliert er jetzt, nur weiß ich nicht wo ich dann das .hex file finden kann.
Stimmt der Weg eigentlich?
In einem build-Fenster erscheint übrigens folgender text:

------ Build started: Project: AVRGCC2, Configuration: Debug AVR ------
Build started.
Project "AVRGCC2.avrgccproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\AVR Studio 5.0\Vs\AvrGCC.targets" from project "D:\Eigene Dateien Acer\__Daten\_Holger\_Hobby\elektronik\sensorboard \avr studio dateien\AVRGCC2\AVRGCC2\AVRGCC2.avrgccproj" (target "Build" depends on it):
Using "RunAvrGCC" task from assembly "C:\Program Files (x86)\Atmel\AVR Studio 5.0\Vs\AvrGCCLib.dll".
Task "RunAvrGCC"
C:\Program Files (x86)\Atmel\AVR Studio 5.0\AVR ToolChain\bin\make.exe all
AVRGCC2.c
Invoking: AVR/GNU C Compiler
"C:/Program Files (x86)/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-gcc.exe" -funsigned-char -funsigned-bitfields -O0 -fpack-struct -fshort-enums -g2 -Wall -c -std=gnu99 -mmcu=atmega8 -MD -MP -MF"AVRGCC2.d" -MT"AVRGCC2.d" -o"AVRGCC2.o" ".././AVRGCC2.c"
Finished building: .././AVRGCC2.c
Building target: AVRGCC2.elf
Invoking: AVR/GNU C/C++ Linker
"C:/Program Files (x86)/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-gcc.exe" -mmcu=atmega8 -Wl,-Map=AVRGCC2.map -o AVRGCC2.elf AVRGCC2.o
Finished building target: AVRGCC2.elf
"C:/Program Files (x86)/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "AVRGCC2.elf" "AVRGCC2.hex"
"C:/Program Files (x86)/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-objdump.exe" -h -S "AVRGCC2.elf" > "AVRGCC2.lss"
"C:/Program Files (x86)/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "AVRGCC2.elf" "AVRGCC2.eep" || exit 0
AVR Memory Usage
----------------
Device: atmega8
Program: 70 bytes (0.9% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
Done executing task "RunAvrGCC".
Done building target "CoreBuild" in project "AVRGCC2.avrgccproj".
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
Target "Build" in file "C:\Program Files (x86)\Atmel\AVR Studio 5.0\Vs\Avr.common.targets" from project "D:\Eigene Dateien Acer\__Daten\_Holger\_Hobby\elektronik\sensorboard \avr studio dateien\AVRGCC2\AVRGCC2\AVRGCC2.avrgccproj" (entry point):
Done building target "Build" in project "AVRGCC2.avrgccproj".
Done building project "AVRGCC2.avrgccproj".

Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

Wsk8
17.09.2011, 14:07
So, ich hab das jetzt mal mit WinAVR compiliert. Ging einwandfrei bei mir.
Hier die .hex: http://www.mediafire.com/?9onssvqjp1nmhu4

mfg

xxrider
17.09.2011, 18:22
So, ich hab das jetzt mal mit WinAVR compiliert. Ging einwandfrei bei mir.
Hier die .hex: http://www.mediafire.com/?9onssvqjp1nmhu4

mfg

Jep, deine hex datei funktioniert einwandfrei, hab sie schon draufgeflashed.
Ich möchte das aber selber können, das gibts doch nicht!
Die Programmiersprache C scheint es wohl nicht gut mit mir zu meinen, liegt sicherlich daran, dass ich erst mit Bascom begonnen habe :)
Ich hab zwischenzeitlich herausbekommen, wo die .hex datei meines neu angelegten und kompilierten projektes steckt, allerdings ist sie zu klein und funktioniert nicht
Was kann denn bei mir nicht stimmen?
Wsk8, kannst du mir sagen welche Schritte ich mit WinAVR (...hab ich ja auch installiert...) machen muss für die .hex file?
Vielleicht geht das besser.

Besserwessi
17.09.2011, 18:40
So wie es ausssieht wurde hier nur das eine mehr oder weniger Leere File übersetzt. Die 70 Bytes sind halt etwa der Code zur initialisierung bzw. die Interruptvektoren.

Zumindest bei AVRstudio 4 muss man noch eintragen das die Files auch zum Projekt gehören. Damit stellt man auch ein welches File das Hauptprogramm enthält.

Wsk8
17.09.2011, 19:02
Check PN!


Die Programmiersprache C scheint es wohl nicht gut mit mir zu meinen, liegt sicherlich daran, dass ich erst mit Bascom begonnen habe
War bei mir auchso. Bei C braucht man halt viiieeel mehr einarbeitungszeit um das alles zu checken. Basic wurde ja dafür ausgelegt dass jeder damit zu recht kommt.

mfg

xxrider
17.09.2011, 21:14
Check PN!


War bei mir auchso. Bei C braucht man halt viiieeel mehr einarbeitungszeit um das alles zu checken. Basic wurde ja dafür ausgelegt dass jeder damit zu recht kommt.

mfg

Also jetzt geht es!!!
Ich benutze nun Win AVR - Notepad, lade das Makefile und gehe auf "make all".
Hex Datei wird dann im gleichen Verzeichnis der makefile-Datei erstellt.
Vielen Dank für die Hilfe für ein - im Nachhinein betrachtet - doch sehr triviales Problem.
Vielleicht sollte ich ganz die Finger von C lassen. Der Einstieg war ja mehr als katastrophal.

danimath
18.09.2011, 17:38
Vielleicht sollte ich ganz die Finger von C lassen. Der Einstieg war ja mehr als katastrophal.
Neinneinnein! Ich kann Dir nur raten: bleib dran! Alle C-Leute mussten durch sowas durch ;)
C ist immer noch Standard bei allem Möglichen - nicht nur µC. Und mit C bekommst Du kleinere und schnellere Programme als mit Basic; noch kleiner und schneller geht's nur mit Assembler - aber das ist wirklich hartes Zeugs, mit dem man das letzte bisschen aus seinem Prozesser rausholt. (Alter Informatiker-Spruch: "Wer Basic kann, ist fürs Programmieren verloren" :twisted:)

viele Grüße
Andreas