Globale Variable in Interruptfunktion + 3000 Bytes Program

OP #2566324
Lesenswert?

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
OP #2566351
Lesenswert?

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

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