Wpis z mikrobloga

Nie jestem ostrym przeciwnikiem Arduino, sam korzystam zarówno z wygody jaką daję kiedy chcę coś na szybko skleić jak i robię od początku PCB i koduję w C ale... natknąłem się już kilka razy na coś chorego w wszelkich tutorialach, przykładach.

Chodzi mi o taki zapis w kodzie:

int led = 8;

digitalWrite(lampka,HIGH);

Czy ktoś z znających temat #elektronika #avr nie przyzna mi racji, że to jest totalnie głupie marnowanie zasobów?

Sory ale #arduino może uczy ale nie wychowuje ( ͡° ʖ̯ ͡°)
  • 23
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@paw39: Przychylam się do pytania "dlaczego jest to marnowanie" ? Czym użycie pamięci, nawet na bzdurę, różni się od nie użycia jej wcale ?
  • Odpowiedz
@kielus: zmienna typu int przechowuje liczby z przedziału -32,768 to 32,767 . Pinów w Arduino masz kilkanaście więc po co rezerwować tyle miejsca skoro nie używasz? Stosując # define mówisz kompilatorowi, żeby wstawił 8 zamiast LED. Przechowywanie numeru pinu w zmiennej - dla mnie bez sensu. Chyba, że ktoś wyjaśni do czego ma się do przydać.
  • Odpowiedz
@kielus: Być może tak jest w Arduino z racji C++, muszę to sprawdzić. Co do const się zgadzam że lepsze niż int. Więc Arduino traktuje static const jako define skoro nie "zużywa" pamięci ?
  • Odpowiedz
@paw39: Literały #define rozwijane są na poziomie preprocesora, przed kompilacją. Na zmienne static const, z racji ich ograniczeń nie jest rezerwowana pamięć. Literały są podmieniane na etapie kompilacji.
  • Odpowiedz
Może podsumuje to tak:

Jeżeli potrzebuje na sztywno mieć jakąś stałą której nigdy nie będę zmieniał to bym użył const(C++) albo define(C).

Jednak jeśli ktoś porzebuje mimo wszystko manipulować zmienną no to int led = 8 niech będzie.
  • Odpowiedz
@paw39: static const, samo const nie załatwia sprawy.

Ja mniej więcej wiem, do czego dążysz, ale mimo wszystko uważaj z preprocesorem. Nadużywany potrafi się odbić taką czkawką, że głowa mała.
  • Odpowiedz