Attiny13 nach ein paar Zeile Code voll?

Gast #2314349
Lesenswert?

Hallo,

wie kann es sein das wegen so wenig Code der Speicher so überfüllt ist?

Es handelt sich um einen Attiny13, getaktet mit dem internen 4,8 Mhz 
RC-Glied.
Das AVR-Studio gibt die Meldung im Anhang aus.

Danke für die Hilfe.
Angehängte Dateien:
Gast #2314376
Lesenswert?

Danke für die schnelle Antwort.
Hattest recht. Die habe ich vergessen. Jetzt hat er nur noch 13,5%.
(Finds drotzem noch viel für so wenig Code. Aber egal.)

Allerdings läuft es nicht so wie ich will.
Ich möchte an dem Ausgabe-Pin ein Signal für eine IR-Diode ausgeben.

Dieses Signal soll so aussehen:

500ms 38 kHz ausgeben.
500ms nichts ausgeben.
Und das selbe von Vorn.

Momentan macht Er was Er will. Mal gibt Er 38kHz aus. Dann für ne kurze 
Zeit 0V oder 5V. Wild durcheinander.

Was mach ich falsch?
Persönliche Seite #2314424
Lesenswert?

Christian H. schrieb:
> Normal ist es definitiv nicht.

Das ist völligst normal. Eventuell sollte man bei Gelegenheit auch mal 
in das Handbuch der avr-libc reinschauen.
Es gibt sogar eine Warnung, wenn man die _delay_xyz Funktionen ohne 
Optimierung benutzt. Einfach mal die Augen aufmachen.

Hintergrund ist, dass ohne Optimierung die float-lib nicht rausoptimiert 
wird. Und die ist eben riesig verglichen mit der Flashgröße eines 
Tiny13.
#2314449
Lesenswert?

Max schrieb:
> Mit C auf nen tiny13 rumzubügeln is auch heftig, da kostet ja der
> startup schon fast 10% ...

Da kann man Abhilfe schaffen:
1
// From Peter Fluery AVRFreaks Aug 10 2005 - to remove interrupt Vector table
2
// put -nostartfiles in LDFlags, add the following function saves wasted space
3
void __jumpMain (void) __attribute__ ((naked)) __attribute__ ((section (".init9")));
4

5
void __jumpMain(void)
6
{   
7
    asm volatile ( ".set __stack, %0" :: "i" (RAMEND) );
8
    asm volatile ( "clr __zero_reg__" );        // r1 set to 0
9
    asm volatile ( "rjmp main");                   // jump to main()
10
} 
11

12

13
int main(void) 
14
{ 
15
       /* ... */
16
}
Quelle: www.tfelectronics.com.au/bin/SmileyBoot.c

Gruß Skriptkiddy
Persönliche Seite #2314499
Lesenswert?

Simon K. schrieb:
> Ich würds sein lassen. Dadurch verliert man auch alle Initialisierungen
> von globalen Variablen beispielsweise.

Die werden sogar initialisiert weil gegen  __do_clear_bss 
und __do_copy_data gelinkt wird und so der init-Code aus der libgcc 
gezogen wird.

.bss wird allerdings zu Schrott initialisiert weil R1 sinnigerweise erst 
nach dem init-Code per Hand auf 0 gesetzt wird: Nach Power-Down haben 
AVR-GPRs mehr oder weniger "zufällige" Werte.

Ausserdem fehlt der Code zum Initialisieren des SP. Das .set da oben hat 
nur rein psychologische Funktion...

Wie oben steht ist's Hack und auch noch falsch...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren