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
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
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.
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.
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.
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.
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.
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.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości