Programmsprünge Funktionen

Gast #2215219
Lesenswert?

Hi Leute, ich bin ein AVR Anfänger,

ich hab mir ein kleines Programm geschrieben. Jetzt frage ich mich aber, 
wieso das Programm beim Debuggen nicht in die Funktion "Initialisierung" 
springen will.

1
#include <avr/io.h>
2
#include <avr/iom644p.h>
3
#include <avr/interrupt.h>
4
#include <math.h>
5
#include <stdlib.h>
6
#include <avr/pgmspace.h>
7
#include <avr/wdt.h>
8
#include <avr/alloca.h>
9
#include <avr/inttypes.h>
10
#include <util/delay.h>
11
#include <avr/eeprom.h>
12
#include <avr/cpufunc.h>
13
#include <avr/common.h>
14
#include <avr/twislave.h>
15

16
#ifndef F_CPU
17
#define F_CPU 16000000UL
18
#endif
19

20
//###################### Slave-Adresse
21
#define SLAVE_ADRESSE 0x50                 // Slave-Adresse
22

23
//###################### Macros
24
#define uniq(LOW,HEIGHT)  ((HEIGHT << 8)|LOW)      // 2x 8Bit   --> 16Bit
25
#define LOW_BYTE(x)          (x & 0xff)          // 16Bit   --> 8Bit
26
#define HIGH_BYTE(x)         ((x >> 8) & 0xff)      // 16Bit   --> 8Bit
27

28

29

30

31

32
#define sbi(ADDRESS,BIT)   ((ADDRESS) |= (1<<(BIT)))  // set Bit
33
#define cbi(ADDRESS,BIT)   ((ADDRESS) &= ~(1<<(BIT)))  // clear Bit
34
#define  toggle(ADDRESS,BIT)  ((ADDRESS) ^= (1<<BIT))    // Bit umschalten
35

36
#define  bis(ADDRESS,BIT)  (ADDRESS & (1<<BIT))    // bit is set?
37
#define  bic(ADDRESS,BIT)  (!(ADDRESS & (1<<BIT)))    // bit is clear?
38

39

40

41
void Initialisierung(void)
42
  {
43
  cli();
44
  //### PORTS  
45
  
46
  //### TWI 
47
  init_twi_slave(SLAVE_ADRESSE);      //TWI als Slave mit Adresse slaveadr starten 
48
  
49
  sei();
50
  }
51
  
52

53
int main()
54
{
55
  while(1)
56
  {
57
    Initialisierung();
58
  }
59
}
Gast #2215301
Lesenswert?

Newbie schrieb:
> ich hab mir ein kleines Programm geschrieben.
Wozu dann die riesige Liste Includes?

> Jetzt frage ich mich aber,
> wieso das Programm beim Debuggen nicht in die Funktion "Initialisierung"
> springen will.

Was passiert in init_twi_slave? Wenn da (testweise) nichts drinsteht, 
dann erkennt der Compiler, dass er sich eine Endlos-Initialisierung 
sparen kann und erzeugt dafür keinen Code.
Gast #2215311
Lesenswert?

Ich verwende das AVR Studio 5, die Optimierungen sind deaktiviert.

die Liste includes steht umsonst da, schon klar, dass es die nicht 
braucht. Ich hab sie aber mal lieber mit reingeschrieben, nicht, dass es 
was damit zu tun hat.

Bei mir springt der Debugger nur bei Interrupts
Gast #2215712
Lesenswert?

1
#include <avr/io.h>
2
#include <avr/iom644p.h>
3
#include <avr/interrupt.h>
4
#include <math.h>
5
#include <stdlib.h>
6
#include <avr/pgmspace.h>
7
#include <avr/wdt.h>
8
#include <avr/alloca.h>
9
#include <avr/inttypes.h>
10
#include <util/delay.h>
11
#include <avr/eeprom.h>
12
#include <avr/cpufunc.h>
13
#include <avr/common.h>
14
#include <avr/lcd.h>
15

16
#include <avr/twislave.h>
17

18
#ifndef F_CPU
19
#define F_CPU 16000000UL
20
#endif
21

22
// Slave-Adresse
23
#define SLAVE_ADRESSE 0x50               
24

25
// Macros
26
#define uniq(LOW,HEIGHT)  ((HEIGHT << 8)|LOW)      // 2x 8Bit   --> 16Bit
27
#define LOW_BYTE(x)          (x & 0xff)          // 16Bit   --> 8Bit
28
#define HIGH_BYTE(x)         ((x >> 8) & 0xff)      // 16Bit   --> 8Bit
29

30

31

32

33

34
#define sbi(ADDRESS,BIT)   ((ADDRESS) |= (1<<(BIT)))  // set Bit
35
#define cbi(ADDRESS,BIT)   ((ADDRESS) &= ~(1<<(BIT)))  // clear Bit
36
#define  toggle(ADDRESS,BIT)  ((ADDRESS) ^= (1<<BIT))    // Bit umschalten
37

38
#define  bis(ADDRESS,BIT)  (ADDRESS & (1<<BIT))    // bit is set?
39
#define  bic(ADDRESS,BIT)  (!(ADDRESS & (1<<BIT)))    // bit is clear?
40

41

42
//Zeit
43

44
volatile uint32_t millisekunden;
45
volatile uint32_t millisekunden_debug;
46

47

48
int init_I2C()
49
  {
50
  cli();
51
  //### PORTS  
52
  
53
  //### TWI 
54
  init_twi_slave(SLAVE_ADRESSE);      //TWI als Slave mit Adresse slaveadr starten 
55
  
56
  sei();
57
return 0;
58
  }
59

60

61
int init_timer()
62
{
63
  TCNT2   = 0;        //Timer auf 0 zurücksetzen
64
   TCCR2A |=(1<<WGM21);                  //1)Timer 2 mit CTC Modus aktivieren
65
   TCCR2B |= (1<<CS00) | (0<<CS01) | (1<<CS02);    //Prescaler 128
66
   //TCCR2B |= (1<<CS00) | (0<<CS01) | (0<<CS02);    //Prescaler 1
67
   TIMSK2|=(1<<OCIE2A);                   //3)Compare Interrupt aktivieren
68
   OCR2A=124;        //Compare Wert 124
69
   
70
   // I2C Interface einschalten
71
   
72
   Initialisierung();
73
   
74
   // Interrupts einschalten
75
   
76
  sei();
77

78
return 0;
79
  
80
}
81

82
int init_adc()
83
{
84
  ADCSRA |= (1 <<ADPS2) | (1 <<ADPS1) | (1 <<ADPS0);  // Setze ADC Prescaler auf 128 - 125KHz Abtastrate @ 16MHz
85

86
  ADMUX |= (1 <<REFS0); // Setze ADC Verweis auf AVCC
87
  ADMUX |= (1 <<ADLAR); // Links anpassen ADC Ergebnis leicht 8-Bit-Lesung ermöglichen
88

89
  // Keine MUX Werte erforderlich geändert werden, um ADC0 nutzen
90

91
  ADCSRA |= (1 <<ADATE); // Setze ADC Freilauf
92
  ADCSRA |= (1 <<ADEN); // Enable ADC
93

94
  ADCSRA |= (1 <<ADIE); // Enable ADC Interrupt
95
  sei ();    // aktiviere Global Interrupts      //wird schon oben gemacht
96

97
  ADCSRA |= (1 <<ADSC); // Start A2D Konvertierungen 
98
  
99
  return 0;
100
}
101

102

103
int main()
104
{
105
  wdt_disable();
106
  init_timer();
107
  init_adc();
108
  init_I2C();
109
  
110
  while(1)
111
  {
112
    
113
  }
114
}
115

116

117
ISR (TIMER2_COMPA_vect)              //5)Führe diese ISR aus wenn TCNT2==OCR2
118
{
119
   millisekunden++;
120
   millisekunden_debug=ceil(millisekunden/1000);
121
   DDRA = millisekunden_debug;
122
   PORTA = millisekunden_debug;
123
   
124
   
125
   //TCNT2   = 0;      //Timer2 auf 0 setzen, wichtig!!!!
126
   /*if(millisekunden==1000)
127
   {
128
  //DDRC = sekunde;
129
    //PORTC = sekunde;
130

131
   }*/
132
}
133

134

135

136
ISR (ADC_vect)
137
{
138
  PORTB= ADCH;
139
  DDRB = ~ADCH;
140
  if (ADCH < 21 && ADCH >= 0)
141
  {
142
    
143
  } 
144
  if (ADCH >=21 && ADCH <42)
145
  {
146
    
147
  } 
148
  if (ADCH >=42 && ADCH <63)
149
  {
150
    
151
  } 
152
  if (ADCH >=63 && ADCH <84)
153
  {
154
    
155
  } 
156
  if (ADCH >=84 && ADCH <105)
157
  {
158
    
159
  } 
160
  if (ADCH >=105 && ADCH <126)
161
  {
162
    
163
  } 
164
  if (ADCH >=126 && ADCH <147)
165
  {
166
    
167
  } 
168
  if (ADCH >=147 && ADCH <168)
169
  {
170
    
171
  } 
172
  if (ADCH >=168 && ADCH <189)
173
  {
174
    
175
  } 
176
  if (ADCH >=189 && ADCH <210)
177
  {
178
    
179
  } 
180
  if (ADCH >=210 && ADCH <231)
181
  {
182
    
183
  } 
184
  if (ADCH >=231 && ADCH <=255)
185
  {
186
    
187
  } 
188
}


bei mir überspringt der die Sachen einfach oder bleibt einfach stehen.
Gast #2216697
Lesenswert?

> keiner?

Ich weiss nicht, wie du den Debugger bedienst und was du erwartest bzw. 
siehst.

>> Jetzt frage ich mich aber, wieso das Programm beim Debuggen nicht in die >> 
Funktion "Initialisierung" springen will.

und

>> Bei mir springt der Debugger nur bei Interrupts

sind mir zu dünne Problembeschreibungen.

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