www.mikrocontroller.net

Forum: Compiler & IDEs Sourcefile bei WinAVR


Autor: Tim Kranich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

Bewertung
0 lesenswert
nicht 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.

Autor: Tim Kranich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du schreibst in c => nix void foo() sonder void foo(void) ;)

73

Autor: Tim Kranich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich gebe mal am besten noch den Quellcode an, sonst redet man eventuell
nur aneinander vorbei:

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

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

void SSA_test (void) {
  uint8_t i;
  for (i=0; i<10; i++) {
    PORTA = SSA[i];
    _delay_ms(500);
  }
}

void get_digit (uint8_t num, uint8_t digit[]) {
  digit[0] = num / 100;
  num %= 100;
  digit[1] = num / 10;
  digit[2] = num %= 10;
}


void num_test (uint8_t num) {
  uint8_t digit[3];
  get_digit (num, digit);
  uint8_t i;
  for (i=0; i<3; i++) {
    PORTA = SSA[digit[i]];
    _delay_ms(500);
  }
}

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

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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

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

Guter Programmierstil.  Alles, was nicht exportiert sein muss, soll
auch nicht exportiert werden.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tim Kranich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht 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.

Autor: Tim Kranich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du den comischen int-header im include ?? ;)

der kennt nämlich den uint8_t nicht...

73

Autor: Tim Kranich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tim Kranich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.