Zahlenwert negieren

Nur eine kurze Frage über die Codeerzeugung von Arduino.

Wenn ich z.B. von einem Integer-Wert die negative Form haben will kann ich schreiben x = ~x + 1 oder x = -x. Wird beim zweiten eine Multiplikation ausgeführt? Scheinbar das Gleiche, da der Flashverbrauch exakt gleich ist. Kann man sich den Machinencode direkt in der Arduino IDE anzeigen?

Du hast es mit einem optimierenden Compiler zu tun. Der macht oft vieles ganz anders als man denkt.

In der Arduino IDE geht es nicht. Das muss man extra Disassemblieren. Mit Visual Micro kann man einstellen dass man es direkt anzeigen kann.

LeRoi: ... Kann man sich den Machinencode direkt in der Arduino IDE anzeigen?

In der IDE wohl nicht (was die angeht, bin ich allerdings ziemlich ahnungslos).

Ich habe mir allerdings mal ein Makefile geschrieben, mit dem auch der Maschinencode eines Programms erzeugt werden kann. Das reine Makefile liegt hier. Siehe Abschnitt „asm“

Gruß

Gregor

Die %TEMP%\build…tmp<deinSketch>.hex kannst du dir mit jedem Texteditor ansehen. Die enthält den nackten binären Maschinencode als lesbaren Text.
Was du vermutlich willst, ist der erzeugte Assemblercode. → google mal avr-objdump

Das geht mit einem einfachen Trick, auch direkt aus der IDE. Dann wird beim kompilieren automatisch ein Assembler Dump im Build Verzeichnis erzeugt.

Dazu braucht es einen Eintrag in der platform.txt, als letzte Zeile:

recipe.hooks.linking.postlink.1.pattern=E:\bin\avr_asm_dump.bat "{compiler.path}avr-objdump"   "{build.path}/{build.project_name}.elf"    "{build.path}/{build.project_name}.asmdump"

Und eine Batchdatei, da die Umleitung nicht aus der IDE direkt funktioniert:

@Echo OFF
%1  -h -S  %2 > %3

Viel Spaß damit! ;-)

michael_x:
Die %TEMP%\build…tmp<deinSketch>.hex kannst du dir mit jedem Texteditor ansehen. Die enthält den nackten binären Maschinencode als lesbaren Text.
Was du vermutlich willst, ist der erzeugte Assemblercode. → google mal avr-objdump

Ja, Assemblercode ist ja nur die etwas leserlichere Form davon.

combie: Das geht mit einem einfachen Trick, auch direkt aus der IDE. Dann wird beim kompilieren automatisch ein Assembler Dump im Build Verzeichnis erzeugt.

Dazu braucht es einen Eintrag in der platform.txt, als letzte Zeile:

recipe.hooks.linking.postlink.1.pattern=E:\bin\avr_asm_dump.bat "{compiler.path}avr-objdump"   "{build.path}/{build.project_name}.elf"    "{build.path}/{build.project_name}.asmdump"

Und eine Batchdatei, da die Umleitung nicht aus der IDE direkt funktioniert:

@Echo OFF
%1  -h -S  %2 > %3

Viel Spaß damit! ;-)

Danke, ich werds mal ausprobieren.