AVR Tiny 416 GCC Problem

Gast #6599237
Lesenswert?
• ▲
▼
Hallo,

ich bin nach langer Zeit wieder einmal dabei einen AT Tiny 416 zu 
programmieren.

Momentan sind es ca. 20 Zeilen C Code und äusserst trivial. Nur habe ich 
einen komischen Effekt im AVR Studio. Wenn ich den Code übersetzen lasse 
zum Debuggen erhalte ich folgenden Compiler  Output.

Using "RunOutputFileVerifyTask" task from assembly "C:\Program Files 
(x86)\Atmel\Studio\7.0\Extensions\Application\AvrGCC.dll".
  Task "RunOutputFileVerifyTask"
        Program Memory Usage   :  3102 bytes   75.7 % Full
        Data Memory Usage     :  3 bytes   1.2 % Full
        Warning: Memory Usage estimation may not be accurate if there 
are sections other than .text sections in ELF file
  Done executing task "RunOutputFileVerifyTask".

Dieser suggeriert mir das nach einigen Zeilen C-Code der Controller (4k) 
mit 75,7% belegt ist.

Übersetze ich den Quellcode im Release Modus erhalte ich folgenden 
Output:
Done executing task "RunCompilerTask".
  Using "RunOutputFileVerifyTask" task from assembly "C:\Program Files 
(x86)\Atmel\Studio\7.0\Extensions\Application\AvrGCC.dll".
  Task "RunOutputFileVerifyTask"
        Program Memory Usage   :  510 bytes   12.5 % Full
        Data Memory Usage     :  3 bytes   1.2 % Full
        Warning: Memory Usage estimation may not be accurate if there 
are sections other than .text sections in ELF file
  Done executing task "RunOutputFileVerifyTask".

Da sind nur 12.5% des Programmspeichers belegt. An den Compilerschaltern 
wurde nichts verändert.

Meine Frage geht dahin, was wird da alles im Debug Modus dazugelinkt, 
was ich garnicht benötige. Schon garnicht ein printf etc.

Wie bekomme ich den Compiler dazu dass er mir nicht über 50% mehr Code 
erzeugt bzw. dazulinkt? Wo gibt es dazu Einstellungen?

Ich hoffe es kann mir jemand helfen.

Ciao Hans

Das ist im wesentlichen der Code es geht dabei um eine Entprellroutine
1
/*
2
* Periodic Interrupt
3
* wird alle 60 ms aufgerufen
4
*/
5
ISR(RTC_PIT_vect)
6
{
7
  /* Insert your PIT interrupt handling code here */
8
    if(Button_get_level() == 0){
9
     ButtonTick--;
10
     if(ButtonTick == 0){
11
      ButtonTick = BUTTONTICKS;
12
      ButtonPressedFlag = true; 
13
     }
14
  } else {
15
     ButtonTick = BUTTONTICKS;
16
  }
17
  /* The interrupt flag has to be cleared manually */
18
  RTC.PITINTFLAGS = RTC_PI_bm;
19
}
20

21
int main(void)
22
{
23
  /* Initializes MCU, drivers and middleware */
24
  atmel_start_init();
25
    LED_set_level(false); // LED einschalten
26
  /* Replace with your application code */
27
  while (1) {
28
    if(ButtonPressedFlag == true){
29
       LED_set_level(true)
30
    }
31
    
32
  }
33
}
Gast #6599341
Lesenswert?
• ▲
▼
Hallo Veit,

im C Code ist kein Fehler. Der funktioniert. Ich habe den Code nur 
gepostet um zu zeigen das es sich wirklich nur um einfach trivialen Code 
handelt der nur wenige Zeilen umfasst.

Es geht mir darum warum der GCC Compiler im Debug Modus soviel unötigen 
Overhead erzeugt wie ihn der Compiler Output zeigt. Im Debug Mode sind 
75.7% vom Programmspeicher belegt, im Release Modus sind nur 12.5% 
belegt. Da wird doch irgendetwas dazu gelinkt (printf?) was ich garnicht 
benötige.

Wie kann ich das verändern? In den Compiler Options bzw. Linker Options 
ist nichts (für mich wenigstens) zu finden.

Danke Hans
#6599363
Lesenswert?
• ▲
▼
Hallo,

ich weiß nicht was du für "Debug" an Optionen gesetzt hast. Debuglevel 
geändert? Mach den gezeigten Code kompilierfähig und zeige die 
Projekteinstellungen. Dann hat jeder die gleiche Ausgangsbasis. Auch 
wenn der Code fehlerfrei ist, ist das Release/Debug Ergebnis abhängig 
vom Code, was der Compiler daraus macht. Weil er dann unterschiedlich 
optimiert.
Gast #6599400
Lesenswert?
• ▲
▼
Hallo Veit,

danke für deine Hilfe, ich habe die Compiler Einstellungen verglichen 
und bemerkt das im Debug Mode wegen des Debuggens alle Optimierunngen 
abgeschaltet waren.

Ich habe dies in Optimze Size geändert (wie im Release Mode eingestellt) 
und erhalte nun das gleiche Ergebnis für den Code Size.

Ciao Hans

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.