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

[Bascom] Ustawianie stanu HI na pinie z poziomu etykiety

ShEvU_elektro 20 Sie 2010 19:53 1443 10
  • #1 8420059
    ShEvU_elektro
    Poziom 25  
    Mam taki problem. Etykieta wygląda mniej więcej tak:

    Otwieranie:
    set dioda
    return


    Dlaczego po return stan z powrotem się zmienia a nie zostaje taki jak ustawiłem?
  • #3 8420150
    ShEvU_elektro
    Poziom 25  
    i właśnie nie zmianiam.....jestem tego pewny w 100% Też się zdziwiłem że mam taka sytuację. Mało tego, gdy tworze sobie zmienną "dim Flaga as bit" i ustawiam ją w etykiecie to po wyjściu z etykiety flaga znów ma 0

    P.S Tą etykietę wywołuję z innej etykiety czy ma to znaczenie?


    EDIT
    Opanowane. Okazało się że zmieniając etykietę "czytaj", z której wywołuję "otwieranie", na procedurę wszystko działa jak należy.
    Jak tylko uruchomię system to przesiadam się na C (pod warunkiem że opanuje Eclipse-a )
  • #4 8420355
    zumek
    Poziom 39  
    ShEvU_elektro napisał:
    ...Dlaczego po return stan z powrotem się zmienia a nie zostaje taki jak ustawiłem?

    Jak dasz do wglądu kompletny(kod+ustawienia kompilatora) projekt, to Ci pomożemy, inaczej to tylko możemy wróżyć z ... gwiazd.
  • #6 8421219
    ShEvU_elektro
    Poziom 25  
    Problem rozwiązany, lecz chciałbym wiedzieć jakie ma to znaczenie.
  • #7 8421635
    mirekk36
    Poziom 42  
    Nie można wywoływać etykiety a tym bardziej jednej etykiety z innej etykiety ;) .... nie ma w ogóle takiego pojęcia. Wcale się nie czepiam tylko jak chcesz żeby szybciej ktoś mógł pomóc to staraj się operować jakimiś tam chociaż podstawowymi pojęciami programistycznymi.

    Wywoływać to można podprogram, procedurę, funkcję itp. W bascomie żeby wywołać kawałek kodu czyli podprogram opatruje się go etykietą czyli unikalną nazwą. Zatem zmiana nazw etykiet nie ma żadnego znaczenia.

    Ale już sposób i umiejscowienie wywoływania podprogramów oraz sposobu powrotu z nich zaczyna mieć spore znaczenie. Ale żeby coś pomóc - to weź kolego wklej większy kawałek swojego kodu. Te dwa podprogramy oraz sposób ich wywoływania z pętli głównej całego programu. Wtedy od razu wszystko stanie się jasne.
  • #8 8421875
    ShEvU_elektro
    Poziom 25  
    Jak już pisałem wcześniej wszystko działa. Zrobiłem wszystko na procedurach, tak jak być powinno. Znam pojęcia programistyczne, uwierz. Pisałem o skokach do etykiety "otwieranie", a jest to (jeśli mamy się trzymać pojęć) normalny podprogram. Wiem jak działa taki skok i co się tam dzieje, lecz nie wiedziałem z jakiego powodu nie mogłem wywołać podprogramu z innego podprogramu :) Tyle.

    Patrze teraz na tytuł i faktycznie można było się doczepić o nazewnictwo. Przepraszam, skrót myślowy.

    Dziękuje wszystkim za pomoc i "naprostowanie" :)


    Pozdrawiam
  • #9 8421941
    mirekk36
    Poziom 42  
    Nie , no w Bascomie spokojnie można wywowłać za pomocą Gosub jeden podprogram z innego. Nie ma z tym żadnego problemu. Tyle tylko, że coś może się tam pomieszało wcześniej z kolejnością wywołań itp o co niestety bardzo łatwo przy używaniu tzw podprogramów. Zdecydowanie lepsze są funkcje ale wcale nie dlatego że one działają a podprogramy nie. Po prostu łatwiej kontrolować kod mając funkcje a nie setki dziwnych skoków do etykiet.

    Poza tym być może taki swój podprogram wywoływałeś za pomocą Goto a nie Gosub i wtedy rozkaz return robił dziwolągowate zachowanie - ale to jest normalne. Gosub to to samo co Call - musi wystąpić w takim podprogramie rozkaz return. Ale gdy skaczesz za pomocą Goto - to już nie ma prawa się podprogram zakończyć returne'em.
  • #10 8422457
    xury
    Specjalista automatyka domowa
    A mnie chodziło o to, że nieumiejętne obchodzenie się z podprogramem może spowodować nadmierny rozrost stosu i w konsekwencji crash programu.
    Np. w sytuacji kiedy skaczemy do podprogramu1, a w nim do podprogramu2, a potem skaczemy do miejsca gdzie nastąpił pierwszy skok nie dając tak naprawdę szansy na zakończenie podprogramu przez Return.
  • #11 8423539
    ShEvU_elektro
    Poziom 25  
    xury napisał:
    w sytuacji kiedy skaczemy do podprogramu1, a w nim do podprogramu2, a potem skaczemy do miejsca gdzie nastąpił pierwszy skok nie dając tak naprawdę szansy na zakończenie podprogramu przez Return.


    Takie sytuacje zawszę rozważam :)

    Faktycznie używałem goto.
    Już teraz robię wszystko na procedurach i funkcjach także nie ma dziwnych problemów :)
REKLAMA