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

[ATmega32][Basco] przesyłanie stringów przez referencje

stozu 05 Cze 2009 10:22 1405 4
REKLAMA
  • #1 6618265
    stozu
    Poziom 10  
    Witam mam taki problem,

    przesyłam adres stringa do procedury, string ma 8 znaków i później jest wykorzystywany do zapisania go treścią z polecenia Input.
    Gdy polecenia nie były realizowane w procedurze to wszystko dzialalo ok.
    A teraz wpisujac moge podac tylko jedna literke podczas gdy string powinien miec 8 znakow. Probowalem zmieniac cos w deklaracji, dopisywać *8 itp. ale nic nie pomogło.

    Być może nieprawidłowo to robię.
    W wywołaniu funkcji występuje zmienna string (jej adres), zmienna jest zadeklarowana jako string*8.
    Napomnę, że zadeklarowane mam tablice stringów (8 stringów po 8 znaków)
    (To jest ostatni listing, który testowałem, i zostawiłem różnice w declare i w sub dotyczącą string*8)

    Reasumując problem jest taki, że jak wywołję procedurę i wpisuję nazwe, to moge wpisac tylko 1 znak a nie 8.

    
    Declare Sub Konf(byval K As Byte , Typ As Byte , Nazwa_cz As String , Rodzaj_cz As Byte , Typ_cz As Byte)
    ....
    Dim Nazwa_cz_sa(8) As String * 8 , Nazwa_cz(8) As String * 1 , Dim Nazwa_cz_a(8) As String * 8,........ 
    ......
    do
    ....
    Call Konf(k , A , Nazwa_cz_a(k) , Rodzaj_cz_a(k) , Typ_cz_a)
    ......
    loop
    ......
    Sub Konf(byval K As Byte , Typ As Byte , Nazwa_cz As String *8 , Rodzaj_cz As Byte , Typ_cz As Byte)
    ....
          Input "Podaj nazwe cz, max. 8 znakow: " , Nazwa_cz(k)
    .....
    
       End If
    End Sub
    
  • REKLAMA
  • REKLAMA
  • #3 6618458
    stozu
    Poziom 10  
    w sub'ie wyciąłem (k), ale wciąż nie działa
    Nie wiem czy Bascom obsługuje w ogóle to co chcę zrobić. A muszę wysyłaś stringi jako element tablicy bo mam ich trochę, nie chcę deklarować każdego z osobna, poza tym wykorzystyjępętlę do zwiększania k.

    Wciąż nie działa
  • REKLAMA
  • #4 6618541
    mirekk36
    Poziom 42  
    ale ja nie mówię, żebyś wycinał jakieś k

    nie widzisz różnicy pomiędzy swoj deklaracją:

    Dim Nazwa_cz_sa(8) As String * 8


    a moją:

    Dim Nazwa_cz_sa As String *8


    to po pierwsze, a po drugie, nie widzisz różnicy w deklaracji funkcji swojej:

    Call Konf(k , A , Nazwa_cz_a(k) , Rodzaj_cz_a(k) , Typ_cz_a)


    a powinno być jak w mojej:

    Call Konf(k , A , Nazwa_cz_a , Rodzaj_cz_a , Typ_cz_a)
  • #5 6618587
    stozu
    Poziom 10  
    to z wycięciem k nie było do twojej odpowiedzi.

    I widzę różnicę.

    Chcąc zastosować Twój sposób musiałbym utworzyć około 40 zmiennych typu string*8

    dim nazwa_cz1 as string*8, nazwa_cz2 as string*8... nazwa_cz40 as string*8


    stosując tablice muszę wysyłać nazwę ze wskazaniem elementu. Nie wiem czy jest w Bascomie jak w C, że nazwa tablicy jest adresem pierwszego elementu i ewentualnie jak to obsłużyć.

    Wydaje mi się, że obługa tych zmiennych zamiast pętli i tablic zajęła by znacznei więcej. I tu leży mój problem bo obecnie blisko 100% mam wykorzystane na cały program uC
REKLAMA