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

BASCOM/ Gosub, sub, goto.

arktik1 05 Sie 2010 21:06 4633 15
REKLAMA
  • #1 8368919
    arktik1
    Poziom 27  
    Witam
    Chciał bym się dowiedzieć na temat skoków do podprogramów i wykonywania tam operacji z użyciem dodatkowych pętli.
    Przypuśćmy że mam główny program w pętli DO...LOOP, który wykonuję daną operację.
    Po pojawieniu się jakiegoś warunku program skacze poprzez GOSUB i zaczyna wykonywać podprogram który też znajduje się w pętli.
    Po spełnieniu warunku powraca RETURN.
    W takich przypadkach jest zapisywany STOS który po wielu takich skokach może się przepełnić.
    Czy istnieje możliwość skakania do programów bez możliwości zapisywania STOSU?
    Gdy mamy np. 2 programy które mogą działać niezależnie od siebie, a nie muszą się znajdować w 1 pętli z powodu szybszego działania.
    Jak skoczyć z 1 do 2 a potem z 2 do 1?
    I jak duży może być "GOSUB", czy może w nim znajdować się pętla?
  • REKLAMA
  • #2 8368956
    tadzik85
    Poziom 38  
    Wszystko co na stos odłożone ze stosu zostaje zdjęte. I programy należy pisać tam by nie było skoków goto nieodpowiednio użytych.
  • REKLAMA
  • #3 8369051
    arktik1
    Poziom 27  
    No dobrze.
    A co jeśli główny program zajmuje np 4kb a skok zajmuje 12kb?
    Nie można skoczyć z jednego do drugiego nie zapisując stosu?
  • #4 8369058
    tadzik85
    Poziom 38  
    tylko bezpowrotny skok
  • REKLAMA
  • #7 8369161
    tadzik85
    Poziom 38  
    Tu jest to do przyjęcia. problemem jest goto gdy wyskakujesz nim np z wnętrza funkcji i nie wracasz po chwili do niej.

    Ogólnie każdy program można napisać bez goto. W C np jest to stanowczo zalecane.
  • #8 8369373
    arktik1
    Poziom 27  
    Czyli GOTO nie zapisuje STOSu.
    Czy jest jeszcze jakaś instrukcja która powoduje że skok nie zapisuje stosu?
  • #9 8369426
    tadzik85
    Poziom 38  
    ale z jakich powodów interesuje cie ten stos??
  • #10 8369993
    arktik1
    Poziom 27  
    Ogólnie mam braki ze STOSu i chciałem wyjaśnić sobie kilka rzeczy.
    Zastanawiałem się co zrobić ,bo mam program w którym skok zajmuje większość kodu.
    Są to tak jak by 2 programy, które mogą działać nie zależnie od siebie.
    Żeby nie mieszać ich ze sobą pomyślałem że zastosuję procedurę skoków między nimi bez zapisywania stosu.
    Oczywiście mogę je wpakować razem do pętli, jeszcze nie wiem co zrobie.
    W każdym razie na dzień dzisiejszy jeśli wykonam GOSUB do programu to program robi błędy.
    Podejrzewam że problemem jest wielkość skoku.
  • #11 8370029
    xury
    Specjalista automatyka domowa
    Rozumiem, że napisałeś to tak, że program skacze do jednego podprogramu, wykonuje jakieś działania, a następnie skacze z powrotem do pierwszego bez zakończenia przez Return
    Tak napisany program zapełni stos w kilka chwil. W BASCOMie nie można tak pisać.
  • #12 8370327
    Konto nie istnieje
    Poziom 1  
  • #14 8370790
    Konto nie istnieje
    Poziom 1  
  • #15 8370858
    arktik1
    Poziom 27  
    Rozumiem że jak zrobię tak:
    
    
    XXX:
    DO
    ...
    ...
    ...
    IF coś tam THEN GOTO xx
    LOOP
    
    XX:
    DO
    ...
    ...
    ...
    ...
    ...
    IF coś tam THEN GOTO XXX
    
    LOOP
    

    To stos będzie niezapisywany?
  • REKLAMA
  • #16 8371058
    Konto nie istnieje
    Poziom 1  
REKLAMA