Piszę program na ATtiny2313 w AvrStudio. Mam najnowszą wersję kompilatora, podobnie jak WinAvr'a. Kod będzie "mrygał" zestawem diód. Na porcie przerwania jest przycisk, którym będzie można zwiększać wartość opóźnienia, z jakim mają się zapalać diody.
Program reaguje na samo przerwanie [wrzuciłam tam w celu testowania mryganie diodami i mrygały bez problemu], nie reaguje jednak na zmianę wartości zmiennej opoznienie. Zdaję sobie sprawę z tego, że zmienna ta powinna być zadeklarowana jako volatile, jednak kiedy ja tak deklaruję, przy kompilacji wyskakuje błąd "gcc plug-in: Error: Object file not found on expected location D:\Sterownik_Diody\CAFE_Diody\default\CAFE_Diody.elf".
Sprawdziłam na wszystkich poziomach optymalizacji (na 00 też).
Czy ktoś może mnie wesprzeć radą?
Program reaguje na samo przerwanie [wrzuciłam tam w celu testowania mryganie diodami i mrygały bez problemu], nie reaguje jednak na zmianę wartości zmiennej opoznienie. Zdaję sobie sprawę z tego, że zmienna ta powinna być zadeklarowana jako volatile, jednak kiedy ja tak deklaruję, przy kompilacji wyskakuje błąd "gcc plug-in: Error: Object file not found on expected location D:\Sterownik_Diody\CAFE_Diody\default\CAFE_Diody.elf".
Sprawdziłam na wszystkich poziomach optymalizacji (na 00 też).
Czy ktoś może mnie wesprzeć radą?
#include <avr/io.h>
#define F_CPU 1000000UL
#include <util/delay.h>
#include <avr/interrupt.h>
volatile int opoznienie;
int main (void)
{
TCCR1B = _BV(ICNC1)|_BV(ICES1)|_BV(CS11)|_BV(CS12);
GIMSK = _BV(INT1);
MCUCR=~_BV(ISC11)|~_BV(ISC10);
sei();
DDRB = 0xFF;
DDRD = 0x70;
DDRA = 0x00;
PORTB=0xFF;
opoznienie = 1000;
int i;
while(1){
sei();
PORTB = 0xFE;
_delay_ms(opoznienie);
PORTB = 0xFC;
_delay_ms(opoznienie);
PORTB = 0xF8;
_delay_ms(opoznienie);
PORTB = 0xF0;
_delay_ms(opoznienie);
PORTB = 0xFF;
_delay_ms(opoznienie);
sei();
for(i=0; i<3; i++){
PORTB = 0x00;
_delay_ms(opoznienie);
PORTB = 0xFF;
_delay_ms(opoznienie);
}
sei();
}
return 0;
}
SIGNAL (SIG_INTERRUPT1)
{
cli();
_delay_ms(300);
opoznienie = opoznienie + 1000;
}
