Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

BASCOM pożera pamięć RAM. Program się nie kompiluje.

vixy 20 Lut 2012 19:58 1323 8
  • #1 20 Lut 2012 19:58
    vixy
    Poziom 12  

    Witam, mam wrażenie że Bascom strasznie pożera pamięć RAM, wystarczy zadeklarować kilka zmiennych typu double i już program nie chce się kompilować, podczas gdy na analogicznym procesorze PIC, programowanym w C, te same instrukcje nie powodują zajęcia pamięci RAM, a robi to dopiero inicjacja zmiennych, czy wykonywanie na nich operacji arytmetycznych, ale i tak wykorzystują one o przynajmniej rząd mniejszy procent pamięci RAM. Dlaczego tak się dzieje?

    0 8
  • Pomocny post
    #2 20 Lut 2012 20:20
    pietrucha
    Poziom 16  

    Pierwsza sprawa - po Bascomie nie masz się co spodziewać optymalnego programu, to raczej język do zrobienia czegoś na szybko i bez większej znajomości programowania. Niestety, do poważniejszych zadań nadaje się w zasadzie tylko C.
    Druga sprawa - pewnie jest tak - w C, kiedy tylko zadeklarujesz zmienną, kompilator i tak ją usunie, jeśli jej nie używasz. W Bascomie tak raczej nie będzie.
    Trzecia sprawa - do czego używasz zmiennych double? Na procesorach 8-bitowych liczby zmiennoprzecinkowe to bardzo kiepski pomysł. Używasz AVR?
    Czwarta sprawa - na pewno chodzi Ci o zajęcie RAM, a nie Flash? Nie wydaje mi się, żeby sama obsługa zmiennych potrzebowała tak dużo pamięci operacyjnej. Pokaż jakiś fragment kodu.

    0
  • #3 20 Lut 2012 20:39
    vixy
    Poziom 12  

    pietrucha napisał:
    Czwarta sprawa - na pewno chodzi Ci o zajęcie RAM, a nie Flash? Nie wydaje mi się, żeby sama obsługa zmiennych potrzebowała tak dużo pamięci operacyjnej. Pokaż jakiś fragment kodu.


    Wystarczy że przed pętlą główną programu, napiszę sobie:
    Dim tmp1 As Double
    Dim tmp2 As Double
    Dim tmp3 As Double
    Dim tmp4 As Double
    Dim tmp5 As Double
    i otrzymuję Error 22 Out Of SRAM space dla procesora z 128 B pamięci RAM, zmienna double zajmuje 12 B, więc procesor powinien pomieścić 10 takich zmiennych

    pietrucha napisał:
    Trzecia sprawa - do czego używasz zmiennych double? Na procesorach 8-bitowych liczby zmiennoprzecinkowe to bardzo kiepski pomysł.

    dokładnie, ale podałem przykład po prostu dla testów

    Dodano po 4 [minuty]:

    nawet nie 12 tylko 8, więc wychodzi na to że jeszcze więcej ;)

    0
  • Pomocny post
    #4 20 Lut 2012 21:02
    atom1477
    Poziom 43  

    Bo trochę zajmuje stos i ramka. I na zmienne zostaje mniej niż 128B pamięci.
    W C sprawa wygląda tak samo tylko że kompilator C nie sygnalizuje błędu.

    0
  • Pomocny post
    #5 20 Lut 2012 21:08
    pietrucha
    Poziom 16  

    W takim przypadku sprawa wygląda jeszcze inaczej. Oprócz zmiennych, które Ty deklarujesz, kompilator potrzebuje jeszcze miejsca w RAM na inne rzeczy, stos itp. Zobacz w opcjach Bascoma wartości Hardware Stack, Software Stack i Frame Size - to one powinny zajmować resztę dostępnej pamięci. Poszukaj sobie o tym informacji. A najlepiej i tak - przesiądź się na C, będzie trochę trudniej ale lepiej ;)

    Dodano po 4 [minuty]:

    atom1477 napisał:

    W C sprawa wygląda tak samo tylko że kompilator C nie sygnalizuje błędu.

    To też racja, musisz sam sprawdzać, czy zużycie RAM nie przekroczy Ci 100%.

    0
  • #6 20 Lut 2012 21:12
    vixy
    Poziom 12  

    pietrucha napisał:
    atom1477 napisał:

    W C sprawa wygląda tak samo tylko że kompilator C nie sygnalizuje błędu.

    To też racja, musisz sam sprawdzać, czy zużycie RAM nie przekroczy Ci 100%.


    w moim kompilatorze po kompilacji mam podany procent zajęcia RAM i procent zajęcia FLASH, więc na tym się opieram :)

    0
  • Pomocny post
    #7 20 Lut 2012 21:14
    mirekk36
    Poziom 42  

    atom1477 napisał:

    W C sprawa wygląda tak samo ....


    No tu kolega troszkę przesadził chyba? ;) .... w C sprawa nie wygląda tak samo chociażby z uwagi na to, że byle makro ISR() nie odkłada i zdejmuje ze stosu absolutnie wszystkich rejestrów procesora co standardowo robi Bascom. A takich kwiatków jest znacznie więcej niestety :(


    atom1477 napisał:
    tylko że kompilator C nie sygnalizuje błędu.


    No zabrzmiało to tak jakby Bascom potrafił przewidywać prawie jak wróżka ;) Owszem jak ktoś przesadzi w takim procku jak ATtiny2313 który ma 128 bajtów RAM to nie trudno przewidzieć, że jakieś 3 dziwne twory typu: hwstack, softstack i jakiś tam framestack się przepełnią ;) .... przy ciut większych prockach próba połapania się w tych 3 sztucznych tworach i zapanowanie nad stosem w Bascomie to jest dopiero "challange" (wyzwanie) ;) .... Dla mnie próba okiełznania tego była ostatecznym gwoździem do sięgnięcia po coś innego ....

    Tymczasem w C jest o 1000 razy łatwiej zapanować na stosem ;)

    0
  • Pomocny post
    #8 20 Lut 2012 21:31
    atom1477
    Poziom 43  

    mirekk36 napisał:
    atom1477 napisał:

    W C sprawa wygląda tak samo ....


    Chodziło mi tylko o to że tam też jest stos :D

    mirekk36 napisał:
    No zabrzmiało to tak jakby Bascom potrafił przewidywać prawie jak wróżka ;)

    Chodziło mi o to że BASCOM po prostu pokazuje zużycie RAMu. A że nie zawsze jest ono zgodne z prawdą to co innego.

    0
  • #9 20 Lut 2012 21:42
    vixy
    Poziom 12  

    dziękuję za rady - pozdrawiam

    0