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.

Sprawdzenie kodu do Arduino (optymalność).

Lemno 07 Gru 2017 20:20 423 2
  • #1 07 Gru 2017 20:20
    Lemno
    Poziom 3  

    Witam.

    Napisałem kod na Arduino który za wiele pożytecznego nie robi, choć nie w tym rzecz, kod napisałem aby nauczyć się używania "wielozadaniowości" Atmegi. Kod działa tak : Przycisk może przyjąć zmienną od 0 do 3, 0 odpowiada w kodzie niczemu, 1 - pierwszej sekwencji ledów (trzech), 2 - drugiej, 3 - trzeciej (PWM) Do użycia funkcji millis() skłoniło mnie to, że przy delay() nie mogłem w dowolnym momencie zmienić sekwencji. Moje pytanie brzmi : czy poniższy kod jest chociaż w minimalnym stopniu optymalny? Co można w nim poprawić - wyrzucić/dodać?

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 2
  • #2 07 Gru 2017 22:40
    JacekCz
    Poziom 36  

    Dajesz drugi wątek praktycznie taki sam, TO JEST ŹLE WIDZIANE.

    stawiasz pytania "rozwojowe", tzn lepiej niż pewnego rodzaju średnia programistów arduino, i jako do takiego Kolegi piszę, i piszę co jest "moim zdaniem".

    Optymalne ... w jakim sensie? jakości kodu, stylu, czytelności? szybkości ... chyba nie ma znaczenia??? Optymalne jako synonim "bezbłędne" ... to źle słowa używasz.


    co zmienić ... wg moich potrzeb niemal wszystko, 'stan' powinien być enumem, magiczne zmienne ('i' oraz siostry), które jutro sam Ty nie będziesz wiedział, co oznaczają, Zupełnie się tego nie czyta, a kod który się źle czyta jest prawdopodobnie błędny.

    Dobra deklaracja zmiennej (nazwa i typ), o jak najmniejszym zakresie (np static) to już jak kawałek dobrego projektu programu. Zmienne są dla ciebie, nie dla brzydkiego kompilatora.

    Konstrukcja led = !led; sugeruje sens logiczny, zmienne logiczne to 'bool', które są false albo true, a nie 'int' (u Ciebie 'ledXxx'). Ale jednak dokonujesz na nich działań arytmetycznych. Mi to się źle czyta, choćby jakoś działało - generalnie: jak źle się czyta, to ...

    w C++ są stałe 'const' by eliminować przestarzałe #define (a te zwyczajowo WIELKIMI LITERAMI).

    Co do algorytmu, 'delay()' niby nie chcesz, ale chcesz. Nie mam przekonania, czy przy "przeskoku" stanu zerować czy nie zerować liczniki robocze.
    Wyrażenia z 'milis()' ja bym pisał czas_bieżący - poprzedni, ale to kwestia subiektywna.

    W społeczności Arduino znajdziesz WIELE złych zwyczajów, bardzo dużo rzeczy rozwiązanych jak się NIE POWINNO robić. Chcesz się rozwijać, szukaj DOBREJ książki do C++, na "zwykłym pececie". Jeśli cehsz się rozwijać, to na arduino wiele złych rzeczy się nauczysz.
    Zwykle materiały łączące 2w1 czyli C(C++) i mikrokontrolery niczego nie uczą dobrze

    0
  • #3 08 Gru 2017 15:19
    Lemno
    Poziom 3  

    Dziękuje.
    Temat uważam za wyczerpany.

    0