Sourcefile bei WinAVR

Gast #237391
Lesenswert?
• ▲
▼
Ich hab mal eine kleines Frage zum einbinden von Sourcefiles unter
Verwendung des Programms Mfile.
Dort existiert ja die Möglichkeit C/C++ sourcefile(s) anzugeben. Ich
kenne es nur so, dass man bei der Aufspaltung seines Projects in C mit
Header Dateien arbeitet. Wie kann ich denn die Verbindung zwischen
Sourcefile und Headerfile erstellen. Oder include ich im Hauptprogramm
einfach ein "XXX.c" Das sieht ganz schön seltsam aus.

Wenn mir jedmand weiterhelfen kann, bin ich ihm sehr dankbar.
Moderator Persönliche Seite #237392
Lesenswert?
• ▲
▼
Die C-Dateien gibst du im Makefile an.

.h-Dateien baust du dazu (entweder eine einzige fürs ganze Projekt
oder eine pro C-Datei, wie du gern magst), um die exportierten Daten,
Typen und Funktionen der einzelnen C-Dateien den anderen C-Dateien
kund zu tun.  Diese werden dann mittels #include in die C-Dateien
eingebunden, damit sie Kenntnis bekommen, welche Sachen in den
anderen C-Dateien vorhanden sind.
Gast #237393
Lesenswert?
• ▲
▼
Das klingt gut. Genau so möchte ich es gerne haben aber nun bekomme ich
die Fehlermeldung:

warning: function declaration isn't a prototype

wenn die Funktionen Parameter erwarten. Wie kann ich diesen Fehler
vermeiden???
Gast #237395
Lesenswert?
• ▲
▼
Ich gebe mal am besten noch den Quellcode an, sonst redet man eventuell
nur aneinander vorbei:

Header:
1
static void SSA_test (void);
2
static void get_digit (uint8_t num, uint8_t digit[]);
3
static void num_test (uint8_t num);

Source:
1
  uint8_t SSA[10] = {238, 6, 205, 233, 99, 171, 175, 224, 239, 235};
2

3
void SSA_test (void) {
4
  uint8_t i;
5
  for (i=0; i<10; i++) {
6
    PORTA = SSA[i];
7
    _delay_ms(500);
8
  }
9
}
10

11
void get_digit (uint8_t num, uint8_t digit[]) {
12
  digit[0] = num / 100;
13
  num %= 100;
14
  digit[1] = num / 10;
15
  digit[2] = num %= 10;
16
}
17

18

19
void num_test (uint8_t num) {
20
  uint8_t digit[3];
21
  get_digit (num, digit);
22
  uint8_t i;
23
  for (i=0; i<3; i++) {
24
    PORTA = SSA[digit[i]];
25
    _delay_ms(500);
26
  }
27
}

Also nur bei den unteren Funktionen im Header ärgert er mich. Wenn ich
noch irgendwelche Fehler gemacht habe, könnt ihr mich gerne darauf
hinweisen. Ich lerne gerne g
Gast #237396
Lesenswert?
• ▲
▼
gut da war ich etwas zu schnell ;)

mach statt
static void SSA_test (void);

void SSA_test (void);

btw wtf soll static bei so ner lustigen funktion??? ich sehe schon sinn
dabei wenns sich um klassen dreht aber in c???

73
Gast #237398
Lesenswert?
• ▲
▼
gut das jetzt WE ist.. da werd ich dann gleich mal ansi wälzen...

wie meinst du exportiert??? aus dem file raus oder wie ???

und warum zum teufel tut der dann da meinen, dass das kein prototyp
ist???

73
Gast #237399
Lesenswert?
• ▲
▼
Sorry wegen dem static. Das war auch nur ein verzweifelter Versuch den
Fehler zu beseitigen. Doch auch ohne static bekomme ich immer noch
diese Fehlermeldung. Habt ihr vielleicht noch nen kleinen Denkanstoß
für mich heute morgen?
Gast #237400
Lesenswert?
• ▲
▼
meiner meinung nach müssste
void SSA_test (void) {
so aussehen..

void SSA_test () {

wobei ich mir da nicht sicher bin..

vergleich mal die zeile wo sich der compiler aufregt mit der zeile wo
die funktion beginnt... wenn die gleich sind void weg.. sonnst unserren
gcc-guru befragen G

73
Moderator Persönliche Seite #237401
Lesenswert?
• ▲
▼
> wie meinst du exportiert??? aus dem file raus oder wie ???

Ja, ohne "static" ist der Bezeichner global (über alle Module)
bekannt, sonst nur innerhalb des Moduls.  Ergo, alles was man nur
innerhalb braucht, macht man static.

> meiner meinung nach müssste
> void SSA_test (void) {
> so aussehen..
> void SSA_test () {

In C++ wäre beides dasselbe, in C nicht.  In C wäre letzteres eine
non-prototype declaration (falls es selbst die Deklaration darstellt,
im Beispiel stand aber eine drüber und es ist nur die Definition).

Nö, aus dem geposteten Quelltext ist nicht ersichtlich, was der
Compiler wo bemängelt haben sollte.
Gast #237402
Lesenswert?
• ▲
▼
wie oben schon gesagt, meckert er nur bei den beiden unteren Funktionen
mit Parameter (das verstehe ich ja gerade nicht). Der genaue Fehler
lautet:

8bitbcd.h:2: error: parse error before "num"
8bitbcd.h:2: warning: function declaration isn't a prototype
8bitbcd.h:3: error: parse error before "num"
8bitbcd.h:3: warning: function declaration isn't a prototype

wobei die Headerdatei bislang auch nur aus diesen ersten drei Zeilen
besteht, die ich oben schon gepostet habe.
Gast #237404
Lesenswert?
• ▲
▼
Das klingt ganz gut.... Muss aber leider kurz mal ne Pause einlegen...
Werde es ausprobieren und mich dann später wieder melden. Vielendank
aber schon mal für eure zahlreiche Hilfe. Bin immer wieder froh, dass
es  Leute wie euch gibt.
Gast #237405
Lesenswert?
• ▲
▼
Mist... ich kann mich einfach nicht vom PC losreißen aber dafür war dein
Tip richtig, Hans. Ihm felhte die <stdint.h>. Nochmals vielen Dank!
Vielleicht kann ich mich ja mal revangieren.

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