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

bledy po przejsciu na nowsza wersje Bascom AVR

szeryfff 07 Sty 2010 23:02 2928 11
REKLAMA
  • #1 7502055
    szeryfff
    Poziom 24  
    Witam!
    Moj problem polega na tym, ze program, ktory kompilowal sie bez problemu w wersji 1.11.8.5 (chyba cos takiego), nie kompiluje sie w wersji 1.11.9.8.
    Wywala takie bledy:
    Error : 213   Line :   223   String expected for assignment [STR(T)]  , in File : L:\bascom\moje programy\TIDv3.2.bas
    Error : 31    Line :   223   Invalid datatype [[0011] 200[STR(T)]]  , in File : L:\bascom\moje programy\TIDv3.2.bas
    Error : 213   Line :   223   String expected for assignment [STR(DROGA)]  , in File : L:\bascom\moje programy\TIDv3.2.bas
    Error : 31    Line :   223   Invalid datatype [[0011] 200[STR(DROGA)]]  , in File : L:\bascom\moje programy\TIDv3.2.bas
    Error : 7     Line :   0     IF THEN expected [ 223]  , in File : 
    Error : 123   Line :   0     END IF expected  , in File : 


    Linijka 223 wyglada tak:
    Text = Chr(znak) + Chr(&B0000001) + Format(str(t) , "  ") + Format(str(droga) , "   00")


    Zmienna T to integer, droga to long.

    Jakby ktos mogl mi pomoc to bede wdzieczny.
    Pozdrawiam
  • REKLAMA
  • #2 7504965
    medicb
    Poziom 28  
    Wyszła jeszcze nowsza wersja od tamtych więc może na niej będzie poprawnie, szukaj na stronie prodcenta.
  • #3 7505259
    Freddy
    Poziom 43  
    BASCOM-AVR 1.11.9.8 to ostatnia wersja jaka wyszła, parę dni temu.
    Błąd masz gdzieś powyżej. Daj cały kod.
  • REKLAMA
  • #4 7506166
    szeryfff
    Poziom 24  
    Kurcze, z calym kodem moze byc problem, bo nie chcialbym go udostepniac. Po czym wnosisz ze blad mam gdzies powyzej? Zastanawia mnie fakt, ze w starszej wersji bylo oki.

    Jak zrobie cos takiego :
    Dim Tstr as String*3
    Tstr = str(T)
    Text = Chr(znak) + Chr(&B0000001) + Format(Tstr , " ") + Format(str(droga) , " 00")

    to bledu "String expected for assignment [STR(T)]" juz nie ma, no ale nie chce mi sie robic tak w kazdym przypadku, bo jest ich kilka, i powstaja niepotrzebne zmienne.
  • #5 7506437
    Freddy
    Poziom 43  
    Prześlij mi na PW, nie udostępnię.
    Wygląda, że cos z deklaracjami.
  • #6 7506471
    szeryfff
    Poziom 24  
    przygotowalem okrojona wersje, w ktorej tez ten blad wystepuje (oczywiscie w starej wersji bez bledu):

    'definiowanie procka
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    'konfiguracja portów
    Ddrc.5 = 1 : Sda Alias Portc.5
    Ddrc.4 = 1 : Mrq Alias Portc.4
    Ddrc.3 = 1 : Scl Alias Portc.3
    
    Config Portd.2 = Input : Portd.2 = 1
    Config Portd.3 = Input : Portd.3 = 1
    
    Config Timer0 = Counter , Edge = Falling
    Config Timer1 = Timer , Prescale = 64
    
    Enable Interrupts
    
    
    Dim Text As String * 10                                     'przechowuje tekst do wyświetlenia
    
    
    Dim T As Integer
    
    
    
    Scl = 1                                                     'ustaw linie SCL w stan wysoki
    Sda = 1                                                     'ustaw linie SCL w stan wysoki
    Mrq = 1                                                     'ustaw linie SCL w stan wysoki
    Wait 1                                                      'czekaj 500ms
    
    Start Timer0
    Tcnt0 = 0
    T = 0                                                       'wlacza licznik 0
    Do
    
    Gosub Temperatura
    
    Loop                                                        'koniec petli
    
    
    Temperatura:
       Portc.2 = 0
       Config 1wire = Portb.0                                   '1 czujnik temperatury
       1wreset
       1wwrite &HCC
       1wwrite &H44
       Waitms 150
       1wreset
       1wwrite &HCC
       1wwrite &HBE
       T = 1wread(2)
       T = T * 10
       T = T / 16
       'Stt = Str(t)
       'Stt = Format(stt , "0-0")
       Text = Format(str(t) , "   ")
    Return


    bledy:
    Error : 213   Line :   56    String expected for assignment [STR(T)]  , in File : L:\bascom\moje programy\test.bas
    Error : 31    Line :   56    Invalid datatype [[0011] 200[STR(T)]]  , in File : L:\bascom\moje programy\test.bas
  • REKLAMA
  • #7 7506877
    mirekk36
    Poziom 42  
    Bascom to nie język C - a ty mu za dużo do myślenia dajesz w tej linijce ;)

    Text = Format(str(t) , "   ") 


    tzn jako pierwszy parametr funkcji Format dajesz nie STRING tylko kolejną funkcję w postaci str(t). To może czasem przypadkowo zadziałać i tak może działo się w starszej wersji choć nie było zgodne z opisem działania funkcji w Bascomie

    a tymczasem jeśli zrobisz to prawidłowo np tak:

       Dim Text As String * 10
       Dim Text1 As String * 10
    
       Text = Str(t)
       Text1 = Format(Text , "   ")


    czyli najpierw funkcją Str(t) zamienisz zmienną T typu integer do stringa, a potem ten właśnie string podasz jako pierwszy argument(paramtetr) funkcji Format to już wszystko będzie dobrze

    Natomiast gdyby to był język C to mógłbyś nawet coś takiego zrobić ;) :

       Text = Format(str( T / 16 ) , "   ")


    widzisz? a tu? w Bascomie ! - hola hola - tak nie można
  • #8 7508394
    szeryfff
    Poziom 24  
    dzieki kolego, chyba masz raje :)

    widze ze znasz sie na bascomie, to moze bedziesz potrafil odpowiedziec mi na jeszcze 2 pytania :)
    1) czy w bascomie jest mozliwe takie dzialanie:
    dim droga as long
    dim droga1 as long

    droga1 = droga/12.54

    bo z moich prob wynika ze nie, i doje pory robilem tak, ze zmnienna droga mnozylem razy 100, i potem dzielilem przez 1254, no ale to sa juz dodatkowe operacje

    2) w jakims tutorialu do Bascom AVR znalazlem opis, ze zmnienna long przechowuje liczby od -2^32 do 2^32-1, natomiast w moim programie, jezeli do zmniennej typu long recznie wpisze wartosc 2000000, to po pewnych operacjach na wyswietlaczu mam zmienna ze znakiem minus (ale nie taka, jaka powinna byc ze znakiem plus).
    czy to wynika z tego, ze zmienna typu long jednak przechowuje mniejsze wartosci, czy moze ja cos robie zle w programie?

    pozdrawiam:)
  • REKLAMA
  • #9 7508720
    mirekk36
    Poziom 42  
    Typy się kłaniają, typy danych, jeśli więc zrobisz tak:

    dim droga as long 
    dim droga1 as single 
    
    droga1 = droga/12.54 


    to powinno zadziałać ;)

    przecież dzielisz nie przez liczbę całkowitą tylko zmiennoprzecinkową, a więc w wyniku też masz dostać zmiennoprzecinkową - dlatego trza wybrać typ single w Bascomie.

    Ale to z kolei spowoduje ci straszny rozrost kodu bo Bascom jak i każdy inny język dorzuci swoje programowe biblioteki dla obsługi liczb zmiennoprzecinkowych.

    Dlaczego czasem lepiej wykonac tych kilka dodatkowych operacji o których pisałeś hyhyhy

    popróbuj to sam ocenisz co i kiedy lepiej zastosować
  • #10 7510643
    szeryfff
    Poziom 24  
    oki, pewnie jest tak jak piszesz :)

    a moze znasz odpowiedz na moje drugie pytanie? :)
  • #11 7538503
    Freddy
    Poziom 43  
    Do d... tutorial, zobacz w helpie do Bascoma.
    Cytat:

    Long (four bytes). Longs are stored as signed 32-bit binary numbers ranging in value from -2147483648 to 2147483647.
    Single. Singles are stored as signed 32 bit binary numbers. Ranging in value from 1.5 x 10^–45 to 3.4 x 10^38
    Double. Doubles are stored as signed 64 bit binary numbers. Ranging in value from 5.0 x 10^–324 to 1.7 x 10^308
  • #12 7538653
    Konto nie istnieje
    Poziom 1  
REKLAMA