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

Optymalizacja kodu w Arduino uno czytanie stanu portu

RomMil1 07 Cze 2022 15:26 447 5
REKLAMA
  • #1 20051377
    RomMil1
    Poziom 6  
    Posty: 3
    Mam taki oto kod korzystający z biblioteki MIDI.
    Zrobiłem licznik powtórzeń pętli który mryga diodą po zliczeniu przykładowo 10000 powtórzeń pętli.
    Kiedy w pętli loop wywołuje tylko MIDI.read();
    dioda miga mi szybko ( z 5 razy na sekundę około, a może i więcej, bo trudno to policzyć). I jest OK.
    Kiedy dodałem sprawdzenie czy nie zmienił się stan trzech pinów 7,2 i 6
    dioda zaczęła mrugać raz na 3 sek.
    Za bardzo nawet nie zmienił się czas gdy przepisałem na odwołania bezpośrednio do portów. Czy aż tyle czasu zajmuje procesorowi sprawdzenie i porównanie stanu pinu? Czy coś robię źle?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #2 20051451
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 20051507
    RomMil1
    Poziom 6  
    Posty: 3
    Jeśli nie ma zmian na pinach funkcje nie są wywoływane

    Dodano po 2 [godziny] 2 [minuty]:

    A jednak MyHandleNoteOn / Off się wykonywały! dzięki Jarzabek666
    wróciłem do kodu w Arduino IDE i teraz prędkość wykonywania pętli jest zadowalająca - sto tyś na około półtorej sekundy. A wygląda to tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    A może coś da się jeszcze zoptymalizować?
  • REKLAMA
  • Pomocny post
    #4 20051785
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 20051866
    gps79
    Poziom 37  
    Posty: 2181
    Pomógł: 494
    Ocena: 785
    RomMil1 napisał:
    A może coś da się jeszcze zoptymalizować?

    Można:
    - zmienić mikrokontroler na szybszy
    - zmienić częstotliwość taktowania mikrokontrolera (kwarc / klaibracja)
    - użyć przerwań do odczytu pinów (II_to_P, ...)
    - zoptymalizować funkcję MIDI.read();
    - liczyć w pętli do tyłu (licznik_petli--; if (licznik_petli == 0){ ... licznik_petli = 100000; })
    - przepisać do Asemblera
  • #6 20052066
    RomMil1
    Poziom 6  
    Posty: 3
    Moim zdaniem lepiej odczytywać stan do zmiennej i operować na zmiennej
    Tak, to fakt. Właśnie zrobiłem odczyt do zmiennej. Bo czasem różne dziwy się działy. I zmieniłem wywoływane funkcje na krótsze.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA