Init-Prozeduren modularisieren

Gast #385638
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/praktikum/pra/gp_C_files/GIP_12.html)
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:
1
int timer0_init();
2
int timer1_init();
3
int sound_active();

und die dec.c schließlich so:
1
int timer0_init() {
2
//...
3
}
4
int timer1_init() {
5
//...
6
}  
7
int sound_active() { 
8
//...
9
}

Gruß, RR
Gast #385640
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
#385641
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 :)
Gast #385642
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren