Hallo Ihr Ich versuche mich mal wieder im AVR (ATmega32) Programmieren. Nach einigen Erfolgserlebnissen komm ich nun nicht mehr weiter. Ich versuche das Nokia demoprogramme für das 3310-Display (http://www.deramon.de/nokia3310lcd.php) bei mir zum laufen zu bekommen. Ich verwende AVR-Studio 4.13 und WinAVR-20070525. sbi error konnte ich genauso lösen wie c99-Meldung (suchfunktion hier im forum :) ). Aber jetzt meldet der Compiler "../Nokia/drm3310.c:107: error: 'asm' undeclared (first use in this function)" für die Codezeile: asm volatile ("nop"); (im original Code stand asm ("nop"); ) Ich weiss zwar was das soll aber nicht wie es ich dem gcc beibringe. Bitte lasst mich nicht dumm Sterben ... Gruss Reiner
Irgendwas wie -std=ansi unter den Parametern? Dann _asm_, oder -std=gnu99.
Hallo Andreas Ich hatte schon "-std=c99" in den Compiler-Optionen eingefügt, weil der Compiler über ein for()-Statment gemekert hat. Habe dann alle Möglichkeiten die mir einfielen (-std=c99 asm /-std=c99asm usw) versucht, aber der Compiler hat mich immer missverstanden. Bräuchte es etwas genauer (.. Hand reiss ..). Etwas unspezifisch _asm_ hatte ich mit der Suche gefunden,aber ich bekomm es nicht zu laufen. Aber danke trotzdem Gruss Reiner
Reiner L. wrote: > Ich hatte schon "-std=c99" in den Compiler-Optionen eingefügt, weil der > Compiler über ein for()-Statment gemekert hat. c99=ANSI, gnu99=ANSI+GNU-Erweiterungen. > Habe dann alle Möglichkeiten die mir einfielen (-std=c99 _asm_ > /-std=c99asm usw) versucht, aber der Compiler hat mich immer > missverstanden. Statt alle 36^6 Kombinationen durchzuprobieren: Doku lesen.
Langfassung: Entweder du verwendest -std=gnu99 und erlaubst ihm damit, asm zu erkennen. Oder du verwendest im Quelltext statt asm die Variante _asm_.
Hallo Andreas Danke für deine Hilfe!! Doko lesen - natürlich nur welche Doku? Ich wusste dann schon nicht mehr wo ich noch suchen sollte ... Wald vor lauter Doku/FAQ ... Ich zieh mir den Schuh an "..den sie wissen nicht was sie tun ..", aber die Mikrocontroller programmiererie ist nur Spass/Hobby da hoffe ich ist etwas "Mut zur Wissens-Lücke" hoffendlich verzeihlich. Ich denke die Langfassung verstanden zu haben - werd ich heute Abend testen. Nochmals Danke für deine Hilfe!! Gruss Reiner
Ja, genau das Problem mit dem Inline Assembler hatte ich vor einem halben Jahr auch. Hatte da auch tagelang rumgesucht, bis ich das mit dem asm rausgefunden hatte. Für einen C-Anfänger ist es leider oftmals unverständlich, warum es solche Unterschiede geben muss. Ist das reine Willkür der "Macher" oder geht's hier um irgendwelche Egos? Wozu braucht es verschiedene Versionen ein und derselben Funktion? Hätten sich die denn nicht vorher einigen können, ob man für sowas Unterstriche braucht, oder nicht, oder ob man z.B. "packed" vor oder hinter dem "struct" schreibt? Hauptsache inkompatibel und möglichst die Arbeit erschweren! Das hat meiner Meinung nach nichts mit einer "Wissenslücke" des Benutzers zu tun, sondern mit einer unnötigen Zeitverschwendung und Verkomplizierung. Ist aber bei allen "Standards" so: Irgendwelche Halbgötter, die unendlich viel Zeit für solchen Blödsinn haben, müssen sich da wichtig machen und sich ein Denkmal setzen. Da verstehe ich die Leute gut, die bei Bascom bleiben und sich den bescheuerten C-Dschungel ersparen. Joachim
Joachim Müller wrote: > Für einen C-Anfänger ist es leider oftmals unverständlich, warum es > solche Unterschiede geben muss. Weil der C-Standard einfach ziemlich genau vorschreibt, welche Bezeichner eine ,,Implementierung'' (das ist die Kombination aus Compiler und Systembibliothek(en)) für sich benutzen darf und welche nicht. Eine standardkonforme Applikation darf also den Namen "asm" für eine Funktion, eine Variable oder einen Makro ganz nach Belieben für sich selbst benutzen. Logischerweise kollidiert das mit dem Bedürfnis der Compilerhersteller, bequem zu benutzende Erweiterungen anzubieten. Der Ausweg daraus ist es eben, dass der Compilerhersteller zwei Benutzungsmöglichkeiten für den inline-Assembler geschaffen hat: . _asm_ ist streng konform zum Standard und immer verfügbar . asm ist nicht konform zum Standard und daher nur verfügbar, wenn die GCC-Erweiterungen explizit (oder implizit, der default von -std ist ja "gnu89") zugelassen sind. Das hat zur Folge, dass eine an sich C-konforme Applikation, die den Bezeichner asm für sich selbst benutzt, damit nicht mehr fehlerfrei compiliert werden kann. > Hätten sich die denn nicht vorher einigen können, ob man für sowas > Unterstriche braucht, oder nicht, oder ob man z.B. "packed" vor oder > hinter dem "struct" schreibt? Wer soll sich bitte hier ,,einigen''? Die Compilerhersteller untereinander, jenseits des Standards? Das klappt nur bedingt. > Da verstehe ich die Leute gut, die bei Bascom bleiben und sich den > bescheuerten C-Dschungel ersparen. Genau. Wo kein Standard da ist sondern nur eine proprietäre Lösung, braucht man sich auch an keinen Standard zu halten. ;-)
Joachim Müller wrote: > Für einen C-Anfänger ist es leider oftmals unverständlich, warum es > solche Unterschiede geben muss. Namen wie "asm" sind Erweiterungen gegenüber dem Sprachstandard. Wer solche Erweiterungen verwendet, und trotzdem dem Compiler beispielsweise mit -std=ansi oder -std=c99 mehr oder weniger bewusst(?) mitteilt, dass er sich ausschliesslich an den jeweiligen ANSI-Standard halten soll, der sollte sich dann eher an die eigene Nase fassen. Und genau deshalb existiert die Alternative in Form von _asm_, denn solcherart benannte Erweiterungen sind von ANSI gedeckt. Übrigens sind für Anfänger viele Dinge unverständlich. Das ist das Wesen von Anfängern. > Ist das reine Willkür der "Macher" oder geht's hier um irgendwelche > Egos? Weder noch. > Da verstehe ich die Leute gut, die bei Bascom bleiben und sich den > bescheuerten C-Dschungel ersparen. Bascom hat nur einen Autor und keinerlei Standard. C existiert seit 30 Jahren und mittlerweise im dritten Standard. Nicht wirklich direkt vergleichbar. Aber wenn dich sowas nervt, bleib lieber bei Bascom. Übrigens fällt mir im Kontext von Microcontrollern grad kein Compiler ein, der sich stärker dem Standard verpflichtet fühlt als GCC.
Andreas Kaiser wrote: > Übrigens fällt mir im Kontext von Microcontrollern grad kein Compiler > ein, der sich stärker dem Standard verpflichtet fühlt als GCC. IAR, ganz eindeutig. Das ist die bislang vollständigste C99- Implementierung, die ich erlebt habe (wenngleich zumindest vor einem Jahr deren _Pragma() noch buggy war). Die Standardbibliothek bietet alles bis zum kompletten wide character Handling. Ist auch kein Wunder, sie stammt von P. J. Plauger, der seit Jahren selbst bei der Implementierung und Standardisierung von C dabei ist. ;-) Aber du hast natürlich Recht. Nach IAR kommt hinsichtlich der Vollständigkeit und Korrektheit der C99-Implementierung wohl der GCC sofort danach.
Bitte Jungens Keinen Glaubenskrieg!! Ich wusste nicht das ich mit std=c99 mir selber ein Bein gestellt habe! - eben Anfänger - DAU - gelegenheits/Wochenendprogrammierer Habe halt versucht eine andere Fehlermeldung beim Compilieren weg zu bekommen. Na ja mit dem dargestellten Erfolg :( Es beruhigt mich allerdings etwas das mir glaub ich diese Unwissenheit als Dau zugestanden wird. Nochmals Danke und vertragt euch wieder - bitte :) Gruss Reiner
Hallo Ihr da draussen So mit std=gnu99 hat das Kompilieren geklappt. Und beim verbliebenen Fehler (PGM_??? - makro zum zugriff auf Programmspeicher) weiss ich auch schon wohl der Hase im Pfeffer liegt. Ist aber erstaunlich mühsam C-Code zu über setzten hätte ich nicht erwartet. Gruss Reiner
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.