mikrocontroller.net

Forum: Compiler & IDEs GCC Fehlermeldung


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

hab ein Problem mit einer Fehlermeldung aus
der ich nicht ganz schlau werde.

 unterminated argument list invoking macro "outp"

und später

 'outp' undeclared (first use in this function)
 (Each undeclared identifier is reported only
 once for each function it appears in)
 parse error at end of file

Der Fehler soll in main liegen(?) aber
das besteht nur aus Endlosschleife und
Funktionsaufruf.

Danke, Tom

Autor: Berndt Brandes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du benutzt das Macro "outp"?
Dieses Macro soll man nicht mehr benutzen, benutze stattdessen direkte
Zweisungen an die Ports.
Außerdem scheint was mit deinem Aufruf nicht zu stimmen. Wie sieht die
Zeile der ersten Fehlermeldung denn aus?

/Berndt

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der "outp"-Aufruf müsste stimmen, benutze ihn
auch schon früher um den Timer-Registern die
Werte zuzuweisen.

Direkte Zuweisungen funktionieren nicht,
da er dann die Register nicht kennt.

TCNT1 = 0x01FF

Hab ich vergessen was zu includieren,
benutze, IO.h und Signal.h

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übrigens versuch ich mit "outp" einen 16Bit wert in
OCR1B zu schreiben, ist es möglich das man dieses
Register nicht vollständig beschreiben kann.

Les grad was das man zuerst OCR1BH und dann OCR1BL
beschreiben muss, könnte das das Problem sein.
Leider kann ich's jetzt nicht checken.

Autor: Berndt Brandes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
outp war mal, ist aber nicht mehr!

nicht io.h sondern avr/io.h benutzen und immer schön dem Compiler den
CPU typ sagen (-mmcu=atmega8 oder so), dann kennt der Compiler auch die
Register, er weiß auch ob's 16 Bit sein müssen und er kennt dann auch
(selbstverständlich) eventuelle Schreib- und Lesefolgen.

Welche Compilerversion benutzt Du?
Welche Warnungen (alle!) und Fehler siehst du?

/Berndt

Autor: Berndt Brandes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unterminated argument list invoking macro "outp"
heißt für mich das die Argumentliste des Macros nicht abgeschlossen
ist, also vielleicht die schließende Klammer fehlt oder so was.

/Berndt

Autor: Domagoj Mihalic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls der Compiler, wie du meinst die Register beim
direkten Aufruf nicht erkennt liegt das problem nicht bei outp,
die Register müssen auf jeden Fall erkannt werden (wie sollte
denn sonst der Quellcode von outp funktionieren).

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke das Problem hat sich gelöst,
hatte einen Fehler bein includieren von io.h!

Allerdings hab ich jetzt mit ein paar anderen
Fehlermeldungen und Warungen zu kämpfen.
Vielleicht gibt's ja auch hier ganz einfache
Lösungen, bin für alles dankbar!


sim.c: In function `output_funktion':

sim.c:79: warning: return type of `main' is not `int'
" void main(void) ", ich geb nix zurück aus main

sim.c:79: warning: `main' is normally a non-static function
sim.c:85:3: warning: no newline at end of file

sim.c:85: error: parse error at end of input (?)

Tom

Autor: Berndt Brandes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GCC verlangt von main(), das es einen int zurückliefert, sonst hast Du
immer diese Warnung, da geht kein Weg dran vorbei. Ich weiß zwar auch
nicht, was mit dem Rückgabewert passiert, aber so ist das nun mal.

Poste doch mal Dein sim.c, wenn's kein Geheimnis ist. Dann sehen wir
vielleicht besser, was da los ist.

/Berndt

Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Is kein Geheimnis! Hoff nur es funktioniert noch so weit,
hab was geändert aber kanns im Moment nicht checken.

zur INfo:
Das Programm soll die von main übergebene Bitfolge ausgeben.
Die einzelnen Bits, High und Low sollen im Tastverhältnis
codiert werden.

Danke, Tom!

Autor: Berndt Brandes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fast wie ich vermutet habe: output_funktion() hat keine abschließende
}-Klammer, für den Compiler sieht das so aus, als ob Du versuchst
main() lokal in output_funktion() zu deklarieren (gibt dann warning:
`main' is normally a non-static function). Weiter fehlt ihm dann noch
eine schließende }-Klammer (daher der Parse-error).

Als Abschluß sollte für GCC immer eine Leerzeile im Quellfile sein,
sonst gibt's die Warnung: warning: no newline at end of file.

also: Fehlende Klammer rein, main() als int mit Rückgabewert 0 (führt
nicht zu mehr Assembler-Code, der Compiler erkennt die hier vorliegende
Situation, das main() nicht zurückkehrt) und noch eine Leerzeile und
alles sollte ok sein

/Berndt

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dummer Fehler, deshalb sollte man's einrücken.
Werds heut Abend mal ausprobieren!

Autor: Berndt Brandes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW: bit_anzahl ist nicht deklariert, die Abbruchbedingung Deiner
Ausgabeschleife würde ich nochmal überdenken. Wird so nicht gehen.
Ich schlage vor: while(bit_gesendet < protokollbits)?

Zum Abschluß dann nochmal warten auf (bit_start == 0), damit ein evtl
folgendes Byte nicht vor dem Ende des ersten angefangen wird?

/Berndt

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Compilieren funktioniert jetzt einwandfrei, was
ich allerdings von der Funkion noch nicht behaupten
kann.
Beim debuggen zeigt mir AVRStudio4 an, dass für
eine integer-Variable 2 Register belegt werden.
Wie muß man einen 8Bit-Wert deklarieren?
(short, char (?) funkioniert nicht)

Das führt dann weiter dazu das eine Zählvariable
(global) beim Ausführen einer Funkion im RAM steht,
eine einfache Zuweisung
  bit_start = 1
ist dann nicht mehr möglich.
Wie macht man das am geschicktesten über Pointer,
aber wie weiß ich welcher RAM-Bereich benutzt wird?

Danke, Tom

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.