Frage zu Interrupt

Gast #782780
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
#782783
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"
Gast #782790
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?

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