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ę

Przekazywanie parametrów do procedur SUB w Bascom demo

Leszekjed
-
-
Posty:22
Rejestracja:22 lut 2004, o 11:12
Lokalizacja:Wrocław
Przekazywanie parametrów do procedur SUB w Bascom demo

Postautor: Leszekjed » 4 mar 2004, o 23:30

Czy program Bascom demo ma ograniczenia związanie z działaniem przekazywania parametrów do procedur SUB ?
Wygląda na to, że procedura nie akceptuje ani przekazania parametru przez wartość (byval) ani przez adres (byref). Używam wersji programu 1.11.7.4 z procesorem ATMEGA 32.
Ponieważ i tak będę zmuszony zakupić pełną wersję Bascom-a do programowania powyżej 2kB to obawiam się, że podobnie jest w wersji komercyjnej. Czy ktoś ma doświadczenia z programem demo i pełnym z tym procesorem ?
L.J.

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 4 mar 2004, o 23:58

A co Ci sie dzieje?

Leszekjed
-
-
Posty:22
Rejestracja:22 lut 2004, o 11:12
Lokalizacja:Wrocław

Postautor: Leszekjed » 5 mar 2004, o 00:27

Zmienne przekazane w wywołaniu procedury SUB mają wewnątrz niej przy pierwszym wywołaniu wartość 0. Możliwa jest ich modyfikacja ale zmiany mają znaczenie lokalne - wewnątrz procedury. Po wyjściu z procedury zmienne, które w niej były modyfikowane mają wartość jak przed wywołaniem SUB. Co ciekawe po ponownym wejściu do procedury SUB okazuje się, że wewnątrz niej pamiętane są ostatnie zmodyfikowane wartości tych zmiennych. Innymi słowy procedura zmienia zmienne tylko w obrębie swojego kodu bez wpływu na wartości tych zmiennych na zewnątrz procedury SUB.
Przykład kodu:

Dim G As Byte
Declare Sub A(a As Byte)
Config Pinc.2 = Input
Portc.2 = 1
G = 0

Do
If Pinc.2 = 0 Then Call A(g)
Cls
Lcd G
Wait 1
Loop
End 'end program

Sub A(a As Byte)
Incr A
Lcd A
Wait 1
Cls
End Sub

Program po uruchomieniu wyświetla 0, zmian stanu na c.2 powoduje wywołanie sub A i wyświelenie 1 , po wyjściu z procedury program ponownie wyświetla 0 a po ponownymej zmianie stanu c.2 w czasie pracy procedury A na wyświetlaczy jest 2, po wyjściu z procedury znowu mam 0 a po ponownej zmianie stanu c.2 na wyświetlaczu jest 3 itd. Wewnątzr procedury zmiany zachodzą ale na zmiennych, które nie są ani pobierane przy wywoływaniu ani nie przekazywane przy wyjściu z procedury.
L.J.

vahooz
-
-
Posty:16
Rejestracja:4 mar 2004, o 01:49
Lokalizacja:Wrocek
Kontaktowanie:

Postautor: vahooz » 5 mar 2004, o 00:32

Chcesz Cracka?
:P
Ostatnio zmieniony 5 mar 2004, o 00:57 przez vahooz, łącznie zmieniany 2 razy.

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 5 mar 2004, o 00:39

Powinno dzialac. W symulacji dziala ten programik ok. A jak masz ustawione w parametrach kompilatora soft stack, frame oraz hw stack?

Leszekjed
-
-
Posty:22
Rejestracja:22 lut 2004, o 11:12
Lokalizacja:Wrocław

Postautor: Leszekjed » 5 mar 2004, o 00:47

Tu jest prawdopodobnie rozwiązanie !
Wszystkie te wartości są równe 0 a więc nie było miejsca na przekazania ich podczas wywołania procedury !
Mam nadzieję, że po zmianie program ruszy.
Dziękuję za pomoc.
L.J.

Leszekjed
-
-
Posty:22
Rejestracja:22 lut 2004, o 11:12
Lokalizacja:Wrocław

Postautor: Leszekjed » 5 mar 2004, o 00:50

Faktycznie , to jest lekarstwo na mój problem. Po ustawieniu niezerowych wartości dla stosu wszystko działa bez problemu.
Jeszcze raz dziękuję za pomoc.
L.J.

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 5 mar 2004, o 01:15

Procedury o ile pamietam wykorzystuja soft stack i frame.

Leszekjed
-
-
Posty:22
Rejestracja:22 lut 2004, o 11:12
Lokalizacja:Wrocław

Postautor: Leszekjed » 5 mar 2004, o 16:01

Procedury wymagają po 2 bajty na każdą zmienną procedury stąd kłopot z ich działaniem bez stosu.
Ponieważ do tej pory programowałam At90S2313 nie zauważyłem, że po zmianie procesora wyzerowały się wskaźniki stosu w ustawieniach kompilatora. Są to niespodzianki o których warto pamiętać jak i taka na przykład, że bity fuse procesora ATMEGA (przynajmniej w wersji 32) są ustawione fabrycznie tak, że procesor działa na wewnętrznym generatorze RC z częstotliwością chyba 2MHz. Ustalenie tego faktu także zajęło mi nieco czasu - przekopałem pełną dokumentację firmową tego procesora.
L.J.

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 10 gości