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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.