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
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
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
Ü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.
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
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
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).
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
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
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!
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
Dummer Fehler, deshalb sollte man's einrücken. Werds heut Abend mal ausprobieren!
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.