Es lässt sich leider nicht gut debuggen mit dem define.
Es funktioniert, wenn ich den code ausschreibe. Ersetze ich ihn durch
das define, gehts insofern nichtmehr, dass nix am Port rauskommt.
Aber es müsste ja folglich ein syntaxfehler sein, weil in kompletter
Schreibweise geht es.
Ich habe mir jetzt erstmal mit einer void.Funktion set_data(tmp)
beholfen, aber das define wäre mir lieber.
gcc -E foo.c -o foo.i
Liefert dir deinen C code nachdem der Preprocessor darüber gelaufen ist.
Da kannst du nachsehen zu was dein define aufgelöst wird.
MaggiPfanni schrieb:> Wie genau mach ich das in Eclipse?
Indem du ein Terminalfenster öffnest und die paar Zeilen mit der
Tastatur eintippst. Nix Maus, nix GUI.
MaggiPfanni schrieb:> Ich compiliere mit Eclipse und nicht> über Console.
Ja. Schalt' das Eclipse dafür aus, deinen Verstand ein, und nimm
genau für diesen Zweck eine Console. Dafür ist sie doch da. Das
ist kein "Rückschritt ins vorige Jahrhundert" oder sonst etwas, das
zu benutzen dir verboten wäre.
Wenn du uns noch die genauen Kommandozeilen sagst, die dein Eclipse
dir sonst generiert zum Compilieren, dann können wir das Beispiel
auch noch konkreter aufschreiben.
Jörg Wunsch schrieb:> Das> ist kein "Rückschritt ins vorige Jahrhundert" oder sonst etwas, das> zu benutzen dir verboten wäre.
Das sagte ja auch keiner.
MaggiPfanni schrieb:> Ich habe mir jetzt erstmal mit einer void.Funktion set_data(tmp)> beholfen, aber das define wäre mir lieber.
Warum? Ich würde vermuten, dass der Compiler die Funktion inlined und
das Ergebnis in Assembler gleich aussieht.
damit ich meinen code generischer gestalten kann. Mir gehts aber
eigentlich nur um die frage ob das define wirklich gleichwertig ist.
Denn eigentlich müsste das dann funktionieren. Ich kanns mir nur so
erklären, dass der Präprozessor das kaputt macht :-/
Bin ratlos.
Was kommt denn nun raus, wenn du
avr-gcc -mmcu=atmega8 -E -o specs.i specs.c
laufen lässt? Du hast deinen Controllertyp nicht angegeben, es kann
also sein, dass dein Compiler anders heißt und so etwas wie -mmcu
bei deinem Compiler auch anders geregelt ist. Du lässt dir ja leider
jedes Stück Information aus der Nase ziehen hier.
Jörg Wunsch schrieb:> Was kommt denn nun raus, wenn du>> avr-gcc -mmcu=atmega8 -E -o specs.i specs.c
Wie gesagt ich versteh nur Bahnhof. Gib den Ansatz bitte auf, das läuft
nur darauf Hinaus dass du mir entweder Grundlagen erklären oder es
selbst machen müsstest. Ich hab keine Ahnung wie man gcc über die
Console auruft. Wenn ich das eingebe kommt gcc unknown command.
Controller ist der STM32F407
MaggiPfanni schrieb:> #define set_data(nib) GPIO_Write(DATA_PORT,((GPIO_ReadInputData(DATA_PORT) &
0xfff0) | (nib>>4)))
Da fehlen die Klammern um den Parameter nib sowie um das ganze Makro:
Das macht man immer so, denn die Makros sind nur simple Textersetzung,
und da können ohne die Klammern fiese Dinge wegen der
Operator-Prioritäten passieren.
Tadaa...
Aber es ist wirklich keine schlechte Idee, zu wissen, wie man "von Hand"
per Kommandozeilenaufruf kompiliert. Früher oder später kommt man da
nicht drumherum.
Also Terminal (bzw unter Windows: DOS-Box) öffnen, mit "cd" in den
Projekt-Ordner wechseln, per "gcc", o.ä. wie oben gepostet kompilieren.
MaggiPfanni schrieb:> Controller ist der STM32F407
Dann gehst du in das Verzeichnis, in dem sich die Quelldatei befindet;
das macht man mit dem Kommando "cd".
Das korrekte Kommando müsste dann heißen:
(Zumindest ist das das, was Gugel mir hier auf die Schnelle bringt.)
Da du nicht mehr in der Welt von MS-DOS lebst, kann man das ja auch
per copy&paste dort ins Kommandozeilenfenster fallen lassen und muss
nicht alles tippen.
Mit den entsprechenden Angaben bereits im ersten Posting hätte man
dir das auch schon eher schreiben können.
MaggiPfanni schrieb:> Der Weise schrieb:>> Früher oder später kommt man da nicht drumherum.>> Darf ich fragen warum?
Weil es immer wieder mal Fälle gibt, in denen man Dinge vom Compiler
will, die der zwar grundsätzlich kann, an die aber der Entwickler der
IDE nicht auch nur im entferntesten daran gedacht hat, dass über die IDE
möglich zu machen.
Merke: Das universellste Werkzeug auf einem Computer ist immer noch eine
Commandline. Da kommt kein Mausgeschubse ran.
MaggiPfanni schrieb:> @Der Weise:>> Super, und schon gehts.
Wenn das dein Problem gelöst hat, dann hast du uns im Eröffnungsposting
nicht deinen richtigen Code gezeigt. Denn im dort gezeigten Beispiel
macht es keinen Unterschied.
> Danke.> Es war mir schon klar, dass es ein Syntax Problem ist.
Eigentlich nicht.
Das eigentliche Problem besteht darin, dass die nicht klar ist, was ein
Makro ist und wie der Präprozessor arbeitet.
Ein Makro ist einfach nur eine Textersetzung.
Du schreibst
1
set_data(tmp);
und der Präprozessor ersetzt den Text "set_data" durch den Makroinhalt
wobei sich der Präprozessor nicht darum kümmert, ob sich dadurch
irgendwelche arithmetischen oder sonstigen Regeln ändern.
D.h. der Präprozessor macht beinhart aus
1
#define DOPPELT(x) 2*x
2
3
y=DOPPELT(3+5);// 2 mal 8 -> 16
das hier
1
y=2*3+5
und ausgerechnet ergibt das nun mal 11 und nicht die erwarteten 16. Dem
Präprozessor ist das egal, der macht nur Textersetzungen und sonst
nichts. Und erst nach diesen Textersetzungen geht das Ergebnis zum
Compiler, der dann den Texten eine Bedeutung im Sinne der Analyse einer
Programmiersprache beimisst und die Operationen dann in Code
implementiert.
MaggiPfanni schrieb:> Error: Der Befehl "arm-none-eabi-gcc" ist entweder falsch geschrieben> oder konnte nicht gefunden werden.
Schlecht eingerichtete Toolchain. Die Umgebungsvariable %PATH%
sollte das Verzeichnis mit einschließen, in das die Toolchain
compiliert worden ist. Das hat deine Toolchain beim Installieren
offenbar nicht getan, stattdessen hast du das dann irgendwo deinem
Eclipse verklickern müssen.
Nein, mit dem erwiesenen Unwillen deinerseits, auch nur ein Stück
in dieser Richtung selbst nachzuvollziehen und zu erkunden, bin ich
hier raus. Wer denkt, dass man mit dem Besitz einer IDE keine Ahnung
mehr haben muss, wie die Toolchain darunter funktioniert, möge von
mir aus sehen, wie weit er mit dieser Strategie kommt. Hilft mir,
meinen Arbeitsplatz zu sichern.
Und bezüglich GCC usw.: ICh hab Eclipse als gesamtpaket installiert und
mich um gar nichts weiter kümmern zu müssen. Keine Ahnung wie gcc sich
da selbst eingenistet hat. Ich habe bisher nur über die IDE debuggt. Ich
habe keine AHnung von der Toolchain und habe hier lediglich nach einem
Syntaxfehler gesucht.
@ MaggiePfanni
Soweit sie die Sache betrifft, glaube ich offen gesagt nicht, das Du
Deine Haltung, auf Dauer durchhalten kannst, wenn Du Erfolg haben
willst.
Ich kenne keinen Softwareentwickler der für mehr als für das Kaffeeholen
bezahlt wird, der nicht zumindest die Basics der Compilierung, des
Linkens, von Makefiles und das Funktionsprinzips von Toolchains soweit
versteht, das er notfalls eingreifen kann oder bei einer neuen Toolchain
die richtigen Fragen stellen kann. Genauso wie er wenigstens ein
Basiswissen über die Bedienung des Hosts haben muss.
Für eine Hobbyisten gilt sinngemäß das selbe wenn er es ernsthaft
betreibt nicht auf Dauer ein Dilletant bleiben will.
Im übrigen verneint Deine Attitüde die Wichtigkeit der Aussagen von Karl
Heinz und Jörg nicht nur, sie rückt sie sogar in die Richtung der
Fehlinformation, was geradezu absurd, unverschämt und absurd unverschämt
ist. Vor allem Lichte der Tatsache das die eigentliche Frage nun
wirklich Basiswissen über den Präprozessor betriff, das Dir anzueignen
Du sowenig in der Lage warst, das man Dir kein Recht zugestehen mag,
hier erwiesenermaßen kompetente Leute herabzusetzen.
Bitte überdenke Deinen Standpunkt noch einmal, nachdem Du mit einem
professionellen Programmierer Deines Vertrauens über das Problem
gesprochen hast. Oder lass es bleiben.
Der Weise schrieb:> MaggiePfanni schrieb:>> Ich habe keine AHnung von der Toolchain> Genau das ist das Problem... So wird das nichts
Jau. Seh ich ein. Kanns mir nur eben nicht gradeso aus dem Hut zaubern.
Das dauert eben ne Weile sich das anzueignen. Da reicht zwei mal Googeln
nicht.
Gib mir etwas Zeit. Als ich die Frage gestellt habe dachte ich auch
nicht, dass dieses Gemecker hier derart ausartet und sich nurnoch mit
meinem Wissen über Toolchains befasst. Dass ich da ein Defizit habe ist
mir bereits klar geworden, nachdem es hier das zwölfte mal gesagt wurde.
Ich arbeite dran. Dauert nur eben seine Zeit.
Als ich die Frage gestellt habe, dachte ich wie erwähnt an einen
einfachen Syntax oder Schreibfehler.
Dennoch find ichs irgendwie echt anstrengend gegen diese Welle von
Kritiken anzukämpfen, die nichts weiter bezwecken als mir einzureden,
dass ich keine Ahnung habe und am besten die Flinte ins Korn werfen
soll.
MaggiPfanni schrieb:> die nichts weiter bezwecken als mir einzureden,> dass ich keine Ahnung habe und am besten die Flinte ins Korn werfen> soll.
Nein, wir wollten dich dazu motivieren, dir die Ahnung anzueignen,
rennen aber permanent gegen eine gefühlte innere Mauer in dir: "Ich
will das gar nicht wissen, was da passiert, und mein Problem ist ja
jetzt gelöst."
Beim nächsten vergleichbaren Problem wirst du daher hier wieder auf
der Matte stehen. Hättest du dir diesmal die Mühe gemacht zu
verstehen, worauf wir hinauswollen (was natürlich einen gewissen
Anteil an Eigenleistung erfordert), dann könntest du hingegen ein
vergleichbares Problem das nächste Mal selbst lösen. Kann ja sein,
dass du das Problem gerade dann hast, wenn du keinen Zugriff auf's
Forum hast, du aber die Lösung eher dringlich gebrauchen könntest …
Jörg Wunsch schrieb:> Nein, wir wollten dich dazu motivieren, dir die Ahnung anzueignen,> rennen aber permanent gegen eine gefühlte innere Mauer in dir: "Ich> will das gar nicht wissen, was da passiert, und mein Problem ist ja> jetzt gelöst."
Deine ehrvollen und pädagigisch wertvollen Ansätze in allen Ehren,
aber...
"Schalt' das Eclipse dafür aus, deinen Verstand ein"
"Nein, mit dem erwiesenen Unwillen deinerseits, auch nur ein Stück
in dieser Richtung selbst nachzuvollziehen und zu erkunden, bin ich
hier raus."
"Wer denkt, dass man mit dem Besitz einer IDE keine Ahnung
mehr haben muss, wie die Toolchain darunter funktioniert, möge von
mir aus sehen, wie weit er mit dieser Strategie kommt. Hilft mir,
meinen Arbeitsplatz zu sichern."
...sind alles keine Sätze um jemanden zu motivieren. Der Ton macht die
Musik und Musik hört man hier keine.
Aber hey, wir driften ab. Ich seh das Thema jetzt als erledigt an und es
wurde wieder zu viel Blutdruck in ein paar vergessene Klammern
investiert.
Ich seile mich hiermit aus diesem Thread ab.
Danke für die wenigen Hilfreichen Antworten.