mikrocontroller.net

Forum: PC-Programmierung Init-Prozeduren modularisieren


Autor: Reinhold Rabe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo! Komme gerade nicht ganz weiter...
Bin dabei ein C-Programm für eine Timersteuerung zu schreiben. Da es
langsam etwas unübersichtlich wird, wollte ich die ganzen
Initialisierungsprozeduren (z.B. timer0, timer 1) aus dem Hauptprogramm
heraus in ein modul dec.c auslagern. Habe mich hier schon
(http://www.ldv.ei.tum.de/media/files/lehre/gi/prak...)
informiert, aber so recht klappen will es noch nicht.
Fehlermeldung: test.c:101: undefined reference to `timer0_init'
ebenso für die beiden anderen Prozeduren.
...
#include "dec.h"
...
int main(void)

{
//davor: port-inits
  timer0_init();
  timer1_init();
//danach: mainloop
}
[/c]

Meine dec.h sieht so aus:
int timer0_init();
int timer1_init();
int sound_active();

und die dec.c schließlich so:

int timer0_init() {
//...
}
int timer1_init() {
//...
}  
int sound_active() { 
//...
}

Gruß, RR

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Code sieht soweit ok aus. Du schreibst leider nicht, wie du die
Dateien zusammnenlinkst. Da wird vermutlich der Hund begraben liegen.

Autor: Reinhold Rabe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo! Stimmt, die makefile hatte ich ganz vergessen :>. Dort habe ich
folgende Zeile bearbeitet (weiss nicht ob das so richtig ist, hab mir
das aus einem Beispielprojekt zusammengelesen). Achja, das wird ein
AVR-Programm, vielleicht bin ich ein wenig im falschen Forum, aber ich
denke das Linken wird ja wohl mehr oder wenig das gleiche - auch am PC
sein. Ansonsten bitte ich darum den Beitrag hier zu verschieben.


# List C source files here. (C dependencies are automatically
generated.)
SRC = $(TARGET).c dec.c



Er liefert mir nun zwar keine konkreten Fehler mehr (Funktion nicht
gefunden), aber er bricht den Kompilierungsvorgang mit make.exe: ***
[test.o] Error 1 ab.
Irgendwo ist da der Wurm drin.
Das mit den "objects" Linken (Link oben, 12.6) war bei meinem
Beispielprojekt, welches ich mir angeschaut habe, übrigens nicht drin
(war eine LCD Lib).

Vielen Dank für Eure Antworten,
Gruß,
RR

Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lass das bei dec.c beim SRC = ... weg.

Ich habe das vor kurzem auch gemacht, in der Makefile habe ich nichts
geändert und es hat auf Anhieb funktioniert.
Das Einzige was mir jetzt grad auffällt, ist dass in der
Parameterübergabe evtl. ein void fehlt. Wenn ich mich richtig erinnere,
habe ich das dort. Obs an dem liegt, kann ich jedoch nicht sagen :)

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest das dem WINAVR beiliegede mfile zur Generierung des
Makefiles nutzen. dec.c in SRC ist schon richtig, der TARGEET heißt
test?
Außerdem unterscheidet make gerne Groß-/Kleinschreibung bei
Dateinamen.

Gruß,
Matthias

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.