Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] BASCOM, ERROR: 380 w pewnej funkcji na nowszym Ide bascoma

Elektromechanik88 29 Jul 2020 23:13 246 2
  • #1
    Elektromechanik88
    Level 3  
    Witam.
    Mam kłopot ze skompilowaniem tego kodu w bascomie 2.0.8.1
    W wersji bascoma 2.0.7.3, której do tej pory używałem kompilacja przechodzi pomyślnie

    Code: vbnet
    Log in, to see the code


    Wyskakuje mi błąd
    ERROR: 380 Line: 43 Array<> Non Array mismatch [SEGMENT(I), SEGMENT]

    Error sugeruje błąd z tablicą w funkcji

    Czy ktoś miał podobny problem?
  • Helpful post
    #2
    szelus
    Level 34  
    W zasadzie nie znam Bascom-a, ale podejrzanie wygląda mi to, że argument Segment tej funkcji nie jest zadeklarowany jako tablica, a jednak odwołujesz się do niego jako tablicy.
  • #3
    Elektromechanik88
    Level 3  
    Witam.
    No właśnie w tym miałem problem. Stara wersja pakietu IDE kompilowała tę funkcję bez problemu i wszystko działało, natomiast ta nowsza zwraca błąd, że tablica nie jest zadeklarowana w parametrze funkcji.

    Zastanawiałem się nad tym zaglądając do helpa w starszej wersji IDE, ale nie zajrzałem do helpa od nowszej wersji ;)

    W nowszym helpie jest to uwzględnione

    Składnia wygląda następująco:

    Declare Sub TestArray(ar() as byte, b as byte)

    Dim a(10) as byte , q as byte

    TestArray a(1) , q



    As you can see, we add () after the variable to indicate that it is an array we pass.

    When we call the sub program, we pass the first address or the base address of the array. That is a(1) in this case.

    Inside the sub module, we also refer to the variable using ().



    Sub TestArray(ar() as byte, b as byte)

    print ar(1)

    print ar(b)

    End Sub



    In older BASCOM versions, it was not required to use (). You only needed to pass the base address. But that is potential unsafe : if you reference a variable as an array while it is actually a single variable, then you can write to the wrong address. When using (), the compiler known when an array is expected and can inform you about a possible error.

    If you have old code you can use CONFIG ERROR=IGNORE,380=IGNORE to ignore errors as a result of the updated syntax.



    Dziękuję za pomoc.
    Zamykam temat.