logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Koszty pamięci poszczególnych rozkazów BASCOM

nobisz 13 Paź 2008 08:21 1665 11
  • #1 5626386
    nobisz
    Poziom 14  
    piszę program pod atmega 8 w bascom i stosunkowo szybko zapełnia mi sie pamięć, czy istnieją gdzieś informacje ile pamięci kosztują poszczególne rozkazy bascom? Ewentualnie możecie podać jakie komendy sa bardzo pamięciożerne i należy się ich wystrzegać?
  • #4 5626523
    nobisz
    Poziom 14  
    ad. freddie: sugerujesz, żeby nie korzystać z bascom?
    ad balu: wielkie dzięki!!! zmianiłem jednego single na byte i... 5%!!!! do przodu. Skąd to sie bierze? single to zgodnie z instrukcją 4 bajty, dodałem za todla tesu 4 zmienne typu byte i nie podskoczyło nawet o jeden %?
    Macie jeszcze jakies propozycje?
  • #6 5627887
    ZbeeGin
    Poziom 39  
    nobisz napisał:
    piszę program pod atmega 8 w bascom i stosunkowo szybko zapełnia mi sie pamięć,

    Ważne jeszcze jak piszesz. Ludzie czasami takie dziwactwa piszą, że chwytam się za głowę.
  • #7 5630823
    Xitami
    Poziom 29  
    Podobno ludzi lubi się za ich zalety, a kocha za wady.
    Myślę, że Bascom ma wielu miłośników, wśród których znajdzie się kilku takich co go lubią.
    Jest to coś stworzone dla elektroników przez elektronika.
    Rewelancja gdy nie chcesz podskoczyć za wysoko, ale kula u nogi pozostałych przypadkach.
    Warto pamiętać, że Atmel tworzył AVR'ki we współpracy z IAR'em, jak by nie było istotnym twórcą kompilatorów C.
    Kod dramatycznie rośnie gdy choć jedna instrukcja (tu zmienny przecinek) wymaga dołączenia pewnie źle skonstruowanej biblioteki. Może okazać się, że później (wraz ze wzrostem liczby takich instrukcji) kod nie przyrasta już tak dramatycznie i idę o zakład, że w pewnym momencie kod bascomowy może być nawet mniejszy niż C'owy. Tylko, że może być problem z kostką która udźwignęłaby taką ilość kodu.
    Kiedyś.... drzewiej byłem zachwycony Basic'iem na ZX Spectrum, ale dość sybko okazało się, że do spraw choć trochę bardziej skomplikowanych jest nie przydatny.
    Pojawiły się co prawda później bardziej nowoczesne dialekty, ale po przejściu na coś bardziej nowoczesnego (wtedy Pascal) nie chciało się tym nawet zawracać głowy.
    Pierwsze kroki przejścia z BAS na C wcale nie będą bolały (poza instalacją środowiska). Na początek pisać można w zasadzie tak samo. A po kilku programach odetchniesz i powiesz PIER...IĆ Basic :)
  • #8 5632025
    marek_Łódź
    Poziom 36  
    Xitami napisał:
    Warto pamiętać, że Atmel tworzył AVR'ki we współpracy z IAR'em, jak by nie było istotnym twórcą kompilatorów C.
    To jest o tyle nieistotne, że takie języki jak C, PASCAL, czy BASIC implementują się podobnie, żeby nie powiedzieć identycznie. Problemem jest jakość generatora kodu, jakość bibliotek (runtime) oraz sposób ich linkowania. Przykładem może być LAZARUS, który jest powiedzmy klonem DELPHI, a na dzień dobry generuje 6MB kodu łączonych bibliotek.
  • #10 5632557
    ZbeeGin
    Poziom 39  
    Stricte wskaźników nie ma. Ale funkcja to tymczasowa zmienna, którą przekazany zostanie wynik jej działania. Jej adres znajduje się na stosie wskazywanym przez rejestr Y z przesunięciem zależnym od ilości parametrów (jest odkładany najwcześniej, potem kolejne paramtery) a jej zawartość znajduje się w obszarze Frame Space. Tak więc wewnętrznie jest pewna namiastka zmiennych wskazywanych tworzonych dynamicznie.

    Jeśli chodzi o adresy zmiennych to można je też wyłuskać poprzez LOADADDR, a nawet wskazać (podać adres) gdzie BASCOM ma taką zmienną utworzyć.
    W BASCOM 8051 zmienną można zdefiniować, a potem jeśli była to ostatnia zmienna deklarowana - wykasować z pamięci.
  • #11 5632562
    Freddie Chopin
    Specjalista - Mikrokontrolery
    tia [; no wiec jednak implementacja NIE JEST taka sama... a ze mozna sobie na okretke, niewygodnie, dziwacznie albo wstawkami ASM zrobic to samo co w innym jezyku jest naturalne, to nie znaczy ze jezyki te sa rownowazne.

    4\/3!!
  • #12 5632963
    marek_Łódź
    Poziom 36  
    Freddie Chopin napisał:
    tia [; no wiec jednak implementacja NIE JEST taka sama... a ze mozna sobie na okretke, niewygodnie, dziwacznie albo wstawkami ASM zrobic to samo co w innym jezyku jest naturalne, to nie znaczy ze jezyki te sa rownowazne.

    4\/3!!
    Piszesz o szczegółach, a ja miałem na myśli zasady implementacji, czy inaczej mówiąc działanie konstrukcji języka. Brak takiej, czy innej konstrukcji niemal nie ma wpływu na implementację pozostałej części. Fakt, że brak w jakimś języku jakiejś konstrukcji nie wpływa specjalnie na implementację reszty. Obsługa procedury, czy klasy wymaga dodatkowo dołączenia obsługi bloków i łańcucha powrotów na stosie (albo stosach), podobnie jak zarządzanie pamięcią dynamiczną wymaga dodatkowych procedur (o odśmiecaniu w JAVA, czy obsłudze wątków albo wielozadaniowości w konstrukcjach czasu rzeczywistego nie wspomnę). Nie zmienia to faktu, że we wspólnym obszarze BASIC, PASCAL, C, FORTRAN, ALGOL i parę innych można zaimplementować niemal dokładnie tak samo. Inaczej mówiąc jeśli program daje się prosto i bez bólu przetranslować z języka A na B, to kod wynikowy z dobrze zrealizowanego kompilatora powinien być teoretycznie niemal taki sam dla tego samego procesora docelowego (łącznie z większością elementów optymalizacji).
    Piszę to z autopsji, bo napisałem w życiu kilka prostych kompilatorów, (a użytkowałem ze setkę) i przy tych technikach, które stosuję nie ma dla mnie specjalnej różnicy między tymi trzema językami w obszarze o którym piszę, a jeśli jest, to na "korzyść" BASICa, który powinien generować trochę krótszy kod. Tak więc "obciążenie" BASCOMa nie jest uzasadnione niczym poza (bardzo) kiepską jakością implementacji. W szczególności zmienny przecinek implementuje się (znowu w obszarze podstawowym) IDENTYCZNIE (wszędzie z wyjątkiem BASCOMa ;) )

    ps. wskaźniki jako mechanizmy niskiego poziomu jak najbardziej można rozważać w kategoriach asemblera (wstawek lub funkcji niskiego poziomu takich jak Loadaddr, peek, poke).
REKLAMA