Forum: Compiler & IDEs Atmel Studio 7: Kein Source Code in lss file


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Manfred L. (manni)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe einen simplen C code für den ATmega8 mit Atmel Studio 7 (AS7) 
geschrieben. Es wird alles ordnungsgemäß compiliert und der 'geflashte' 
code im processor läuft auch genau so wie programmiert.

Einziges Problem:
Normalerweise (in Atmel Studio 6) war im .lss file immer der 
vollsträndige source code mit eingefügt. Aber mit AS7 ist bei einigen C 
functions der source code nicht enthalten.

Im attached .lss ist z.B. ab adresse 0x266 kein source code mehr 
enthalten. Erst ab 0x412 ist der source code wieder eingefügt. Liegt es 
vielleicht daran, dass die C functions einfach zu 'klein' sind, z.B.:
1
uint8_t SM_GetRightSlowSpeedFactor (void)
2
  {
3
  return SlowSpeedFactorRight;
4
  }

Hat vielleicht jemand eine Idee, woran das liegt, oder wie man dieses 
"Problemchen" beheben kann ?

von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Hat das C ev den code in eine Funktion eingebettet?

Es kann passieren das der Code nicht generiert wird, weil er in einer 
Funktion bereits enthalten ist ;-)

Beitrag #6827010 wurde vom Autor gelöscht.
von Manfred L. (manni)


Lesenswert?

Patrick L. schrieb:
> Hat das C ev den code in eine Funktion eingebettet?

Soweit ich das sehen kann nicht, z.B. bei der C function:
1
void SM_Right_Stop (void)
2
  {
3
  RIGHT_ENABLE_OUT = 0;
4
  iRunningRight = FALSE;
5
6
  return;
7
  }
ist der hex code ab Adresse 0x26e ordungsgemäß abgelegt und wird dann 
bei Adresse 0x134 mit "rcall" aufgerufen.

: Bearbeitet durch User
von erklehr behr (Gast)


Lesenswert?

Manfred L. schrieb:
> Hat vielleicht jemand eine Idee, woran das liegt

Vermutlich an der Optimierung des Compilers. Schalte mal die
Optimierungsstufe auf -O0 (optimize none). Dann sollte jede
Funktion (sei sie noch so dumm) einzeln auftreten.

von Adam P. (adamap)


Lesenswert?

erklehr behr schrieb:
> Vermutlich an der Optimierung des Compilers.

Daran hab ich auch gerade gedacht.

Klar kann man Funktionen explizit als inline deklarieren,
aber Compiler sind da je nach Einstellung echt schlau...

Wozu ein Function Call mit PUSH und POP und evtl. Registersicherung 
verursachen, wenn es doch nur eine Anweisung in der "Funktion" ist.

von Manfred L. (manni)


Angehängte Dateien:

Lesenswert?

erklehr behr schrieb:
> Schalte mal die
> Optimierungsstufe auf -O0

Hab's mal gleich gemacht, aber das Ergebnis ist immer noch das Gleiche, 
siehe attached neues .lss file. Ab Adresse 0x390 gibt es keinen 
zugehörigen source code mehr. Der beginnt erst wieder bei Adresse 0x7e8.

BTW: diese Methode wäre ja auch nur eine Krücke, denn der Code im 
Prozessor mit -O1 wäre ja nicht zu vergleichen mit dem was im .lss file 
steht, wenn mit -O0 compiliert.

Bei Bedarf kann ich die vier source code files ja mal anhängen und ihr 
testet mal mit Eurem AS7.

von Adam P. (adamap)


Lesenswert?

Manfred L. schrieb:
> Bei Bedarf kann ich die vier source code files ja mal anhängen und ihr
> testet mal mit Eurem AS7.

Die Frage ist, warum hast du das überhaupt nachgeschaut?
Also ich schaue nicht nach, was der Compiler daraus macht, solange es 
sich so verhält wie ich es möchte.

Klar verstehe ich deine Neugier, aber wie bist du darauf gekommen?

: Bearbeitet durch User
von Manfred L. (manni)


Lesenswert?

Adam P. schrieb:
> Wozu ein Function Call mit PUSH und POP und evtl. Registersicherung
> verursachen, wenn es doch nur eine Anweisung in der "Funktion" ist.

Ich mag es halt etwas strukturierter, auch wenn der code etwas größer 
wird

Adam P. schrieb:
> Die Frage ist, warum hast du das überhaupt nachgeschaut?

Ja, du hast Recht, normalerweise schau ich da auch nicht rein, aber wenn 
der erstellte code mal nicht so funktioniert wie gewünscht (speziell bei 
etwas komplizierten pointer Anweisungen) kann ich in der Regel den 
Fehler sofort identifizieren.

von erklehr behr (Gast)


Lesenswert?

Manfred L. schrieb:
> Bei Bedarf kann ich die vier source code files ja mal anhängen und ihr
> testet mal mit Eurem AS7.

Ja mach mal bitte.
Vielleicht doch mit Projekt-Folder-Inhalt. Da kann ja
einiges eingestellt/verstellt sein.

von Manfred L. (manni)


Angehängte Dateien:

Lesenswert?

erklehr behr schrieb:
> Ja mach mal bitte.

Anbei der komplette Ordner mit allen Project files.
Soweit ich mich erinnere, habe ich an den 'default' Eigenschaften im 
Projekt-Ordner nichts 'verdreht'.

Ich danke Dir schon mal für Deine Mühe !!!

von erklehr behr (Gast)


Lesenswert?

Manfred L. schrieb:
> Hab's mal gleich gemacht, aber das Ergebnis ist immer noch das Gleiche,
> siehe attached neues .lss file.

Ich denke - da im lss File kein Aufruf von SM_GetRightSlowSpeedFactor
enthalten ist - es wird der Code einfach rausgeschmissen. Er wird
einfach nicht gebraucht. Alle Zugriffe auf die Variable
<SlowSpeedFactorRight> werden direkt gemacht, also ohne Verwendung
der Zugriffsfunktion.

von erklehr behr (Gast)


Angehängte Dateien:

Lesenswert?

erklehr behr schrieb:
> es wird der Code einfach rausgeschmissen.

Ja, isso.

Linker --> Optimization --> Garbage collect unused section

Wenn man diese Option disabled dann kommt auch Code bei der
Zugriffs-Funktion heraus.

von Manfred L. (manni)


Lesenswert?

erklehr behr schrieb:
> Ja, isso.
>
> Linker --> Optimization --> Garbage collect unused section

Einfach genial !!!

Ich danke Dir vielmals für diesen Hinweis.
Damit ist das Problem(chen) behoben, auch unter der Berücksichtigung, 
dass der gelistete Code einfach rausgeschmissen wird.

Nochmals vielen Dank, damit ist der (gestrige) Tag gerettet !

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
Noch kein Account? Hier anmelden.