[microC, AVR] Jak zwiększyć wydajność pętli?
19:11Sat, 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<informacjeOWyswietlaczu.jasnosc; i++)
<br />można zapisać tak:
for (register uint8_t i=informacjeOWyswietlaczu.jasnosc; i>2; i--)
Dzięki temu, procesor nie będzie musiał się za każdym krokiem pętli dostawać do zmiennej w pamięci SRAM. Oczywicie można to stosować tylko w przypadku kiedy kolejność odliczania nie jest ważna, a liczy się jedynie ilość powtórzeń.
Podobne faq:
- [microC, AVR] Użycie sprintf wyrzuca błędy kompilacji - o co chodzi?
- [microC, AVR] Jak wykonać kod jeszcze przed wejściem w main()?
- [Ogólne] Mikrokontroler się zawiesza (lub resetuje), gdy na wyświetlaczu matrycowym LED pojawiła się więcej niż jedna litera - jaka jest przyczyna?
-
Język C: Czasochłonne błędy przez które
ludzieprogramiści skaczą z mostów – część 1 - [AVR Studio] Przy uruchamianiu AVR Studio dostaję błąd związany z plikiem mfc90.dll - co robić?
- Delphi - Tworzenie aplikacji dla systemu Android