Forum: Mikrocontroller und Digitale Elektronik interrupts atm128


von ich (Gast)


Lesenswert?

was mache ich falsch? möchte das bei 0-signal der interrup ausgelösst
wird. Programm code in C:

#include <inttypes.h>
#include <avr/io.h>
#include <avr/signal.h>


void sysinit(void){
  SREG=SREG|0x80;
  EIMSK=0x03;
  EICRA=0x0C;
  DDRG=0XF0;
  DDRF=0xFF;
}
int main (void){
  sysinit();
    while(1){
      SIGNAL(__SIG_INTERRUPT0){
        PORTF=0x80;
      }
    }
return (0);
}


Warnings:
usbtest.c:18: warning: `__SIG_INTERRUPT0' appears to be a misspelled
signal handler
usbtest.c:18: warning: static declaration of '__SIG_INTERRUPT0'
follows non-static declaration
usbtest.c:18: warning: previous declaration of '__SIG_INTERRUPT0' was
here

von johnny.m (Gast)


Lesenswert?

SIGNAL(SIG_INTERRUPTx)!

von Rahul (Gast)


Lesenswert?

Fehler: Du deklarierst die Interrupt-Routine im Hauptprogramm.
Das ist aber eine eigenstädige Funktion, die nicht ins Hauptprogramm
gehört. Grundlagen von (µ)C-Programmierung...

von ich (Gast)


Lesenswert?

hallo zusammen:
was mache ich nochmals falsch??? ich cecks bald nicht mehr:


#include <inttypes.h>
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/eeprom.h>
#define _EEGET(var,addr)


SIGNAL(SIG_INTERRUPT0){
  var=eeprom_rb(addr);
    if(var==0x24){
      PORTD=0x80;
      }
}

void sysinit(void){
  SREG=SREG|0x80;
  EIMSK=0x03;
  EICRA=0x0C;
  MCUCR=MCUCR|0x80;
  XMCRB=XMCRB|0x80;
  XMCRA=0x00;
  DDRD=0XFC;
}


int main (void){
  sysinit();
    while(1){
    }
return (0);
}



fehlermeldung:
usbtest.c:5:1: warning: "_EEGET" redefined
In file included from usbtest.c:4:
C:/Program
Files/winavr/bin/../lib/gcc/avr/3.4.3/../../../../avr/include/avr/eeprom 
.h:165:1:
warning: this is the location of the previous definition
usbtest.c: In function `__vector_1':
usbtest.c:8: error: `var' undeclared (first use in this function)
usbtest.c:8: error: (Each undeclared identifier is reported only once
usbtest.c:8: error: for each function it appears in.)
usbtest.c:8: warning: implicit declaration of function `eeprom_rb'
usbtest.c:8: error: `addr' undeclared (first use in this function)

von Andreas Lang (andreas) (Gast)


Lesenswert?

usbtest.c: In function `__vector_1':
usbtest.c:8: error: `var' undeclared (first use in this function)
usbtest.c:8: error: (Each undeclared identifier is reported only once
usbtest.c:8: error: for each function it appears in.)
usbtest.c:8: warning: implicit declaration of function `eeprom_rb'
usbtest.c:8: error: `addr' undeclared (first use in this function)
Problem:
Der Compiler meckert über undeklarierte Variablen.
In deinem Fall in Zeile 8 von usbtest.c in der Funktion `__vector_1',
also der Funktion zu Interruptvektor #1 (#0 ist i.d.R. der
Resetvektor).
Lösung:
Variablem muss man in C(++) deklarieren (und nachmöglichkeit auch
initialisieren (also einen bestimmten Wert zuweisen, da sie sonst
iregendwas enthalten können (und ja, das KANN Probleme machen)):
Also z.B. uint8_t var=0, addr=0;

usbtest.c:8: warning: implicit declaration of function `eeprom_rb'
Der Compiler warnt, dass 'eeprom_rb' an dieser Stelle nicht
deklariert ist.

usbtest.c:5:1: warning: "_EEGET" redefined
In file included from usbtest.c:4:
C:/Program
Files/winavr/bin/../lib/gcc/avr/3.4.3/../../../../avr/include/avr/eeprom 
.h:165:1:
warning: this is the location of the previous definition

Der Compiler findet es nicht sehr schön, dass du _EEGET neu definierst
(NICHT deklarierst). Er meckert also, weil _EEGET in eeprom.h in
Zeile 165 schon definiert wurde.

von ich (Gast)


Lesenswert?

#include <avr/eeprom.h>

int var;
int addr;


SIGNAL(SIG_INTERRUPT0){
    _EEGET(var,addr);
    if(addr>0x00){

      PORTD=0x80;
      }
}
sollte mit _EEGET der variabel var nicht die Werte der PAD0-7 PINS
übergeben werden?

von ich (Gast)


Lesenswert?

ich habe mit dem ko gemessen ob rd und wr eingeschaltet werden oder
nicht. sie reagierten auf den put- und get-befehl leider werden keine
daten empfangen oder versendet. nun ist die frage:
ist addr zuständig für die speicherposition im externen eeprom oder die
zwischenspeicherposition im external memory control register A?

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.