Programmgröße

Gast #1187703
Lesenswert?

Hallo,

ich habe folgendes Programm:
1
#include <avr/io.h>        // Pins
2
#include <util/delay.h>    // Verzögerung
3
int main()
4
{
5
  DDRB |= (1 << DDB4);     // PortB Pin4 als Ausgang einstellen
6

7
        char brightness = 100;
8
  while (1)
9
  {
10
    PORTB |=  (1 << PB4);
11
          _delay_us(brightness);
12
          PORTB &= ~(1 << PB4);
13
          _delay_us(255 - brightness);
14
  }
15
}

dann hat das Programm folgende Größe:
1
avr-size --format=berkeley -t eiscube.elf
2
   text     data      bss      dec      hex  filename
3
    100        0        0      100       64  eiscube.elf
4
    100        0        0      100       64  (TOTALS)

Wenn ich allerdings die PWM-Funktion auslagere:
1
#include <avr/io.h>        // Pins
2
#include <util/delay.h>    // Verzögerung
3

4
void pwm(char brightness)  // PWM
5
{
6
  PORTB |=  (1 << PB4);
7
  _delay_us(brightness);
8
  PORTB &= ~(1 << PB4);
9
  _delay_us(255 - brightness);
10
}
11

12
int main()
13
{
14
  DDRB |= (1 << DDB4);     // PortB Pin4 als Ausgang einstellen
15

16
  while (1)
17
  {
18
    pwm(100)
19
  }
20
}

hat das Programm folgende Größe:
1
avr-size --format=berkeley -t eiscube.elf
2
   text     data      bss      dec      hex  filename
3
   4186      264        0     4450     1162  eiscube.elf
4
   4186      264        0     4450     1162  (TOTALS)

was bereits zu groß für meine ATtiny13 ist. Was kann ich machen, um die 
Programmgröße kleinzuhalten und trotzdem nicht auf Funktionen verzichten 
zu müssen?
Gast #1187706
Lesenswert?

Es wär ein Anfang, die Anleitung zur C-Bibliothek zu lesen. Da steht zum 
Beispiel drinne, dass man _delay_us und _delay_ms nur mit konstanten 
Werten benutzen soll.

Ansonsten empfiehlt sich für PWM ganz ungemein die Verwendung der 
PWM-Module des Prozessors.
Gast #1187842
Lesenswert?

Ok... also vielleicht mit einem Switch vorher prüfen in welcher 
Größenordnung das Delay liegt, solange warten und dann noch ein paar 
1ms-Delays hintendran. Damit könnte ich die Genauigkeit doch steigern, 
oder?

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