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
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...
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)
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.
#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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.