Forum: Mikrocontroller und Digitale Elektronik Frage zu Interrupt


von Patrick (Gast)


Lesenswert?

Hallo zusammen

Ich sitze grad an einem Projekt und bekomm beim "builden" im AVR-Studio 
eine Warnung. Ich benutze den AT90CAN32 und will am Eingang ADC0 eine 
Spannung messen. Dann soll er nach jedem Messvorgang den Wert mit einem 
fixen Wert vergleichen und dann die entsprechende Aktion durchführen.
Hier mein Code:
1
//------------------------------------------------------------------------------
2
//--- Interrupt routine
3
//------------------------------------------------------------------------------
4
ISR (ADC_vect)
5
  {
6
  value = ADCL;
7
  value += (ADCH<<8);
8
  if (value > MAXVAL)
9
  MOTOR_Move (STOP);
10
  return 0;
11
  }
12
13
//------------------------------------------------------------------------------
14
//--- Initialize inputs and outputs of controller
15
//------------------------------------------------------------------------------
16
void ADC_Init (void)
17
  {
18
  uint16_t x;
19
  ADCSRA  |= (1<<ADEN) | (1<<ADSC) | (1<<ADATE) | (1<<ADIE) | (1<<ADPS1) | (1<<ADPS2);
20
  ADMUX |= (1<<REFS0) | (1<<MUX0);
21
  while (ADCSRA &(1<<ADSC)){
22
    ;
23
    }
24
  x = ADCL;
25
  x += (ADCH<<8);
26
27
  
28
  }

In der main-Funktion mache ich dann den Aufruf
1
 ADC_Init();

Nun bekomme ich folgende Warnungen:

../adc.c:37: warning: return type defaults to 'int'
../adc.c: In function 'ISR':
../adc.c:37: warning: type of '__vector_25' defaults to 'int'

Was bedeutet das?

Danke für Eure Antworten
Gruss
Patrick

von Johannes M. (johnny-m)


Lesenswert?

Du hast vermutlich die interrupt.h nicht eingebunden...

Die Warnungen besagen im Prinzip nichts anderes, als dass dem Compiler 
"ISR" unbekannt ist.

von Karl H. (kbuchegg)


Lesenswert?

Patrick wrote:

> Nun bekomme ich folgende Warnungen:
>
> ../adc.c:37: warning: return type defaults to 'int'
> ../adc.c: In function 'ISR':
> ../adc.c:37: warning: type of '__vector_25' defaults to 'int'
>
> Was bedeutet das?

Das der Compiler nicht erkannt hat, dass
ISR (ADC_vect)
ein Interrupt Handler sein soll.

Hast du avr/interrupt.h inkludiert?
Hast du überprüft, ob der Name ADC_vect richtig ist? Das findest
du am schnellesten raus, indem du in die µC-spezifische ioxxxx.h
schaust. xxxx ist dabei ein Kürzel welches für deinen Prozessor
steht. Diese Datei wird über avr/io.h eingebunden.

Nachtrag: Hab gerade in die iom16.h (io für den Mega16) geschaut.
ADC_vect dürfte stimmen. Also: Hast du avr/interrupt.h eingebunden

#include "avr/io.h"
#include "avr/interrupt.h"

von Patrick (Gast)


Lesenswert?

Hey Danke für die schnellen Antworten. Genau das wars. Muss ich 
übersehen haben.

von Patrick (Gast)


Lesenswert?

Der Name ADC_vect sollte stimmen, den hab ich aus iocanxx.h rausgelesen. 
Komischerweise hat der Vector lau header-file die Nummer 25, aber laut 
Datenblatt müsste es die 26 sein. Im Datenblatt ist die Nummer 1 als 
Reset definiert, der kommt im header-file aber nicht vor. Was ist jetzt 
richtig?

von Karl H. (kbuchegg)


Lesenswert?

Schnellschuss aus der Hüfte.

Dürfte wieder mal das leidige Thema sein:
Normale Menschen beginnen bei 1 zu zählen, C-Programmierer
bei 0.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.