Witam
Mam problem ze skompilowaniem kodu w Bascomie. Cały czas wywala błąd:
ERROR :344 Line: 108 Program will overwrite bootloader [4 to long].
Z tego co ja zrozumiałem to kod jest za duży, niestety nie znam się na programowaniu i nie bardzo wiem co można by zrobić żeby go zmniejszyć.
Jeśli ktoś byłby tak dobry i skompilował mi to, to będę bardzo wdzięczny
Mam problem ze skompilowaniem kodu w Bascomie. Cały czas wywala błąd:
ERROR :344 Line: 108 Program will overwrite bootloader [4 to long].
Z tego co ja zrozumiałem to kod jest za duży, niestety nie znam się na programowaniu i nie bardzo wiem co można by zrobić żeby go zmniejszyć.
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 8
$framesize = 16
Dim Timer_main As Byte 'zegar zliczajacy 2s
Dim Timer_signal As Byte 'zegar zliczajacy 10ms
Dim Flag_1_overflow As Bit 'flaga pierwszego przepelnienia Timer_signal
Dim Signal_start As Byte 'poczatek impulsu
Dim Signal_width As Byte 'szerokosc impulsu
Dim Mask As Byte 'maska swiatla ladowania
Dim Flag_idle As Bit 'flaga pracy w trybie AWARIA
Config Portb = &B111101 'ustawienie wejsc i wyjsc
Portb = &B011101 'zapalenie diodek
Flag_1_overflow = 0
Flag_idle = 0
Mask = &B000010
Config Int0 = Change 'zewnetrzne przerwanie na zmiane stanu PB1
Config Timer0 = Timer , Prescale = 64 'wystartowanie timera zliczajacego 100us
Timer0 = 241 'ustawienie stanu poczatkowego timera
Enable Int0 'uruchomienie przerwania zewnetrznego
Enable Timer0 'uruchomienie przerwania od timera
Enable Interrupts 'odblokowanie przerwan
On Int0 Signal_int 'wskazanie procedury obslugi przerwania
On Timer0 100us 'wskazanie procedury obslugi przerwania
Do 'poczatek programu
If Timer_signal = 100 Then 'jesli minelo 10ms
Timer_signal = 0 'wyzeruj zegar zliczajacy 10ms
Incr Timer_main 'dodaj 1 do zegara zliczajacego 2s
If Flag_1_overflow = 0 Then 'jesli zegar 10ms nie przepelnil sie
Flag_1_overflow = 1 'oznacz flage przepelnienia zegara 10ms 1 raz
End If
End If
If Timer_main = 200 Then 'jesli minely 2s
Timer_main = 0 'wyzeruj zegar zliczajacy 2s
If Flag_idle = 0 Then 'jesli program nie pracuje w trybie AWARIA
If Signal_width < 15 Then 'jesli impuls krotszy niz 1,5ms
Mask = &B110111 'ustaw maske gaszacej swiatlo ladowania
Else 'jesli impuls dluzszy niz 1,5ms
Mask = &B111111 'ustaw maske zapalajacej swiatlo ladowania
End If
If Signal_width < 9 Then 'jesli impuls krotszy niz 0,9ms
Flag_idle = 1 'oznacz flage pracy w trybie AWARIA
End If
If Signal_width > 21 Then 'jesli impuls dluzszy niz 2,1ms
Flag_idle = 1 'oznacz flage pracy w trybie AWARIA
End If
End If
Signal_width = 0 'wyzerowanie odczytanego stanu
End If
If Flag_idle = 0 Then 'jesli program nie pracuje w trybie AWARIA
Select Case Timer_main
Case 0 To 1 : Portb = &B011100 And Mask
Case 30 To 31 : Portb = &B011001 And Mask
Case 100 To 101 : Portb = &B011100 And Mask
Case Else : Portb = &B011000 And Mask
End Select
Else 'jesli program pracuje w trybie AWARIA
Select Case Timer_main
Case 0 To 1 : Portb = &B010100
Case 25 To 26 : Portb = &B010001
Case 40 To 41 : Portb = &B010001
Case 100 To 101 : Portb = &B010100
Case Else : Portb = &B010000
End Select
End If
Loop
End 'koniec programu
100us: 'procedura obslugi przerwania od timera
Timer0 = 241 'ustawienie stanu poczatkowego timera
Incr Timer_signal 'zwiekszenie stanu zegara zliczajacego 10ms
Return
Signal_int: 'procedura obslugi przerwania zewnetrznego
If Pinb.1 = 1 Then 'jesli przerwanie rozpoczynajace impuls
Signal_start = Timer_signal 'zapamietanie stanu zegara 10ms na przerwaniu
Flag_1_overflow = 0 'wyzerowanie flag przepelnienia zegara 10ms
Flag_idle = 0 'wyzerowanie flagi pracy w trybie AWARIA
Else 'jesli przerwanie konczace impuls
If Flag_1_overflow = 0 Then 'jesli zegar 10ms nie przepelnil sie
Signal_width = Timer_signal - Signal_start
Else 'jesli zegar 10ms przepelnil sie 1 raz
Signal_width = 149 + Timer_signal
Signal_width = Signal_width - Signal_start
Flag_1_overflow = 0
End If
End If
ReturnJeśli ktoś byłby tak dobry i skompilował mi to, to będę bardzo wdzięczny