Poprzedni temat «» Następny temat
[BASCOM] Backward jump out of rang, parametr Baud
Autor Wiadomość
FireIsland 
Nowy na forum


Dołączył: 07 Lis 2013
Posty: 35
Skąd: Grybów
Wysłany: 2016-11-17, 11:49   [BASCOM] Backward jump out of rang, parametr Baud

Dzień dobry,

Mam problem z pewnym programem w BASCOM. Po dodaniu do pętli głównej, podprogramu powodującego wyświetlenie prostej animacji na wyświetlaczu graficznym, w czasie kompilacji pojawiają się 4 błędy o treści: Error: 221 Line: 526 Backward jump out of range [_GPIXEL[ 2110]].
Podprogram korzysta z pięciu zmiennych typu Byte. W książce M. Wiązani nie znalazłem rozwiązania. W Internecie widziałem podobny problem, jednak tam pomogła zmiana procesora na taki z większą pamięcią. Mój program zajmuje 36% pamięci Flash, więc to raczej nie jest spowodowane brakiem miejsca. Próbowałem również, zmieniać nazwę procesora w nagłówku $regfile w samym kodzie programu, jednak błędy nadal się pojawiają. Zmieniałem też zmienne na inny typ - bez rezultatu. Dodam, że gdy do procesora wgram tylko ten podprogram wtedy kompiluje się i działa bez zarzutu.

Mam jeszcze drugi problem związany z parametrem $baud. Jeśli tylko w kodzie programu napiszę np. $baud=9600 program kompiluje się, ale nie działa prawidłowo, zawiesza się. Niezależnie od wpisanej wartości jest tak samo. Natomiast jeśli usunę ten parametr z programu, wszystko jest okej. Domyślam się, że wpisywanie tego parametru w kodzie programu, nie jest konieczne, skoro jest on ustawiony w zakładce Communications w opcjach Bascoma, ale pamiętam, że kiedyś wpisywałem i wszystko działało.

Z góry dziękuje
Pozdrawiam,
 
     
Pikczu 



Wiek: 38
Dołączył: 18 Lip 2005
Posty: 676
Skąd: Dublin
Wysłany: 2016-11-26, 20:47   

Pierwsza zasada jeśli prosisz o pomoc to dajesz cały kod lub na tyle zawężony żeby problem nadal występował.
Ewentualnie zapytaj pod tym linkiem:
http://wrozbita-maciej.pl/
 
 
     
FireIsland 
Nowy na forum


Dołączył: 07 Lis 2013
Posty: 35
Skąd: Grybów
Wysłany: 2017-06-15, 15:16   

Powracam z problemem.
Po dodaniu kilku linijek programu odpowiedzialnych za zapis do karty SD pojawia się błąd "Backward jump out of range".
Program dokonuje obliczeń, a po zakończeniu i wciśnięciu przez użytkownika przycisku wywołany zostaje podprogram odpowiedzialny za zapis na karcie SD. Podprogram wygląda następująco:

Kod:

Zapis_sd:

   Gbdriveerror = Driveinit()
   B_err = Initfilesystem(1)

   If B_err = 0 Then

     Lcdat 1 , 1 , "SD-record"
     Waitms 300
     Open St5 For Append As #2
     Write #2 , R , G , B
     Write #2 , "Pomiar"
     Flush #2
     Close #2


   Else

      Lcdat 5 , 1 , "SD-err"
      Waitms 300

   End If


Return


St5 to nazwa pliku tekstowego. Zdefiniowana jako Dim St5 As String * 10, zainicjowana łańcuchem "kolory.txt".
W pliku tekstowym zapisuję trzy zmienne: R, G, B oraz słowo "Pomiar".

Deklaracja odpowiednich pinów do karty SD wygląda następująco:

Kod:


Const Cmmc_soft = 0                                         'SPI HARDWARE

'define Chip-Select Pin
Config Pinb.3 = Output                                      ' define here Pin for CS of MMC/SD Card
Mmc_cs Alias Portb.3
Set Mmc_cs

'Define here SS Pin of HW-SPI of the CPU (f.e. Pinb.0 on M128)
Config Pinb.4 = Output                                      ' define here Pin of SPI SS  'b7 (old)

Spi_ss Alias Portb.4
Set Spi_ss                                                  ' Set SPI-SS to Output and High por Proper work of
                                                  ' SPI as Master

'HW-SPI is configured to highest Speed
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1       'Config Spi = Soft , Din = Pinb.3 , Dout = Portb.2 , Ss = Portb.0 , Clock = Portb.1
Spsr.0 = 1                                                  ' Double speed on ATMega128
Spiinit                                                     ' Init SPI


Const Cperrdrivereset = 225                                 ' Error response Byte at Reset command
Const Cperrdriveinit = 226                                  ' Error response Byte at Init Command
Const Cperrdrivereadcommand = 227                           ' Error response Byte at Read Command
Const Cperrdrivewritecommand = 228                          ' Error response Byte at Write Command
Const Cperrdrivereadresponse = 229                          ' No Data response Byte from MMC at Read
Const Cperrdrivewriteresponse = 230                         ' No Data response Byte from MMC at Write
Const Cperrdrive = 231
Const Cperrdrivenotsupported = 232                          ' return code for DriveGetIdentity, not supported yet
Waitms 700
Dim Gbdriveerror As Byte                                    ' General Driver Error register
Dim Gbdriveerrorreg As Byte                                 ' Driver load Error-Register of HD in case of error
Dim Gbdrivestatusreg As Byte                                ' Driver load Status-Register of HD on case of error
Dim Gbdrivedebug As Byte
$lib "MMC.LIB"                                              ' link driver library
$external _mmc
Gbdriveerror = Driveinit()
B_err = Initfilesystem(1)


Do programu głównego dołączona jest biblioteka "Config_AVR-DOS.BAS".

Mam również program z określeniem szybkości transmisji bodów parametrem $baud. Jeśli tylko wpiszę ten parametr w kod, program po kompilacji wgrywa się (nie ma żadnych błędów) ale nie działa prawidłowo - zawiesza się. Usunięcie tego parametru z programu przywraca poprawne funkcjonowanie.

Cały kod źródłowy oraz biblioteka AVR-DOS dostępna jest pod linkiem (nie mogę dodać załącznika - format .txt oraz .bas jest niedozwolony, a hiperłącze z dozwolonymi rozszerzeniami się nie uruchamia):

http://www18.zippyshare.com/v/KkNawUYs/file.html

Prosty program testowy, którego zadaniem jest zapisanie kilku zmiennych na karcie po wciśnięciu przycisku, napisany z użyciem tej samej biblioteki oraz wyżej pokazanych poleceń konfiguracyjnych - działa bez problemu.


Dziękuję za pomoc,
Pozdrawiam Piotr,


EDIT:

Zauważyłem, że w podprogramie dokonującym zapisu do SD usunięcie linii:

Open St5 For Append As #2

powoduje, że program się kompiluje beż żadnych błędów.


EDIT2:

Użycie któregoś z poleceń (obsługa wyświetlacza graficznego): Circle, Line, Boxfill powoduje wygenerowanie błędu Backward jump out of range.

Po skomentowaniu ich wszystkich program kompiluje się bez problemów.
Polecenie Lcdat nie powoduje błędów i może być używane.

W odniesieniu do wcześniejszego wpisu EDIT, program kompiluje się z aktywną linią:

Open St5 For Append As #2

pod warunkiem, że polecenia obsługi wyświetlacza graficznego są nieaktywne.

Domyślam się, że chodzi tutaj o kanały transmisji UART. Polecenia takie jak Print (Lcdat pewnie też) korzystają z automatycznie otwieranego kanału COM1. Instrukcje obsługi wyświetlacza graficznego (Circle, Boxfill, Line) korzystają z innego kanału transmisji. Gdy otwieram kolejny kanał (dla zapisu SD) następuje jakiś konflikt czego skutkiem jest wspomniany wcześniej błąd.
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,03 sekundy. Zapytań do SQL: 10