Forum: PC-Programmierung Init-Prozeduren modularisieren


von Reinhold Rabe (Gast)


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

von Rolf Magnus (Gast)


Lesenswert?

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

von Reinhold Rabe (Gast)


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

von Thomas L. (tom)


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 :)

von MNR (Gast)


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

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.