www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programmgröße


Autor: sandmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

        char brightness = 100;
  while (1)
  {
    PORTB |=  (1 << PB4);
          _delay_us(brightness);
          PORTB &= ~(1 << PB4);
          _delay_us(255 - brightness);
  }
}

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

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

void pwm(char brightness)  // PWM
{
  PORTB |=  (1 << PB4);
  _delay_us(brightness);
  PORTB &= ~(1 << PB4);
  _delay_us(255 - brightness);
}

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

  while (1)
  {
    pwm(100)
  }
}

hat das Programm folgende Größe:
avr-size --format=berkeley -t eiscube.elf
   text     data      bss      dec      hex  filename
   4186      264        0     4450     1162  eiscube.elf
   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?

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Z8 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
besorgs mir in "ASM" baby! :)

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das delay-Zeug mit Werten aufrufen, die zur Compilezeit bekannt sind. 
Bzw. wenn die Werte bekannt sind, nicht vor dem Compiler verstecken.

Johann

Autor: sandmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar, vielen Dank!

ist hieran etwas auszusetzen?
void delay_ms(int time)
{
    char i;
    for (i = 0; i < time; i++)
    {
        _delay_ms(1);
    }
}

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, es wird immer ungenau sein.

Autor: sandmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du es genau haben willst: nimm nen Timer...

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ist hieran etwas auszusetzen?

Jede Pause grösser 127 ms ist unendlich lang.

Autor: sandmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dankeschön! :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.