Forum: Compiler & IDEs Atmel Studio erzeugt aus C Assembler Code?


von sten (Gast)


Lesenswert?

Habe irgendwo mal gelesen das, wenn man in Atmel Studio (Version 6 oder 
höher) in C Programmiert und das ganze dann Kompiliert, Atmel Studio aus 
dem C-Code einen Assembler Code und aus dem Assembler Code dann das 
HEX-File was in den ATmega/tiny rein kommt erzeugt.

Ist das so richtig?

Und wenn ja, wie oder wo kann ich mir in Atmel Studio das erzeugte 
Assembler File ansehen? Bzw. was muss ich in Atmel Studio eventuell 
einstellen, um das erzeugte Assemblerfile zu Gesicht zu bekommen?
Oder wo und mit welcher File-Extension wird denn das erzeugte 
Assemblerfile dann abgelegt?

: Gesperrt durch Moderator
von Dietrich L. (dietrichl)


Lesenswert?

Vielleicht hilft das weiter:
Beitrag "Interpretation AVR-GCC *.lss File"

von sten (Gast)


Lesenswert?

Dietrich L. schrieb:
> Vielleicht hilft das weiter:
> Beitrag "Interpretation AVR-GCC *.lss File"

DANKE hat geholfen.

Nachdem ich auf "Build Solution" im Atmel Studio klicke, wird in dem 
Projektverzeichnis des C-Code Programms ein File mit der Extension "LSS" 
erzeugt. Da steht dann der Assembler Code drin.
...mmhh sehr interessante Sache. Da kann man sich öfters mal ansehen, 
was Atmel Studio so aus C-Code macht. Speziell wenn es sich um 
Rechenintensive Gleichungen im Programmcode handelt.

Danke nochmals für den Link.

von Fach Mann (Gast)


Lesenswert?

sten schrieb:
> Da kann man sich öfters mal ansehen,
> was Atmel Studio so aus C-Code macht. Speziell wenn es sich um
> Rechenintensive Gleichungen im Programmcode handelt.

Ich bin mir sicher dass du als versierter Programmierer noch
einiges an Codeoptimierung dazbringen können wirst.

Insbesondere weil dir klar ist dass Atmel Studio den Code
erzeugt (genau genommen ist es ja Visual Studio) und nicht
irgend so ein dahergelaufener Compiler.

von Rolf M. (rmagnus)


Lesenswert?

sten schrieb:
> Habe irgendwo mal gelesen das, wenn man in Atmel Studio (Version 6 oder
> höher) in C Programmiert und das ganze dann Kompiliert, Atmel Studio aus
> dem C-Code einen Assembler Code und aus dem Assembler Code dann das
> HEX-File was in den ATmega/tiny rein kommt erzeugt.
>
> Ist das so richtig?

Das ist nicht nur bei Atmel Studio (Version 6 oder höher) so, sondern 
bei allem, was gcc verwendet, da der gcc das (wie die meisten 
C-Compiler) so macht.

> Und wenn ja, wie oder wo kann ich mir in Atmel Studio das erzeugte
> Assembler File ansehen?

Wenn du dem Compiler die Option --save-temps mitgibst, werden alle 
Dateien, die zwischendrin so erzeugt werden, behalten und nicht nach dem 
Compilerlauf wieder gelöscht. Dazu gehört auch die generierte 
Assembler-Datei.
Man kann auch den Compiler mit der Option -S aufrufen. Dann hört er nach 
der Erzeugung des Assembler-Codes auf und speichert den ab, statt noch 
ein Object-File draus zu erzeugen.

> Oder wo und mit welcher File-Extension wird denn das erzeugte
> Assemblerfile dann abgelegt?

.s

von Stefan F. (Gast)


Lesenswert?

Ich würde gerne klar stellen das das Atmel Studio nur die 
Entwicklungsumgebung ist. Das Atmel Studio ist lediglich ein besserer 
Text Editor und eine grafische Bedien-Oberfläche für den Debugger.

Was du da gerade entdeckt hast, ist eine Eigenschaft des Compilers, und 
der wird vom Atmel Studio lediglich als Unterprogramm aufgerufen.

Mein Buch Band 3 erklärt, was da passiert und wie man den Compiler ohne 
Atmel Studio benutzen kann. 
http://stefanfrings.de/mikrocontroller_buch/index.html

von sten (Gast)


Lesenswert?

Fach Mann schrieb:
>
> Ich bin mir sicher dass du als versierter Programmierer noch
> einiges an Codeoptimierung dazbringen können wirst.
>
> Insbesondere weil dir klar ist dass Atmel Studio den Code
> erzeugt (genau genommen ist es ja Visual Studio) und nicht
> irgend so ein dahergelaufener Compiler.

Ich muß Dir als "Fach Mann" dazu ganz einfach sagen, das Atmel Studio 
für mich das "Eingangstor" ist, wo ich meinen C-Konformen Quellcode 
eingeben kann und am Ende ist ein Mikrocontroller der das macht was er 
soll.
Was alles dazwischen von Atmel Studio an Software oder Hardware 
verwendet wird, ist mir letztendlich eigentlich egal! Nur Funktionieren 
muss es!
Da ich nur Anwender und kein Entwickler von Atmel Studio bin, 
interessiert es mich auch nicht wie oder womit mein eingegebener 
C-Quellcode in ein Assembler Code übersetzt wird. Es interessiert mich 
auch nicht, womit dann der Assembler Code in ein HEX -File umgesetzt 
wird. Es interessiert mich auch nicht, wie das HEX-File über eine 
PC-Schnittstelle in den ISP oder JTAG Programmer kommt und es 
interessiert mich auch nicht, welche Software im Programmer läuft, der 
die Daten MC passend in dessen Flash speichert!

Das einzige was mich interessiert ist, das es funktioniert! Das mein MC 
auch genau das macht was ich ihm durch meinen Quellcode vorgegeben habe 
und nichts anderes.

Wenn ich ein Text ausgedruckt auf einem Stück Papier haben möchte, 
interessiert es mich ja auch nicht welches Betriebssystem und welcher 
Texteditor auf welcher PC Hardware läuft und welcher Drucker 
angeschlossen ist. Es müssen einfach nur am Ende die Buchstaben so auf 
dem Papier stehen wie ich diese eingetippt habe.

Und es mag sein, das GCC das non plus Ultra bei den C-Compilern ist. 
...hmm...von mir aus..., aber es stellt sich für mich jetzt nur die 
Frage, wenn doch der GCC aus C-Code ein Assembler Code erzeugt, warum 
programmiert man dann nicht gleich in Assembler?
Aber bitte! Dies ist nur eine Feststellung und keine Aufforderung zur 
nicht endenden Diskussion ob Assembler oder C besser sei! Denn davon ist 
das Forum schon überfüllt!

von Rolf M. (rmagnus)


Lesenswert?

sten schrieb:
> Ich muß Dir als "Fach Mann" dazu ganz einfach sagen, das Atmel Studio
> für mich das "Eingangstor" ist, wo ich meinen C-Konformen Quellcode
> eingeben kann und am Ende ist ein Mikrocontroller der das macht was er
> soll.
> Was alles dazwischen von Atmel Studio an Software oder Hardware
> verwendet wird, ist mir letztendlich eigentlich egal! Nur Funktionieren
> muss es!

Das klingt nach "wasch mich, aber mach mich nicht nass". Du musst dich 
entscheiden: Willst du nur Code reinkippen und Programm rauskriegen, 
dann brauchen dich die Details (wie z.B. die des Assemblers) nicht 
interessieren. Willst du mehr, hilft es ungemein, wenn man versteht, was 
hinter den Kulissen abgeht.
Wenn du nur Auto fahren willst, brauchst du nicht zu wissen, was in so 
einem Auto alles verbaut ist. Wenn du aber selber den Motor tunen 
willst, solltest du schon eine gewisse Vorstellung davon haben, wie so 
ein Motor denn funktioniert.

> Das einzige was mich interessiert ist, das es funktioniert! Das mein MC
> auch genau das macht was ich ihm durch meinen Quellcode vorgegeben habe
> und nichts anderes.

Dann ist doch alles gut. Warum fragst du dann überhaupt?

von Md M. (Firma: Potilatormanufaktur) (mdma)


Lesenswert?

sten schrieb:
> wenn doch der GCC aus C-Code ein Assembler Code erzeugt, warum
> programmiert man dann nicht gleich in Assembler?

Probier es aus, du wirst es merken.

von Pittiplatsch, der liebe (Gast)


Lesenswert?

Md M. schrieb:
> Probier es aus, du wirst es merken.

Ja, mach das. Du wirst sehen: Es geht schneller, es ist übersichtlicher 
und da Du selbst den Assembler-Quelltext schreibst, weisst Du auch 
genau, was passiert. Ein C-Compiler kann Dir alles Mögliche 
weg-optimieren. 2 verschiedene Compiler erzeugen aus dem gleichen 
Quelltext unterschiedlichste Resultate. Das geht so weit, daß der 1. 
kiloweise Fehlermeldungen bringt, der 2. aber klaglos compiliert.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

sten schrieb:
> Dietrich L. schrieb:
>> Vielleicht hilft das weiter:
>> Beitrag "Interpretation AVR-GCC *.lss File"
>
> DANKE hat geholfen.

Wobei in einem "lss" oder "lst" KEIN Assembler-Code steht.  Es handelt 
sich dabei lediglich um Disassembly Dumps, das nicht weiter zur 
Codeerzeugung verwendet wird.

Der von GCC erzeugte Assembler-Code landet in einer temporären Datei, 
die nach dem Lauf wieder automatisch entfern wird — oder es wird 
garkeine temporäre Datei erzeugt wie mit -pipe (was bei großer Projekten 
die Generierung becshleunigen kann).

Mit -save-temps als gcc-Option wird der asm-Code nicht gelöscht und 
i.d.R bei den anderen generierten Dateien wie .o abgelegt, mit Endung 
.s.

von sten (Gast)


Lesenswert?

Pittiplatsch, der liebe schrieb:
>
> Ja, mach das. Du wirst sehen: Es geht schneller, es ist übersichtlicher
> und da Du selbst den Assembler-Quelltext schreibst, weisst Du auch
> genau, was passiert. Ein C-Compiler kann Dir alles Mögliche
> weg-optimieren. 2 verschiedene Compiler erzeugen aus dem gleichen
> Quelltext unterschiedlichste Resultate. Das geht so weit, daß der 1.
> kiloweise Fehlermeldungen bringt, der 2. aber klaglos compiliert.

Da kann ich absolut nur zustimmen!
Programmiere ja auch schon seit Jahrzehnten in Assembler und wollte nur 
mal sehen was GCC so drauf hat und letztendlich ausspuckt. Eventuell 
hätte man ja noch was lernen können... Aber so wie es aussieht und was 
ich bis jetzt gesehen habe, kann das GCC es auch nicht besser!

Ok, dann wollen wir es hier mal gut sein lassen und meine Frage hat sich 
ja auch durch die gute Antwort von Johann L. bestens Beantwortet.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

sten schrieb:
> 2 verschiedene Compiler erzeugen aus dem gleichen Quelltext
> unterschiedlichste Resultate.

2 unterschiedliche Assembler-Programmierer erzeugen für die
gleiche Aufgebenstellung 2 unterschiedliche Resultate.

Und jetzt?

Evtl. erzeugt sogar der gleiche Programmierer für die gleiche 
Aufgabe ein /anderes7 Resultat!

von Bernd K. (prof7bit)


Lesenswert?

sten schrieb:
> Da ich nur Anwender und kein Entwickler von Atmel Studio bin,
> interessiert es mich auch nicht wie oder womit [...] Es interessiert mich
> auch nicht [...] Es interessiert mich auch nicht [...] und es
> interessiert mich auch nicht [...]!
>
> Das einzige was mich interessiert ist, das es funktioniert!

Kauf Dir ein fertiges Produkt oder geb die Entwicklung irgendwo in 
Auftrag.

von Oliver S. (oliverso)


Lesenswert?

sten schrieb:
> Programmiere ja auch schon seit Jahrzehnten in Assembler und wollte nur
> mal sehen was GCC so drauf hat und letztendlich ausspuckt.

Na dann, schön, daß man mal drüber gesprochen hat. Ansonsten wenig neuer 
Erkenntnisgewinn...

Oliver

von Peter D. (peda)


Lesenswert?

sten schrieb:
> Aber so wie es aussieht und was
> ich bis jetzt gesehen habe, kann das GCC es auch nicht besser!

Niemand erwartet, daß der C-Compiler was besser kann. Aber er macht 
seine Aufgabe sauschnell und erlaubt auch dem Programmierer ein Problem 
viel schneller zu implementieren und das ist sein eigentlicher Vorteil.
Wenn man in Assembler das gleiche Problem in der 10-fachen Zeit 
gegenüber C lösen kann, ist das schon sehr gut.

Beitrag #5226981 wurde von einem Moderator gelöscht.
Beitrag #5230459 wurde von einem Moderator gelöscht.
Beitrag #5230480 wurde von einem Moderator gelöscht.
Beitrag #5230482 wurde von einem Moderator gelöscht.
Beitrag #5230498 wurde von einem Moderator gelöscht.
von Wolfgang (Gast)


Lesenswert?

sten schrieb:
> Das mein MC auch genau das macht was ich ihm durch meinen Quellcode
> vorgegeben habe und nichts anderes.

Was genau der µC macht, kannst du ihm nur in Assembler vorgeben. Sobald 
irgendein Compiler ins Spiel kommt, musst du dich damit abfinden, dass 
der das so macht, wie andere es für gut befanden. Du bist dann 
allenfalls Zuschauer im LSS-File.

Schon wenn du die Tuning-Möglichkeiten nützen möchtest, musst du dich 
mit dem Compiler und dessen Bedienung intensiver auseinandersetzen.

Beitrag #5230685 wurde von einem Moderator gelöscht.
Beitrag #5231012 wurde von einem Moderator gelöscht.
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

c-hater schrieb im Beitrag #5231012:
> wegzensierten

Du machst dich einfach nur lächerlich und unmöglich.  Worte wie 
"Wichser", "Hirni" oder "Arsch" mögen in deiner Familie, an deinem 
Arbeitsplatz und in deinem Freundeskreis — falls überhaupt noch existent 
— zum guten Umgangston gehören.

Dass das hier nicht der Fall ist, das finde ich gut.

Wenn du nicht in der Lage bist, Argumente zu bringen und diese auch 
mit Anstand vorzutragen, dann ist es einfach lächerlich, das als 
"Zensur" zu bezeichnen.  Wenn du nicht in der Lage bist, ohne 
Fäkalsprache zu argumentieren, dann landen eben auch deine Argumente in 
der Tonne.  So einfach ist das.

: Bearbeitet durch User
Beitrag #5231035 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.