artykuły

[microC, AVR] Jak zwiększyć wydajność pętli?

19:11
Sat, 20 September 2014

Mam dwie dobre, oryginalne rady. Po pierwsze, można spróbować przenieść zmienne z których korzysta pętla bezpośrednio do rejestrów procesora (bardzo szybkiej pamięci). Aby to zrobić należy zadeklarować taką zmienną z modyfikatorem "register": register uint8_t i;

Wtedy kompilator spróbuje umieścić taką zmienną bezpośrednio w szybkim rejestrze. W ATMegach takich rejestrów ogólnego przeznaczenia jest 32. Są one połączone bezpośrednio z jednostką arytmetyczno-logiczną (ALU) w wyniku czego ALU ma jednoczesny dostęp do dwóch takich rejestrów podczas jednego cyklu zegarowego (chodzi o dwa operandy na których operuje ALU). No dobrze więc - pierwszą poradę mamy za sobą - należy więc przenieść zmienne do rejestru. A jaka jest druga porada?

Zamiast zapisywać tak:for (register uint8_t i=2; i&lt;informacjeOWyswietlaczu.jasnosc; i++)<br />można zapisać tak:

for (register uint8_t i=informacjeOWyswietlaczu.jasnosc; i&gt;2; i--)

Dzięki temu, procesor nie będzie musiał się za każdym krokiem pętli dostawać do zmiennej w pamięci SRAM. Oczywiœcie można to stosować tylko w przypadku kiedy kolejnoœść odliczania nie jest ważna, a liczy się jedynie ilość powtórzeń.

Podobne faq:

Skomentuj

Aby zamieścić komentarz, proszę włączyć JavaScript - niestety roboty spamujące dają mi niezmiernie popalić.






Komentarze czytelników

    Nie ma jeszcze żadnych komentarzy.
    Dexter