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

Jak zresetować SUB w Bascom

TomekMus 08 Maj 2009 12:30 1362 8
REKLAMA
  • #1 6505397
    TomekMus
    Poziom 17  
    Potrzebuje zresetować SUB lub zmienić w przerwaniu wartość until do loop:

    Może kawałek kodu dla jasności:
    On Urxc Getchar
    Enable Interrupts
    Enable Urxc
    
    dim x as byte
    dim znak as byte
    
    X = 52
    
    do
       call Wykonaj
    loop
    end
    
    sub Wykonaj
      do
        Incr Koniec
        
    
        Wait 1
      loop until Koneic = X
    end sub
    
    :getchar
       Znak = InKey()
       X:=Znak
    return


    Problem jest taki że nie zmienia mi się wartosc X bo przerwanie nie wpływa na działające już w pętli do loop x a chce to zmieniać dynamicznie albo najlepiej zresetować SUB
  • REKLAMA
  • Pomocny post
    #2 6505613
    wicy
    Poziom 22  
    Zresetować SUB?? Chodzi ci o wyjście z suba?

    
    On Urxc Getchar 
    Enable Interrupts 
    Enable Urxc 
    
    dim x as byte 
    dim znak as byte 
    
    X = 52 
    
    petla_glowna: 
       gosub Wykonaj 
    goto petla_glowna
     
    end 
    
    Wykonaj:
        Incr Koniec 
        if koniec=x then
             goto petla_glowna
        end if
    return 
    
    :getchar 
       Znak = InKey() 
       X:=Znak 
    return
    
  • REKLAMA
  • #3 6505702
    TomekMus
    Poziom 17  
    O to mi chodziło bo jak mam x w przerwaniu to po zakonczeniu przerwania x mi się nie aktualizuje w subie bo program wraca do poprzedniego miejsca z poprzednimi wartosciami
  • REKLAMA
  • #4 6505749
    wicy
    Poziom 22  
    Nie mam dostępu do bascoma w tej chwili. Należało by jeszcze sprawdzić, czy gosub w pętli głównej nie odkłada na stos adresu powrotu i zdjąć go przez reti lub zamiast gosub zastosować goto.
  • #5 6505876
    K_o_n_r_a_d
    Poziom 23  
    Nigdy tak jak zaproponował wicy! ZAWSZE, gdy wejdziemy w procedurę lub podprogram MUSIMY wyjść tak jak należy zdejmując ze stosu to co odłożyliśmy!
    Zamiast:
    if koniec=x then
             goto petla_glowna
        end if 

    Wstaw:
        if koniec=x then
             return
        end if 

    -----
    Jeśli zamiast:
    petla_glowna:
       gosub Wykonaj
    goto petla_glowna 

    wpisalibyśmy:
    petla_glowna:
       goto Wykonaj
    goto petla_glowna 
    To oczywiście poprawne byłoby wyjście z pętli przez goto, ale nie kiedy odłożyliśmy na stos cokolwiek.
  • REKLAMA
  • #7 6509501
    ZbeeGin
    Poziom 39  
    Z SUB wychodzimy albo przez EXIT SUB, albo tak konstruujemy strukturę w SUB by ewentualna pętla mogła zostać zakończona w sposób "naturalny".

    Przy stosowaniu SUB należy zapomnieć, że istnieje polecenie GOSUB/RETURN a już całkowicie zapomnieć o poleceniu GOTO. I radzę sobie raz na zawsze to zapamiętać.
  • #8 6510560
    rdt
    Poziom 25  
    skoro należy zapomnieć że istnieje polecenie gosub to jak wywołać procedure???
  • #9 6510582
    ZbeeGin
    Poziom 39  
    Jak już używasz poleceń SUB to wszystkie procedury najlepiej też umieścić jako SUB...END SUB. Wtedy wszystko będzie jednoznaczne. Mieszanie GOSUB/RETURN z CALL/SUB...END SUB to bomba z opóźnionym zapłonem.

    Oczywiście nie dotyczy to przerwań bo tam konstrukcja:
    Cytat:
    etykieta:
    ciało
    Return

    Jest wymagalna.
REKLAMA