wronski napisał(a):
zacząłem przerabiać ten program pod procesor Atmega644P i w czasie kompilacji pojawił mi się problem:
Error 2 multiple definition of `main' C:\Users\Patryk\Documents\Atmel Studio\GccApplication3\GccApplication3\Debug/.././main.c 18 1 Main.c
i podświetla mi:
d_led_init(); // inicjalizacja wyświetlacza multipleksowanego
Oraz ostrzeżenie:
Warning 1 'TIMER0_COMP_vect' appears to be a misspelled signal handler [enabled by default] C:\Users\Patryk\Documents\Atmel Studio\GccApplication3\GccApplication3\d_led.c 58 1 Main.c
podświtla:
ISR(TIMER0_COMP_vect)
jesli chodzi o przerawania to ustawiłem:
// ustawienie TIMER0
TCCR0B |= (1<<WGM02); // tryb CTC
TCCR0B |= (1<<CS02)|(1<<CS00); // preskaler = 1024
OCR0B = 39; // dodatkowy podział przez 39 (rej. przepełnienia)
TIMSK0 |= (1<<OCIE0A); // zezwolenie na przerwanie CompareMatch
}
Witam serdecznie (pierwszy post).
Też napotkałem te same blędy podczas kompilacji. Ja mam zestaw ATB z procesorem aatmega644p, więc z takim samym jak pan.
Ja ustawiłem rejestry sterujące timera troche inaczej:
TCCR0A |= (1<<WGM01);
TCCR0B |= (1<<CS02) | (1<<CS00);
OCR0A = 39;
TIMSK0 |= (1<<OCIE0A);
Drogą dedukcji, tak odczytałem z noty katalogowej.
Co do wektora przerwań, to według instrukcji pana Mirka (wideo), to w tym pliku nie ma szukanych danych (plik iom644p.h). Natomiast zajrzałem do pliku iom64.h (przypuszcza, że wiele się nie różnią obydwa kontrolery) i tam można odnależć pożądany wektor. Wektor jaki trzeba użyć, to
TIMER0_COMPA_vect, bo jest to podwójny timer i trzeba wskazać z którego dokłanie ma pochodzić przerwanie.
Jeżeli chodzi o błąd wielokrotnej definicji, to u mnie wynikało z tego, że tablice 'cyfra' umiesciłem w pliku nagłówkowym d_led.h, a nie w d_led.c. Tu się przyznaje bez bicia, że nie rozumiem jakie kawałki kodu umieszczać w pliku nagłókowym, a jakie nie. Jeszcze tego nie ogarniam:)