Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Odwołania CALL i GOSUB, jaka jest różnica ?

Billy
-
-
Posty:25
Rejestracja:28 lis 2004, o 17:45
Lokalizacja:Wronki
Kontaktowanie:
Odwołania CALL i GOSUB, jaka jest różnica ?

Postautor: Billy » 19 sty 2005, o 22:24

Piszę program na AT89C4051 i używam dyrektywy $large.

Nie sposób więc pisać program bez podprogramów SUB.

W moim programie bardzo często odwołuje się do podprogramów, często też robię to w petlach FOR (a więc wielokrotnie).

Bywa też tak, że jeden podprogram odwołuje się do innego podprogramu.

Wszysztko działa sprawnie, ale teraz gdy dodam kolejne odwołanie CALL (trudno policzyć, które z kolei) procesor wykazuje zero reakcji. Zachowuje się tak, jakby nie był on w ogóle zasilany.

Wnioskuję więc, że polecenie CALL można używać skończoną ilość razy.

Czy macie pomysł, jak ominąć ten problem??

Czym się różni odwołanie CALL od GOSUB ??

Bo gdy używam GOSUB, to nie widzę żadnej różnicy.

Rozwiązanie tego problemu ułatwiłoby mi bardzo pisanie, ponieważ wielokrotnie odwołuje się do zapisu do pamięci 24C02, a co za tym idzie czytelność i długość programu.

Proszę o pomoc.
Za każdą podpowiedzć serdeczne dzięki.

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 19 sty 2005, o 23:20

Witam.
To jest proste :)
1)Przez Call sub1(x,y,z) możemy przekazać parametry do podprogramu , a przez GoSub , niestety nie.
2) przez GoSub etyk możemy odwołać się do etykiety , przez Call niestety nie.

Przykład:

Kod: Zaznacz cały

Dim Aa As Byte , Bb As Byte , Cc As Byte Declare Sub podprogram(aa As Byte,bb As Byte,cc As Byte) Do aa=7 bb=8 cc=9 Gosub Etykb Call podprogram(1,2,3) Gosub Etykc Loop Sub podprogram(aa,bb,cc) 'procedura Gosub Etykb Print Aa Etyka: Print Bb Etykb: Print Cc End Sub Etykc: GoSub Etyka Return
Prześledź w symulatorze , to powinno wyjaśnic Ci różnicę między Call i GoSub i jak się oszczędza pamięć programu ;)
Jesli chodzi o ilość wywoływanych Call czy GoSub to ograniczeni jesteśmy pamięcia programu , a jeśli masz na myśli głębokść zagnieżdżenia , to ogranicza nas stos , którego wielkość w/w uC jest mizerna i jeśli masz do tego jakieś przerwanie to.... czarno to widzę :(

Pozdrawiam
Piotrek

Billy
-
-
Posty:25
Rejestracja:28 lis 2004, o 17:45
Lokalizacja:Wronki
Kontaktowanie:

Postautor: Billy » 20 sty 2005, o 00:20

Witam.
To jest proste :)
1)Przez Call sub1(x,y,z) możemy przekazać parametry do podprogramu , a przez GoSub , niestety nie.
2) przez GoSub etyk możemy odwołać się do etykiety , przez Call niestety nie.

Przykład:

Kod: Zaznacz cały

Dim Aa As Byte , Bb As Byte , Cc As Byte Declare Sub podprogram(aa As Byte,bb As Byte,cc As Byte) Do aa=7 bb=8 cc=9 Gosub Etykb Call podprogram(1,2,3) Gosub Etykc Loop Sub podprogram(aa,bb,cc) 'procedura Gosub Etykb Print Aa Etyka: Print Bb Etykb: Print Cc End Sub Etykc: GoSub Etyka Return
Prześledź w symulatorze , to powinno wyjaśnic Ci różnicę między Call i GoSub i jak się oszczędza pamięć programu ;)
Jesli chodzi o ilość wywoływanych Call czy GoSub to ograniczeni jesteśmy pamięcia programu , a jeśli masz na myśli głębokść zagnieżdżenia , to ogranicza nas stos , którego wielkość w/w uC jest mizerna i jeśli masz do tego jakieś przerwanie to.... czarno to widzę :(

Pozdrawiam
Piotrek
No tak, różnica jest.
Czyli z tego co mówisz wynika, że poprostu nie mogę zbyt głęboko zagnieżdżać podprogramów. Nie używam na szczęście przerwań. Zrezygnowałem z tego, ponieważ mój program jest bardzo obszerny i przerwania nie zdawały egzaminu.

Dzieki za podpowiedź. Spróbuję przekonstruować mój program.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 66 gości