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
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.
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