mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik interrupts atm128


Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SIGNAL(SIG_INTERRUPTx)!

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Andreas Lang (andreas) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.