mikrocontroller.net

Forum: Compiler & IDEs WinAVR .C Dateien einbinden


Autor: Tobias Huste (tobhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo arbeite mit winavr und möchte gerne zu meiner .c datei noch eine
weitere einhängen um ein lcd anzusteuern. doch irgendwie geht das wohl
nicht so einfach mit winavr. deshalb habe ich avrstudio4 installiert wo
ich die zusätzlich .c datei problemlos einhängen und compilieren kann,
allerdings verwende ich ein lpt1 programmierkabel und ich kann in avr
studio nur usb und com anschlüsse angeben, warum auch immer? kann ich
jetzt rein theoretisch mit avr studio compilieren und die so enstandene
.hex datei mit winavr auf den eeprom des boards überspielen, denn dort
kann ich lpt1 als schnittstelle angeben.
was natürlich noch einfacher wäre, wenn ich alles mit winavr machen 
könnte, irgendwie muß es doch gehen, dass ich die 2. .c datei und die .h 
da mit einbinden kann, oder? habe mal gelesen, dass ich dazu das winavr 
makefile verändern muß, aber wie und an welcher stelle?
bitte dringend um hilfe, ist eine projektarbeit, die ich in ein paar 
tagen abgeben muß.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>bitte dringend um hilfe, ist eine projektarbeit, die ich in ein paar
>tagen abgeben muß

Ich habe da meine Zweifel, daß du das schaffst, da du offensichtlich 
schon Probleme hast die Links auf dieser Seite durchzulesen oder die 
Suchfunktion in diesem Forum zu benutzen. Ganz zu schweigen vom 
einfachen reinschauen in das Makefile, in ein C-Buch oder in die Hilfe 
des Avrstudio's.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Shiftatste ist kaputt.

Zum Verständnis: AVRStudio hat gar keinen C-Compiler, und weder "WINAVR" 
noch AVRStudio können per Parallelport einen Prozessor flashen.

AVRStudio benutzt den avr-gcc aus dem WinAVR-Paket als C-Compiler, und 
im WinAvr-Paket gibt es avrdude zum flashen. Ob du also mit AVRStudio 
oder "WinAVR" kompilierst, ist egal. Benutzt wird immer der selbe 
Compiler und Linker.

Wie das mit dem makefile geht, steht oben links im Tutorial.

Oliver

Autor: tobhu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis. Dann können wir das Forum ja schließen und holen 
alle wieder die Bücher raus und klemmen gleich noch den Netzzugang ab.
Ich hoffe du bist jetzt mit der Schreibweise zufrieden, ansonsten 
schreib mir doch noch mal, dann werde ich versuchen mir noch mehr Mühe 
zu geben.

Autor: tobhu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke dir Oliver, werd mir das mal ansehen.

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"möchte gerne zu meiner .c datei noch eine
weitere einhängen um ein lcd anzusteuern."

Warum nicht einfach mit #include:

#include "myLCD.h"
#include "myLCD.c"

Das geht immer.

Autor: tobhu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist ne Idee, dachte "Include" benutzt man nur bei der Einbindung von 
Headerdateien, bin noch Neuling in der C-Programmierung.Werds gleich mal 
versuchen.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tobhu wrote:

> Ist ne Idee, dachte "Include" benutzt man nur bei der Einbindung von
> Headerdateien,

Ja, so ist es auch.

> bin noch Neuling in der C-Programmierung.

Offenbar noch weniger als Andreas.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Paulin wrote:

> Das geht immer.

Und meistens schief.

Wenns noch nicht schief geht, dann sind Deine Projekte nur noch nicht 
groß genug.


Peter

Autor: tobhu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke euch. Hab jetzt noch mal bei dem Makefile nachgesehen, anscheinend 
muß ich die 2. .c Datei dort nur bekannt geben, hoffe dass es dann geht.

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter:

;-) Nicht so neu, wie es scheint, aber ich habe erst über die 
AVR-Geschichten  diese Makefiles kennengelernt. Komme aus der IDE-Ecke.
Warum geht das meistens schief?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Warum geht das meistens schief?
globale Variablen sind als solche erstmal nur auf eine C Datei 
beschränkt.
Wenn du include verwendest wird die C-Datei in die andere eingefügt. 
Damit kann es bei gleichen Namen zu Überschneidungen kommen.
In C-Dateien sind normalerweise include mit Header-Dateien
Diese würden bei der anderen auch eingebunden. Dabei kann es zu 
Überschneidungen kommen.

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Wolfram:
Die Funktion von #include ist mir schon bekannt. Klar: Alle globalen 
Variablen sind dann im ganzen Projekt sichtbar.

Getrennt kompilieren und DANN linken ermöglicht separates scope auf 
Sourcedateiebene für separate Sources.
Geht aber doch auch ohne: Muss ich halt Disziplin bei der Namensvergabe 
halten. DAS muss ich natürlich im Auge behalten. Klar ;-)
Ich nutze halt minimal globale Var. in den #includes und wenn, dann 
ausgiebig Prefixe, z.B.
LCD_uiLineptr
LCD_uiColptr
LCD_ucWasweissich

@ Peter: Und ich muss Dir recht geben: Diese flat structure mag wirklich 
bei echt großen Sachen Probleme machen, weil die Randauswirkungen 
unübersehbar sein können.
Und dass es Chaos gibt, wenn ich mal kurz ne Source vomn Kollege mit 
einbinden muss, wenn der gleiche VarNamen vergibt - d' accord!!

Meine Projekte sind meist nicht sooooooo riesig, dafür habe ich immer 
mal wieder
- Ein neues Display am µC (ständige Änderung)
- Eine andere IIC-Busansteuerung (ständige Änderung)
- die RS232 muss in Software, weil µC keine HW dafür hat (ständige 
Änderung)..................
Panta rei. Und DAS ist bis dato mein Ressort. Und dafür klappts gut mit 
direkter Einbindung per #include.

Es gab für mich immer 2 Möglichkeiten: Via library oder direkt via 
#include. Makefiles hatte ich ja nie ;-)
Wenn Du aber an einer Source rumfrickelst (hier z.B.: LCD) und der Code 
sich ständig ändert, ists blöd, da jedesmal eine Library draus zu 
generieren, um diese dann dazuzulinken. Muss ich ja mit nem Extraprojekt 
erst die lib generieren und dann im anderen Projekt diese einbindem 
ächz


Aber - tx2all: Gut, das Scope-Thema mal wieder unter neuem Vorzeichen 
angerissen zu haben... werde mal drüber nachdenken.
Via Makefile scheint ein neuer - guter - dritter Weg zu 
sein...............

-> back to thinktank ;-)











Autor: tobhu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch einmal vielen Dank, habe das Makefile geändert, mußte nur die .c 
Datei einbinden unter "SRC = $(TARGET).c lcd.c" und siehe da es läuft.
Muß zu meiner Schande gestehen, dass das doch nicht so schwer war und 
ich wirklich nur im Skript zu WinAVR hätte nach lesen müssen.
Sorry für die vielen Mühen.

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin doch auch schlauer geworden ;-)

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@tobbu: Ja so ists richtig :D

Übrigens:

"#include" tut NICHTS anderes, als simpel den Inhalt der inkludierten 
Datei einzulesen und in die Datei an dem Ort einzufügen, wo das 
"#include" auftaucht. Quasi Copy+Paste. Und zwar vor dem Kompilieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.