Arduino i wszechstronne urządzenia oparte na mikrokontrolerze używają pamięci do przechowywania danych. Pamięć jest istotną częścią każdego systemu obliczeniowego, szczególnie jeśli chodzi o systemy i projektowanie wbudowane. Przydzielanie pamięci Arduino w sposób dynamiczny poprawia wydajność płyt Arduino. Pamięć może przechowywać wejścia i wyjścia pochodzące z czujników i innych urządzeń podłączonych do Arduino. Tutaj omówimy, ile kodu Arduino Uno może przechowywać w jego pamięci.
Arduino Uno Allocation
Mikrokontrolery stosowane w płytkach Arduino są specyficzne dla wbudowanych aplikacji systemowych. W przeciwieństwie do konwencjonalnego komputera zwykle używanego w naszych domach i biurach Mikrokontrolery mają dobrze zdefiniowane zadania dotyczące tego, co zaprojektowali. Mikrokontrolery nie mają wielowarstwowego buforowanego pamięci opartej na wirtualnej pamięci opartej na dysku używanych w procesorze domowym. Zwykle podczas programowania Arduino UNO pamięć nie jest uważana za większość czasu, dopóki kod nie zostanie utknięty z powodu problemów z niską pamięcią. Aby uzyskać rozwiązanie, musimy najpierw zrozumieć problem.
Tablice Arduino składają się głównie z trzech rodzajów pamięci.
SRAM to niestabilna pamięć, której dane zostaną utracone po zasilaniu Arduino, gdy Flash i EEPROM nie są wolne; Ich informacje utrzymują się, nawet jeśli usuniemy moc Arduino.
Oto krótkie porównanie różnych płyt Arduino Microcontrollers Przydział pamięci:
Arduino | Edytor | Błysk | Sram | EEPROM |
Uno, Uno Ethernet, Pro Mini, Nano 3.0 | ATMEGA328 | 32KB | 2KB | 1KB |
Leonardo, Micro | ATMEGA32U4 | 32KB | 2.5KB | 1KB |
Mega | ATMEGA256 | 256KB | 8KB | 4KB |
Ile kodu może pomieścić Arduino Uno
Ile kodu Arduino Uno może przechowywać? Odpowiedź na to pytanie brzmi: wszystko zależy od tego, w jaki sposób programujemy Arduino Uno. Arduino Uno ma trzy rodzaje pamięci, jak omówiono wcześniej, jeśli przekroczymy którykolwiek z tych kodów nie skompiluje. Arduino Uno ma 32KB z Pamięć flash co jest wystarczające do napisania tysięcy wierszy kodu.
Zwykle podczas pisania kodu Arduino Sram jest najcenniejszą pamięcią na płytkach Arduino. Arduino Uno ma tylko 2 kb SRAM, co równa się 2048 bajtów. To nie jest zbyt wiele, aby zaprogramować Arduino UNO dla rozległych interfejsów użytkownika i aplikacji graficznych. Arduino jest wystarczająco mocny, aby kontrolować silniki, czujniki i sterowniki, ale niewystarczające, aby poradzić.
Aby sprawdzić, ile miejsca wykorzystuje szkic Arduino, uruchom program i poszukaj użycia pamięci w wyjście okno.
Na przykład po skompilowaniu prostego LED miga Program, otrzymaliśmy dane wyjściowe, jak pokazano poniżej. Tutaj 2% Błysk Pamięć równa 924 bajtów z 32256 bajtów (32 kb) jest używana przez program mrugania napisany w Arduino IDE. Podczas gdy 9 bajtów SRAM z całkowitej 2048 bajtów (2KB) jest wykorzystywanych do tworzenia zmiennych używanych do szkicu LED LED mrugania.
Kiedy skompilujemy program Arduino, IDE poinformuje, jak duży jest problem. Korzystając z niektórych technik optymalizacji, możemy zwiększyć zdolność do przechowywania programu Arduino. Poniżej obraz pokazuje przykład SRAM i pamięci flash, która przekracza limity danych mikrokontrolera.
Jak zoptymalizować pamięć Arduino
Zauważ, że nie ma tam dużo pamięci Arduino Uno, takich jak SRAM, ma tylko 2 kb. Można go łatwo użyć za pomocą bezużytecznych strun w szkicu. Na przykład:
Char Message [] = "Linuxhint.com ";
Deklaracja taka może zjeść dużo SRAM. Tutaj „Linuxhint.com ” wkłada 14 bajtów do SRAM, każdy z tych char bierze 1 bajt, plus 1 dla terminatora „\ 0”.
Jak zoptymalizować kod Arduino w celu lepszego wykorzystania pamięci
Optymalizacja kodu Arduino jest niezbędna dla złożonych projektów, więc oto kilka sposobów optymalizacji szkicu Arduino.
Usuń martwy kod
Jeśli kod Arduino wywołuje wiele bibliotek, może istnieć szansa, że część kodu nie jest używana. Usuń wszystkie nieużywane biblioteki, funkcje i zmienne. Jeśli ktoś nie jest ich pewien, skomentuj to. Jeśli program nadal kompiluje się i działa dobrze, to część kodu nie jest używana przez Arduino.
Biblioteki zużywają dużo SRAM, na przykład korzystanie z biblioteki kart SD może zająć do 1 kB SRAM. Unikaj niepotrzebnego użycia biblioteki podczas pisania szkiców.
Przechowuj stały ciąg w pamięci Flash
Statyczne struny mogą być jedną z głównych przyczyn odpadów pamięci Arduino. Na przykład:
Seryjny.println („Linuxhint.com ”);
Takie statyczne struny są automatycznie kopiowane w SRAM z pamięci flash. Aby tego uniknąć, użyj F () makro funkcjonować. To uniemożliwi SRAM wywołanie go bezpośrednio i zapisuje pamięć. Funkcję f () można zastosować w następujący sposób:
Seryjny.println (f („Linuxhint.com "));
Za pomocą makro f () w powyższym ciągu zapisaliśmy 14 bajtów SRAM.
Prawidłowy typ danych
Używając dużych tablic i tabel wyszukiwania, użyj typu danych zgodnie z potrzebą. Użyj najmniejszego typu danych, który może łatwo dopasować dane. Na przykład, int weźmie dwa bajty bajt zajmie tylko jeden. Podobnie unikaj używania pływaka, gdy masz liczbę całkowitą, spróbuj używać int int. To pozwoli zaoszczędzić dodatkowe bajty w szkicu Arduino, co da ogólnie dodatkowe miejsce do pisania szkiców. Różne typy typów danych i pamięć, które zajmują w Arduino, pokazano w poniższej tabeli:
Typ danych | Rozmiar (bajty) | Zakres wartości |
Próżnia | 0 | zero |
Bool/boolean | 1 | Prawda fałsz |
Zwęglać | 1 | -128 do +127 |
niepodpisany char | 1 | 0 do 255 |
Bajt | 1 | 0 do 255 |
Int | 2 | -32 768 do 32 767 |
niepodpisany int | 2 | 0 do 65 535 |
Słowo | 2 | 0 do 65 535 |
Długi | 4 | -2 147 483 648 do 2 147 483 647 |
bez podpisu długie | 4 | 0 do 4 294 967 295 |
Platforma | 4 | -3.4028235e+38 do 3.4028235e+38 |
Podwójnie | 4 | 3.4028235e+38 do 3.4028235e+38 |
Strunowy | - | Tablica postaci |
Wniosek
W tym przewodniku omówiliśmy, ile kodu może utrzymać Arduino Uno, dalej omawialiśmy różne parametry, które prowadzą do problemów z niską pamięcią. Dynamiczna alokacja pamięci za pomocą funkcji Arduino może być bardzo pomocna w budowaniu projektów. Za pomocą wspomnianych technik można zoptymalizować użycie pamięci Arduino.