Atmel Studio 7: Kein Source Code in lss file

OP #6826984
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 ?
Angehängte Dateien:
Beitrag #6827010 wurde von einem Moderator gelöscht.
OP #6827018
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.
Gast #6827037
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.
#6827048
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.
OP #6827050
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.
Angehängte Dateien:
#6827051
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?
OP #6827057
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.
Gast #6827074
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.
OP #6827083
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 !

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.