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.

wielkość kodu w C vs Bascom

Paros 16 Mar 2013 18:47 1653 7
  • #1 16 Mar 2013 18:47
    Paros
    Poziom 11  

    Dzień dobry.

    Uczę się C na AVR. Często zwolennicy przesiadania się z Bascom na C twierdzą, że w tym drugim przypadku można generować krótsze kody.

    Bascom - Atmega 32. Testowy program pobiera z układu PCF8583 godzinę, minutę i sekundę i wyświetla to na wyświetlaczu LCD. Po skompilowaniu wsad do programatora ma około 900 bajtów.

    Atmel Studio 6. Optymalizacja Os. Trzy lub cztery przykłady zciągnięte z internetu i przygotowane tak, żeby spełniały dokładnie te same zadania. Najkrótszy kod, jaki udało mi się wygenerować to ok. 2,5 kB.

    Celowo nie podaję teraz kodów - chodzi mi o odpowiedź na moje wątpliwości czy C "tak już ma", czy to po prostu brak moich umiejętności.

    Inaczej - czy ktoś z Was potrafi napisać w AS6 (a może AS4) programik spełniający powyższe zadania o kodzie wynikowym krótszym niż 900 bajtów? Nie chcę konkretnego rozwiązania, tylko odpowiedzi tak -wtedy będę szukał dalej. A może jednak C nie generuje krótszych kodów?

    0 7
  • #2 16 Mar 2013 19:10
    Steryd3
    Poziom 31  

    Też słyszałem, że Bascom daje większe pliki wynikowe-nie próbowałem tego nigdy porównywać. Zawsze to przecież kwestia jak kto napisze program-można to zrobić bardziej optymalnie lub zupełnie nie optymalnie. Kompilator w C może oczywiście przeprowadzić optymalizację pod kątem wskazanym przez nas ale nic nie nadgoni źle napisanego programu. Bascom (z tego co wiem bo go nie używam) daje możliwość szybkiego stworzenia programu(mnóstwo gotowych rozwiązań dla różnych układów peryferyjnych). Z Bascomem jest tylko jeden problem- z tego co wiem jest on póki co na AVRy i 8051 natomiast C jest używane do oprogramowywania wszystkich mikrokontrolerów - o jego czystej i pochodnych formach już nie wspominam( na mikrokontrolery i PCty).

    0
  • #3 16 Mar 2013 19:13
    tadzik85
    Poziom 38  

    PS. porównywanie w dodatku tak trywialnego przykładu może dać nie najlepsze rozeznanie w tej kwestii.

    0
  • #4 16 Mar 2013 19:14
    dondu
    Moderator Mikrokontrolery Projektowanie

    Paros napisał:
    Celowo nie podaję teraz kodów - chodzi mi o odpowiedź na moje wątpliwości czy C "tak już ma", czy to po prostu brak moich umiejętności.

    Każesz na wróżyć - pokaż kod C.
    Za pewne nie masz włączonej odpowiedniej optymalizacji kodu wynikowego przez kompilator lub dołączasz biblioteki, które są zbędne. Ponieważ piszesz że masz -Os to zapewne ten drugi przypadek.

    Pozostaje mi więc odpowiedzieć tak:
    Gdyby BASCOM generował szybszy i krótszy kod niż C, to w nim pisano by systemy operacyjne, a nie w C :)

    0
  • #5 16 Mar 2013 19:19
    tmf
    Moderator Mikrokontrolery Projektowanie

    Przede wszystkim problemem jest sam przykład. Zapewne biblioteka obsługi tego układu napisana jest w asemblerze, a nie Bascomie, stąd też jej kod jest niewielki. Po drugie nie wiadomo jak napisane są biblioteki. Obsługę LCD można napisać byle jak, jakoś będzie działać, ale za to będzie krótka. Można też napisać w sposób uniwersalny z dodatkowymi możliwościami, co zajmie miejsce. Podobnie przy I2C. Najkrótsza i beznadziejna implementacja to parę linii kodu. Tyle, że jak coś pójdzie nie tak to zero obsługi błędów. Także takie porównania są bez sensu. Jest jeszcze druga strona - nawet jeśli w c to byłoby 2,5kB, to co z tego?

    0
  • #6 16 Mar 2013 19:49
    piotrva
    Moderator na urlopie...

    A ja problem widzę też w tym co tak na prawdę porównujesz - bo porównywanie plików wsadowych to nie tędy droga. Czy przypadkiem dodatkowo nie porównujesz pliku bin z bascoma z plikiem hex z kompilacji pod C?
    U mnie, na innych przykładach, tego akurat nie pamiętam, ale przy optymalnej obsłudze danego problemu w C i B. rozmiar kodu zawsze przemawiał na korzyść C (wtedy gdy to porównywałem).

    0
  • #7 17 Mar 2013 18:03
    30402
    Użytkownik usunął konto  
  • #8 21 Mar 2013 09:02
    Paros
    Poziom 11  

    Dziękuję wszystkim za odpowiedzi. Zbudował mnie fakt, że pierwsze odpowiedzi były już w dniu zamieszczenia pytania...

    @tmf "...nawet jeśli w c to byłoby 2,5kB, to co z tego?..".

    Otóż właśnie - w ten mniej więcej sposób odpowiadałem tym, którzy przekonywali mnie do C. Mówiłem: jeśli kod w Bascomie wzrośnie powyżej 8k, to zamiast wydać 4 zł na Atmega8, wydam 7 zł na "16", ale intuicyjnie przeczuwałem, że to naiwne podejście... Pewnie jeszcze trochę potrwa, zanim załapię istotę tego problemu. Na razie przedzieram się przez meandry C - dla początkującego nie jest to łatwe. Jestem w trakcie czytania książki autorstwa "tmf" pisanej niewiele ponad rok temu, a już niektórych przykładów z tej książki nie da się skompilować w ostatnim Atmel Studio bo na przykład "prog_char" nie jest obsługiwane, w "delay" nie może być zmiennych i kto wie, co mnie jeszcze czeka...

    pozdrawiam wszystkich

    0