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

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