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łąd nr 31 w Bascom przy kompilacji - błędny typ danych, jak naprawić?

Alchemik84 13 Gru 2007 21:18 4253 10
REKLAMA
  • #1 4584625
    Alchemik84
    Poziom 14  
    Posty: 100
    Pomógł: 8
    Ocena: 2
    Witam!
    Nie wiem co jest nie tak, ale bascom nie potrafi skompilować kodu. Wyrzuca błąd nr31, który wg. helpa do bascoma oznacza "błędny typ danych".

       
    $regfile = "m8515.dat"
    $crystal = 1000000
    $xramstart = &H300
    $xramsize = &H10000
    $include "Config_MMC.bas"
    $include "Config_AVR-DOS.bas"
    Declare Function Getattr0() As Byte
    
    '=============WYSWIETLACZ LCD==========
    '=============KARTA MMC==============
    Portb.0 = 1
    Ddrb.0 = 0
    Portb.1 = 1
    Ddrb.1 = 0
    
    Dim S As String * 20
    Dim W As Byte
    Dim Xxx As Byte
    Cls
    Xxx = Initfilesystem(1)
    W = 122
    Cls
    S = Dir( "*.*")
    Lcd S
    Lowerline
    S = Dir()
    Lcd S
    Open "abc.txt" For Input As #1
    Input #1 , S
    Lcd S
    Close #1
    
    End
    
    Function Getattr0() As Byte
    $external _getattr
       Loadadr Getattr0 , Z
       !Call _GetAttr0
    End Function
    



    co dziwne, usunięcie linijki "Close #1" powoduje ze cały program sie kompiuje
  • REKLAMA
  • #2 4588291
    teedd
    Poziom 19  
    Posty: 219
    Pomógł: 24
    Ocena: 2
    Witaj.
    Nie napisałeś jakiej wersji Bascoma AVR używasz. Ja kompilowałem na 1.11.9.0 i błąd przy kompilacji dotyczył braku pamięci SRAM w procesorze.
    Error : 22 Line : 121 Out of SRAM space , in File : C:\PROGRAM FILES\MCS ELECTRONICS\PRóBKI\Config_AVR-DOS.bas
    Dopiero jak dałem procesor Mega64, to kompilacja poszła bez błędów - na Mega32 też był błąd. 8515 ma 512 bajtów SRAM a Mega64 4096 bajtów. Oba dołączane pliki były w postaci oryginalnej, nic w nich nie zmieniałem.
    Pozdrowienia - teedd
  • REKLAMA
  • #3 4589410
    Alchemik84
    Poziom 14  
    Posty: 100
    Pomógł: 8
    Ocena: 2
    Problem pamięci odpada, bo mam dołączone 64KB zewnętrznego RAMu, i tak też jest ustawione w kompilatorze. Wersja bascoma 1.11.8.1.
  • REKLAMA
  • #4 4589445
    teedd
    Poziom 19  
    Posty: 219
    Pomógł: 24
    Ocena: 2
    No to próbnie zmień procesor w konfiguracji na Mega64 i zobacz co wyjdzie. Spróbuj też skompilować to na demo 1.11.8.7. Albo podeślij mi kompletny program, to skompiluję go i zobaczę co się dzieje.
    Pozdrowienia - teedd
  • #5 4589647
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Alchemik84 napisał:
    Problem pamięci odpada, bo mam dołączone 64KB zewnętrznego RAMu, i tak też jest ustawione w kompilatorze. Wersja bascoma 1.11.8.1.

    Kolego sympatyczny :)
    Co z tego że masz zewnętrzny RAM i że kompilator o nim "wie" :?:
    A czy "powiedziałeś mu" , że ma umieszczać deklarowane zmienne , w tej właśnie pamięci :?: Nie powiedziałeś ;)
    Co innego jak już wie ;)
    
    '... tu właśnie nakazujemy kompilatorowi , by te hektary RAM-u zajął sobie w zewnętrznej pamięci
    $default Xram
    $include "Config_MMC.bas"
    $include "Config_AVR-DOS.bas"
    
    $default Sram ' a tu powracamy do tej ... wbudowanej ;)
    
    

    Piotrek
  • REKLAMA
  • #6 4589698
    Alchemik84
    Poziom 14  
    Posty: 100
    Pomógł: 8
    Ocena: 2
    zumek, wprowadziłem Twoją poprawkę, niestety nic to nie zmienia, nadal kompilator wyrzuca error nr31. I zawsze jest to błąd w ostatniej linijce kodu.
  • #7 4589729
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Alchemik84 napisał:
    zumek, wprowadziłem Twoją poprawkę, niestety nic to nie zmienia, nadal kompilator wyrzuca error nr31. I zawsze jest to błąd w ostatniej linijce kodu.

    Czyli gdzieś w kodzie masz ... kleksa ;)
    Ten kod , który kończył się błędem o braku pamięci SRAM , po "włożeniu" zmiennych do XRAM kompiluje się bezbłędnie.Jeśli ten 1-szy przykład to nie cały kod , to ... albo pokaż cały , albo będziemy stawiać TAROTA :)

    Piotrek
  • #8 4589936
    Alchemik84
    Poziom 14  
    Posty: 100
    Pomógł: 8
    Ocena: 2
    Cały program jaki próbuje skompilować:
    
    $regfile = "m8515.dat"
    $crystal = 1000000
    $xramstart = &H300
    $xramsize = &H10000
    $default Xram
    $include "Config_MMC.bas"
    $include "Config_AVR-DOS.bas"
    Declare Function Getattr0() As Byte
    $default Sram
    '=============WYSWIETLACZ LCD==========
    '=============KARTA MMC==============
    Portb.0 = 1
    Ddrb.0 = 0
    Portb.1 = 1
    Ddrb.1 = 0
    
    Dim Buf_lcd(5000) As Xram Byte
    Dim S As String * 20
    Dim Tt As String * 12
    Dim Wsrampointer As Word
    Dim W As Byte
    Dim Xxx As Byte
    Dim Sektor As Long
    Cls
    Xxx = Initfilesystem(1)
    W = 122
    Cls
    S = Dir( "*.*")
    Lcd S
    Lowerline
    S = Dir()
    Lcd S
    Open "abc.txt" For input As #1
    Input #1 , S
    close #1
    Lcd S
    
    End
    
    Function Getattr0() As Byte
    $external _getattr
       Loadadr Getattr0 , Z
       !Call _GetAttr0
    End Function
    
  • Pomocny post
    #9 4589983
    teedd
    Poziom 19  
    Posty: 219
    Pomógł: 24
    Ocena: 2
    W tej postaci Twój program kompiluje się bezbłędnie na 1.11.9.0. Na priv-a wysłałem Ci wynik kompilacji.
    teedd
  • Pomocny post
    #10 4590000
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Cóż , jeśli nie grzebałeś w tych ...
    
    $include "Config_MMC.bas"
    $include "Config_AVR-DOS.bas"
    

    ... plikach i masz wersję komercyjną Bascoma , to ją uaktualnij.
    Natomiast jeśli masz wersję DEMO , to nie uda się skompilować poprawnie Twojego kodu , bo program jest większy niż dozwolone 4kB i to może być przyczyną błędu , lub wersja kompilatora jest ... "za niska".

    Podsumowując:
    Bascom v1.11.8.7 , kompiluje bezbłędnie ostatni przykład .

    Piotrek
  • #11 4590178
    Alchemik84
    Poziom 14  
    Posty: 100
    Pomógł: 8
    Ocena: 2
    Rzeczywiście przeinstalowanie Bascoma do wersji 1.11.8.7 pomogło. Temat uważam za zamknięty. I dziękuje :)

Podsumowanie tematu

✨ Problem kompilacji w Bascom AVR z błędem nr 31 ("błędny typ danych") pojawiał się podczas próby kompilacji programu dla mikrokontrolera ATmega8515 z wykorzystaniem zewnętrznej pamięci RAM 64KB. Błąd występował przy instrukcji "Close #1". Wskazano, że pomimo zadeklarowania zewnętrznej pamięci RAM, zmienne muszą być jawnie umieszczone w tej pamięci za pomocą dyrektywy $default Xram, a następnie powrót do pamięci SRAM za pomocą $default Sram. Po zastosowaniu tej poprawki i zmianie konfiguracji procesora na ATmega64 (z większą pamięcią SRAM) program kompilował się poprawnie. Ostatecznie problem rozwiązała aktualizacja wersji Bascom AVR do 1.11.8.7, gdyż wcześniejsza wersja 1.11.8.1 nie radziła sobie z rozmiarem programu i generowała błąd. Wersja demo Bascoma może mieć ograniczenia wielkości programu (4kB), co również może powodować błędy kompilacji. Zalecane jest używanie wersji komercyjnej i aktualizowanie kompilatora do nowszych wydań.
Wygenerowane przez model językowy.
REKLAMA