GCC Fehlermeldung

Gast #74920
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
Gast #74921
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
Gast #74922
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
Gast #74923
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.
Gast #74924
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
Gast #74925
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
Gast #74926
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).
Gast #74927
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
Gast #74928
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
Gast #74929
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!
Angehängte Dateien:
Gast #74930
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
Gast #74932
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
Gast #74933
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

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