Globale Variable in Interruptfunktion + 3000 Bytes Program

OP #2566324
Hallo zusammen

Ich habe folgenden Code:
1
/*
2
 * main.c
3
 *
4
 *  Created on: 25.02.2012
5
 *      Author: darkhedie
6
 */
7

8
#include <avr/io.h>
9
#include <util/delay.h>
10
#include <avr/interrupt.h>
11

12
volatile unsigned char ucDelay = 0;
13

14
#define   Out_0    PORTB &= ~(1<<PB3);
15
#define   Out_1    PORTB |= (1<<PB3);
16

17
ISR(PCINT0_vect)
18
{
19
  unsigned char ucTest = 0;
20
  ucDelay++;
21
        ucTest = ucDelay; //// Mit diesem werden 3000Bytes angehängt
22

23
  _delay_ms(ucTest );
24
  Out_1;
25
  _delay_ms(250);
26
  Out_0;
27

28
}
29

30

31
int main(void)
32
{
33
  DDRB = 0xFB;
34

35
  GIMSK |= (1<<PCIE);    //Interrupt Aktivieren
36
  PCMSK |= (1<<PCINT2);
37
  sei();
38

39

40
  while(1)
41
  {
42

43
  }
44
}


Wenn ich im Interrupt auf die Globale Variable umkopieren oder direkt 
der DelayFunktion übergeben möchte, so fügt der Compiler der Program 
Section mal eben 3000 Bytes an.

Woran kann das liegen?

Danke schonmal
Persönliche Seite
Daran, daß die Delay-"Funktion" mit Floatingpoint-Arithmetik arbeitet. 
Das macht solange nichts, wie sie mit einer Konstanten aufgerufen wird, 
da rechnet der Compiler das aus. Wenn sie aber mit einer Variablen 
aufgerufen wird, kann das der Compiler nicht, sondern erzeugt Code, der 
das zur Laufzeit berechnet.
OP
Rufus Τ. Firefly schrieb:
> Daran, daß die Delay-"Funktion" mit Floatingpoint-Arithmetik arbeitet.
> Das macht solange nichts, wie sie mit einer Konstanten aufgerufen wird,
> da rechnet der Compiler das aus. Wenn sie aber mit einer Variablen
> aufgerufen wird, kann das der Compiler nicht, sondern erzeugt Code, der
> das zur Laufzeit berechnet.

Vielen Dank für deine Antwort :)

Gibt es eine Delay Funktion welche ohne Floatingpoint arbeitet?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.