logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Błędy kompilacji w WinAVR: niezadeklarowany TCCR0 w funkcji main

pawelvod 07 Mar 2006 09:16 3369 3
REKLAMA
  • #1 2384455
    pawelvod
    Poziom 18  
    Posty: 357
    Ocena: 25
    Zkopiowałem sobie taki kawałek kodu:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #define TIMER0_INIT 175
    
    char i;
    
    // procedura obsługi przerwania od timera TC0
    SIGNAL (SIG_OVERFLOW0)
    {
    	TCNT0 = TIMER0_INIT; // załadowanie do licznika wartosci poczštkowej
    	PORTB ^= (1<<PB1); // zmiana stanu na wyjściu
    }
    // Program główny
    int main(void)
    {
    	// konfiguracja portów I/O
    	DDRB |= 1<<PB1;
    	PORTB = 0x00;
    	// ustawienie trybu pracy licznika
    	TCCR0 = 0x01;
    	// wpisanie warto?ci poczatkowej
    	TCNT0 = TIMER0_INIT;
    	// odblokowanie przerwania od licznika
    	TIMSK = 0x01;
    	// globalne odblokowanie przerwań
    	sei();
    	// pusta pętla nieskoczona
    	while(1);
    	
    	return 0;
    }

    Przy kompilacji wyskakują mi takie błędy:
    program.c: In function `main':
    program.c:22: error: `TCCR0' undeclared (first use in this function)
    program.c:22: error: (Each undeclared identifier is reported only once
    program.c:22: error: for each function it appears in.)
    program.c:26: error: `TIMSK' undeclared (first use in this function)
    program.c:33:2: warning: no newline at end of file
    make.exe: *** [program.o] Error 1
    w pliku makefile mam:
    MCU = atmega88

    nie bardzo wiem co includowac żeby zobaczył te zmienne?
  • REKLAMA
  • #2 2384789
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Przywołano
    avr/interrupt.h
    a użyto signal
    Trzeba zastosować #include <avr/signal.h>

    Signal i interrupt służą do obsługi przerwań. Signal wyłącza przerwania a Interrupt nie.

    Może to nie wszystko. To tak na pierwszy rzut oka.
  • REKLAMA
  • #3 2385754
    pawelvod
    Poziom 18  
    Posty: 357
    Ocena: 25
    Jak includuje signal.h to pisze warning, że w tej wersji signal i interupt są już w jednej bibliotece (interupt), więc to raczej nie to.
  • #4 3398975
    Batmanmen
    Poziom 15  
    Posty: 205
    Pomógł: 9
    Ocena: 4
    Atmega88 nie ma takich w ogole rejestrow: TIMSK, TCCR0!
    Ten kod jest poprawny.

    #include <avr/io.h> 
    #include <avr/interrupt.h> 
    #define TIMER0_INIT 175 
    
    
    char i; 
    
    // procedura obsługi przerwania od timera TC0 
    SIGNAL (SIG_OVERFLOW0) 
    { 
       TCNT0 = TIMER0_INIT; // załadowanie do licznika wartosci poczštkowej 
       PORTB ^= (1<<PB1); // zmiana stanu na wyjściu 
    } 
    // Program główny 
    int main(void) 
    { 
       // konfiguracja portów I/O 
       DDRB |= 1<<PB1; 
       PORTB = 0x00; 
       // ustawienie trybu pracy licznika 
       TCCR0A = 0x01; 
       // wpisanie warto?ci poczatkowej 
       TCNT0 = TIMER0_INIT; 
       // odblokowanie przerwania od licznika 
       TIMSK0 = 0x01; 
       // globalne odblokowanie przerwań 
       sei(); 
       // pusta pętla nieskoczona 
       while(1); 
        
       return 0; 
    }
    
REKLAMA