Witam szanownych grupowiczów, czy ktoś mógłby podzielić się ze mną
doświadczeniami na temat obsługi podprogramów w Bascom-ie. Czy są jakieś
ograniczenia jeżeli chodzi o ilość użytych podprogramów. Ograniczenia w
poziomach zagnieżdzenia np. z jednego wyskakuje do drugiego z drugiego do
trzeciego itd następnie następują powroty i wszystko jest ok. Czy kompilator
w procesie kompilacji rezerwuje zasoby na stos, czy jest on przydzielany
dynamicznie. Do zadania tych pytań skłoniły mnie oczywiście problemy przy
optymalizacji programu, dodam, że program kompiluje się i wykonuje
prawidłowo. Jest to kalendarz cyfrowy, może przytoczę kawałek kodu gdzie
występuje problem:
'----------------------------------------------------------'
'-----------'
'Podprogramy'
'-----------'
'----------------------------------------------------------'
Wybor:
Incr Funkcja
Return
'----------------------------------------------------------'
Sub Zmien(zm As Byte)
While P1.0 = 0
Wend
Waitms 250
Incr Zm
End Sub
'----------------------------------------------------------'
Sub Ustaw
Do
Debounce P1.1 , 0 , Wybor , Sub
If P1.0 = 0 Then
Select Case Funkcja
'****************************'
Case 0 : Call Zmien Rok_st ' Przy tym wywołaniu
nie incrementuje '
'****************************'
Case 1 : Call Zmien ' Dalej działa
prawidłowo '
Incr Rok_jd
Case 2 : Call Zmien
Incr Miesiac
Case 3 : Call Zmien
Incr Dzien
Case 4 : Call Zmien
Incr Godzina
Case 5 : Call Zmien
Incr Minuta
Case 6 : Call Zmien
Incr Sekunda
End Select
End If
Loop Until Funkcja = 7
Funkcja = 0
End Sub
Pozdrawim
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ęBascom8051 i podprogramy
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
-
- -
- Posty:35
- Rejestracja:20 mar 2004, o 14:16
- Lokalizacja:Lublin
- Kontaktowanie:
Witam!
Moja przygoda z Bascomem była krótka i to głównie z powodu problemów z podprogramami i stosem, który rozrastał się do olbrzymich rozmiarów pochłaniając pamięć RAM. Podczas testowania programu należy ciągle zwracać uwagę czy wskaźnik stosu nie przekracza rozmiaru pamięci RAM . Niektóre procedury Bascoma (o ile pamiętam np. GetRC5) po wywołaniu dopisują do stosu po dziesięć pozycji!!! Zapisując na nim bardzo dużo rejestrów!
Pozdrawiam.
Moja przygoda z Bascomem była krótka i to głównie z powodu problemów z podprogramami i stosem, który rozrastał się do olbrzymich rozmiarów pochłaniając pamięć RAM. Podczas testowania programu należy ciągle zwracać uwagę czy wskaźnik stosu nie przekracza rozmiaru pamięci RAM . Niektóre procedury Bascoma (o ile pamiętam np. GetRC5) po wywołaniu dopisują do stosu po dziesięć pozycji!!! Zapisując na nim bardzo dużo rejestrów!
Pozdrawiam.
niestety dużo nerwów mnie kosztowało pisanie programów w BASCOM (pisze dla urządzeń przemysłowych). to do czego m.in. doszedłem:
- przerwania pisać tylko w ASM, a "rejestrować je" z parametrem NOSAVE
tzn ON INT1 przerwanie1 NOSAVE, procedury kończyć przez RETI
- używać jak najmniej poleceń typu GOSUB, CALL, gdyż zmniejszamy sobie pamięć RAM a i prawie nigdy się nie dowiemy czy stos został przekroczony jeżeli używamy wielu przerwań (używać GOTO).
- starać się jak najmniej używać podprogramów z zmienną tzn
Sub Zmien(zm As Byte), chyba że stać nas na rozrzutność RAM'u
- no i doświadczenie którego nie da się w pełni przekazać, chyba że poruszysz jakiś problem na forum
powodzenia
- przerwania pisać tylko w ASM, a "rejestrować je" z parametrem NOSAVE
tzn ON INT1 przerwanie1 NOSAVE, procedury kończyć przez RETI
- używać jak najmniej poleceń typu GOSUB, CALL, gdyż zmniejszamy sobie pamięć RAM a i prawie nigdy się nie dowiemy czy stos został przekroczony jeżeli używamy wielu przerwań (używać GOTO).
- starać się jak najmniej używać podprogramów z zmienną tzn
Sub Zmien(zm As Byte), chyba że stać nas na rozrzutność RAM'u
- no i doświadczenie którego nie da się w pełni przekazać, chyba że poruszysz jakiś problem na forum
powodzenia
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 30 gości