Forum: Mikrocontroller und Digitale Elektronik AtmelStudio Compilerprobleme?


von Holger (Gast)


Lesenswert?

Mahlzeit,

ich arbeite derzeit mit einem Atmel SAM4S.
Ich habe einige Probleme im Moment bei der Programmierung, vielleicht 
steh ich aber auch gerade nur einfach auf dem Schlauch.
Hauptproblem ist wohl, dass irgendwie meine Variablen nicht richtig 
initalisiert werden.

meine Hauptschleife sieht im Moment zu Testzwecken wie folgt aus:
1
int main(void)
2
{
3
  system_init();
4
        uint16_t TRX[3];
5
  TRX[0]=1;
6
  TRX[1]=2;
7
  TRX[2]=3;
8
  uint16_t TXB=0;
9
  uint16_t i = 0;
10
  while(1)
11
  {
12
    for(i=0; i<3; i++)
13
    {
14
      TXB=TRX[i];
15
    }
16
   udi_cdc_putc('n');
17
   delay_ms(500);
18
   }
19
}
Nun habe ich folgendes Problem:
ich habe einen Breakpoint in der For-Schleife gesetzt. Aber beim 
debuggen erreicht das Programm nie die Stelle.
Ich habe dann eine USB-Ausgabe hinzugefügt (auskommentierter Teil), die 
auch richtig funktioniert und auch einen Breakpoint darauf gesetzt.
Wenn ich nun die Variablen TXB, TRX und i überwache, sehe ich als Wert 
"Unkown location".

Woran liegt das ?

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Holger schrieb:

> Woran liegt das ?

Das liegt daran, dass der Optimizer rausgefunden hat, dass sich am 
externen Verhalten des Programms nichts ändert, wenn er die Variablen 
und die Schleife einfach rauswirft.
ALso hat er genau das getan. Dein Compiler ist nämlich ein hilfreicher. 
Der versucht für dich Laufzeit und/oder Speicherplatz aus dem Programm 
rauszuholen, wo er nur kann. Entdeckt er irgendwo eine 'Berechnung' 
deren Ergebnis überhaupt nicht benutzt wird, dann ist die 'Berechnung' 
offensichtlich für die Funktion des Programms nicht notwendig. Also: weg 
damit.

: Bearbeitet durch User
von Holger (Gast)


Lesenswert?

Ok kann man diese Optimierung irgendwie abschalten?
Mein Code-Beispiel ist vllt auch etwas falsch gewählt..
Aber wieso sagt der Debugger dann "Unkown location"
Ich hatte es auch schon, dass irgendwas mimt optimized da stand.

von Karl H. (kbuchegg)


Lesenswert?

Holger schrieb:
> Ok kann man diese Optimierung irgendwie abschalten?

Sicher.
Hängt von deiner IDE ab. Irgendwo gibt es einen Menüpunkt 'Options' oder 
'Configuration' und dort findet sich dann auch eine Einstellung, welchen 
Optimiergrad die IDE dem Compiler vorgibt.
Wenn du keine IDE benutzt, sondern ein Makefile, dann findet sich die 
entsprechende Angabe irgendwo da drinnen.


> Mein Code-Beispiel ist vllt auch etwas falsch gewählt..
> Aber wieso sagt der Debugger dann "Unkown location"

Weil im Programmtext eine Variable auftaucht, die es im laufenden 
Programm aber nicht gibt.

> Ich hatte es auch schon, dass irgendwas mimt optimized da stand.

dann gibt es noch den Fall, dass es eine Variable zwar formal gibt, das 
für sie aber kein Speicherplatz reserviert wird, weil der Compiler es 
geschafft hat, die Variable während ihrer Verwendungszeit komplett in 
einem CPU Register zu halten.

: Bearbeitet durch User
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Holger schrieb:
>> Mein Code-Beispiel ist vllt auch etwas falsch gewählt..
>> Aber wieso sagt der Debugger dann "Unkown location"
>
> Weil im Programmtext eine Variable auftaucht, die es im laufenden
> Programm aber nicht gibt.

Das ist nicht wesentlich. Wichtig ist, daß die Info in den 
Debug-Informationen enthalten ist, was bei halbwegs modernen 
Debug-Formaten wie DWARF-3 der Fall ist.  Beispielsweise wird in
1
void fun (void)
2
{
3
    int var = 0;
4
}
ein Eintrag für var erstellt und eingetragen, daß es den Wert 0 hat.

Oft hakt es an ältliche Debugger, die diese Information nicht adäquat 
auszuwerten oder anzuzeigen wissen. Der Debugger ist offenbar so 
engstirnig, daß er versucht, über die Adresse von var an dessen Wert 
zu gelangen, was natürlich fehlschlagen muß.

von Holger (Gast)


Lesenswert?

Also ich nutze das Atmel Studio Ver 6.1 zusammen mit dem Atmel SAM ICE
Ich werde es morgen nochmal auf eine andere Weiße probieren

Aber vielen Dank für die Antworten bisher!

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.