Witam.
Nie mam już pomysłu, może ktoś z was coś podsunie.
Problem leży prawdopodobnie w złym zarządzaniu pamięcią.
Program to miernik energii elektrycznej. Może zamiast kodu przedstawie schemat blokowy.
Cały program znajduje się w pętli, nie używam zadnych gosubów i innych podprogramów. Jest tylko 1 przerwanie co sek i tylko zmiana 1 zmiennej.
1. Program najpierw zapisuje próbki do zmiennych
Dim Utab(200) As Integer
Dim Itab(200) As Integer
Próbek jest po 180 dla napięcia i prądu. Czytane są z 2 zawnętrznych przetworników.
2. Potem wstępne obliczenia i przepisanie danych do zmiennych
( Proces 1 i 2 wykonywany jest ok 15 razy na sek, probki do tablicy zawsze wpisywane są od nowa, znów obliczenia i przepisanie danych do zmiennych)
3. Kolejne obliczenia ale co 1 sek ze zmiennych z punktu 2
4. obsługa przycisków, wyświetlacza.
Przyciski i wyświetlacz mozna pominąć, musze najpierw rozwiązać problem zwieszania.
I teraz ........ niezrozumiałym dla mnie elementem są te tablice i wpisywanie do nich próbek. Zadeklarowanych jest 200 zmiennych 2 bajtowych dla napięcia i tak samo dla prądu. Wydaje mi się że tak jest prawidłowo. Na 100% nie przekraczana jest ta liczba któa w praktyce wynosi 180. Tymczasem przy takiej deklaracji program wiesza sie po paru minutach poprawnego działania. Przy zadeklarowaniu 400
Dim Utab(400) As Integer
Dim Itab(400) As Integer
program potrafi działać parę godzin.
Max co mogę zadeklarować to 450. Potem kompilator pluje się że brak pamięci.
Mój wniosek to że brakuje ramu, w programie jest ok 25 zmiennych single, sporo operacji matematycznych włącznie z pierwiastkowaniem. Być może program potrzebuje sporo ramu albo coś bascom partoli. Nie rozumiem co może byc przyczyną dłuższego działania programu przy deklaracji 400.
Zastanawiam się jeszcze nad konfiguracją
$hwstack
$swstack
$framesize
ale nie wiem jak to ugryźć.
Nie mam już pomysłu, może ktoś z was coś podsunie.
Problem leży prawdopodobnie w złym zarządzaniu pamięcią.
Program to miernik energii elektrycznej. Może zamiast kodu przedstawie schemat blokowy.
Cały program znajduje się w pętli, nie używam zadnych gosubów i innych podprogramów. Jest tylko 1 przerwanie co sek i tylko zmiana 1 zmiennej.
1. Program najpierw zapisuje próbki do zmiennych
Dim Utab(200) As Integer
Dim Itab(200) As Integer
Próbek jest po 180 dla napięcia i prądu. Czytane są z 2 zawnętrznych przetworników.
2. Potem wstępne obliczenia i przepisanie danych do zmiennych
( Proces 1 i 2 wykonywany jest ok 15 razy na sek, probki do tablicy zawsze wpisywane są od nowa, znów obliczenia i przepisanie danych do zmiennych)
3. Kolejne obliczenia ale co 1 sek ze zmiennych z punktu 2
4. obsługa przycisków, wyświetlacza.
Przyciski i wyświetlacz mozna pominąć, musze najpierw rozwiązać problem zwieszania.
I teraz ........ niezrozumiałym dla mnie elementem są te tablice i wpisywanie do nich próbek. Zadeklarowanych jest 200 zmiennych 2 bajtowych dla napięcia i tak samo dla prądu. Wydaje mi się że tak jest prawidłowo. Na 100% nie przekraczana jest ta liczba któa w praktyce wynosi 180. Tymczasem przy takiej deklaracji program wiesza sie po paru minutach poprawnego działania. Przy zadeklarowaniu 400
Dim Utab(400) As Integer
Dim Itab(400) As Integer
program potrafi działać parę godzin.
Max co mogę zadeklarować to 450. Potem kompilator pluje się że brak pamięci.
Mój wniosek to że brakuje ramu, w programie jest ok 25 zmiennych single, sporo operacji matematycznych włącznie z pierwiastkowaniem. Być może program potrzebuje sporo ramu albo coś bascom partoli. Nie rozumiem co może byc przyczyną dłuższego działania programu przy deklaracji 400.
Zastanawiam się jeszcze nad konfiguracją
$hwstack
$swstack
$framesize
ale nie wiem jak to ugryźć.
