Jak rozszerzyć pamięć programu na arduino?

Czasami brakuje mi miejsca na program w języku C, który chcę umieścić w arduino. Więc jakiego chipa potrzebuję, aby rozszerzyć pamięć programu arduino, aby móc używać większych programów w języku C z moim arduino?

Komentarze

  • Biorąc pod uwagę że kolega o imieniu Petri H ä kkinen umieścił gra w stylu arcade na Atmega328P, może powinieneś spojrzeć na oszczędność miejsca w kodzie? Jeśli to nie ' nie jest praktyczne, jak mówią niektóre odpowiedzi, możesz uzyskać większy układ z większą pamięcią programu. Na przykład Atmega644 jest dostarczany między innymi w pakiecie z chipem DIP.
  • Zobacz także forum.arduino.cc/index.php?topic= 226465.0
  • czy możesz bardziej szczegółowo wyjaśnić swoją odpowiedź? 2) Arduino ma SPI, więc można uzyskać dostęp do karty SD. Każdy kod na karcie SD musiałby zostać załadowany do pamięci wykonywalnej. Jest to skomplikowane i nie dla początkujących … Masz na myśli, że możesz zmienić lub przeprogramować pamięć instrukcji de podczas pracy programu? Czy uruchomiony program może wywołać bootloader i załadować nowe instrukcje na inne adresy? Czy ´ w tym wieku pamięć programu? Innym rozwiązaniem może być zidentyfikowanie rutyny w programie i wszystkich ” wywołań ´ s ” przechowywane z danymi w pamięci zewnętrznej SPI … Dzięki!

Odpowiedź

ATmega2560 to chip do dodania, aby uzyskać więcej pamięci, gdy zabraknie pamięci programu na Uno. Odnosząc się do strony Memory pod adresem arduino.cc, „zobaczysz, że ma Flash = 256KB, SRAM = 8KB, EEPROM = 4KB, gdzie układ ATmega328 jest włączony Uno ma Flash = 32KB, SRAM = 2KB, EEPROM = 1KB.

Kiedy zabraknie pamięci programu na Uno, masz około trzech praktycznych wyborów: zmniejszyć rozmiar programu; usunąć bootloader (aby zwolnić jeden lub dwa KB); użyj innej płyty z wydajniejszym procesorem.Procesor na płycie Uno nie ma możliwości dostępu do bajtów programu z miejsc innych niż wbudowana pamięć flash 32KB. Procesor na płycie Mega2560 zaczyna się 8 razy większą ilością pamięci flash, więc może pomieścić większe programy niż Uno.

Jeśli usuniesz bootloader, możesz zamiast tego programować za pomocą płyty USBASP, jak opisano w artykule „Programowanie układu AVR za pomocą USBASP z 10-pinowym kablem” na stronie learningaboutelectronics.com.

Komentarze

  • ale jeśli zwolnisz bootloader, to jak mógłbym używać arduino IDE do programowania?
  • @ qwerty10, zobacz ostatni akapit edycji. Arduino IDE obsługuje USBASP ok.
  • Czy nie działałoby to z żadnym programistą, który może przesłać kod do ATMEGA? Zamiast tylko USBASP. Jak rozumiem, w rzeczywistości nie używa 10 pinów, ale podzestaw tych pinów.
  • @ qwerty10, USPASP jest programistą ISP (w programowaniu systemowym). Generalnie każdy programista ISP może być użyty do zaprogramowania układu (z bootloaderem lub bez niego), o ile w układzie docelowym dostępne są piny MOSI, MISO, SCK, RST, VCC i GND.
  • Obecne Unos używają bardzo kompaktowego programu ładującego optiboot. Usunięcie go zwolni tylko 512 bajtów.

Odpowiedź

Innym sposobem (innym niż MCU z większą pamięcią) jest nie korzysta z frameworka Arduino i jego bibliotek. Taki poziom abstrakcji jest kosztowny z dwóch powodów – zużycia pamięci i szybkości. Ale to jest dużo trudniejsze. Jeśli potrzebujesz jakiejś biblioteki, musisz ją przenieść (jeśli nie znalazłeś natywnej) lub przynajmniej zapewnić wymagane funkcje z Arduino.

Na przykład w Arduino IDE 1.6.11 pusty szkic zużywa 444 bajty pamięci flash. Użycie jednego pinMode i digitalWrite(13, ! digitalRead(13)); + delay(500); oznacza 964 bajty. Oczywiście są to najprawdopodobniej jednorazowe. Jeśli użyjesz sześciu więcej pinów i przełączysz go, zużywa znacznie mniej pamięci programu niż użycie pierwszego (1192B). Ale nadal rośnie bardzo szybko.

W czystym C pusty program ma długość około 134 bajtów. Ta sama funkcjonalność (przełączanie jednego pinu co 500 ms) zajmuje 158 bajtów (i jest o wiele szybsza).

Ale w przypadku projektów hobbystycznych wybrałbym zamiast tego ATMega2560 lub ATMega644 / 1284.

Możesz także skorzystać z bezpośredniego dostępu do sprzętu. Przełącz szkic pinów z bezpośrednim użyciem rejestrów, a _delay_ms z bibliotek avr używa 468 bajtów zamiast 964B. Z opóźnieniem z podstawowych bibliotek Arduino jest to 602B.

Komentarze

  • Masz na myśli _delay_ms().
  • Ma to dodatkową zaletę faktycznego poznania MCU, z którym ' ponownie używam. AVR w tych Arduino są znacznie bardziej wydajne niż ” biblioteka standardowa „.++

Odpowiedź

A co z malinowym pi zero ? Mam kilka i używam ich dość często jako arduinos.

Komentarze

  • Należy wziąć pod uwagę inne architektury, ale wbudowany system linux z obowiązkowym ładowaniem z karty SD jak pi powoduje dużą złożoność i jest kruchy w wyjątkowy sposób, nawet jeśli nie jest droższy. Istnieje wiele płyt opartych na mniejszych, bardziej zintegrowanych mikrokontrolerach ARM, które są znacznie bardziej podobne do Arduino pod względem aplikacji, a jednocześnie są znacznie bardziej wydajne. Ale jeśli potrzebujesz dużo przetwarzania lub megabajtów pamięci, to tak, te zawiłości zaczynają być opłacalne.
  • Wolę też zero, ponieważ jest tak elastyczny. Możesz dodać więcej pamięci lub osadzić ją w projektach, mając jednocześnie wystarczająco duży procesor, aby zrobić prawie wszystko.

Odpowiedź

Możesz również przyjrzeć się innym platformom. Na przykład Teensy 3.2 jest kompatybilny z Arduino i ma 2 KB eeprom i 64 KB pamięci RAM.

Odpowiedź

Wen pyta szeroko pytanie, warto podać kilka szczegółów. Na przykład, ile pamięci i dlaczego myślisz, że jej potrzebujesz.

Kiedyś określiłem procesor na 2 KB przestrzeni programowej, 64 bajty RAM i 1 KIPS. Inżynier zapytał, MIPS, wyjaśniłem tysiące na sekundę. Odpowiedział, że nie przychodzą tak wolno. Pod koniec projektu dodano ogromny interfejs użytkownika i pamięć się zmniejszyła … ale nadal pasowała bez problemu.

Więc rozważ rozważenie o używanych zasobach.

Aby odpowiedzieć na pytanie:

1) Arduino nie zapewnia wygodnej magistrali do pobierania pamięci. Nie ma więc możliwości podłączenia aby uzyskać więcej pamięci.

2) Arduino ma SPI, więc można uzyskać dostęp do karty SD. Każdy kod z karty SD musiałby zostać załadowany do pamięci wykonywalnej. Jest to skomplikowane i nie dla początkujących …

3) Zgodnie z sugestią, popraw kod. To prawdopodobnie dobry sposób na naukę.

3) Przejdź na większe Arduino.

Istnieją różne procesory Arduino.Niektóre w linii ACR, inne w linii ARM.Przejście do innego urządzenia z tej samej rodziny jest stosunkowo niewielką zmianą i może zapewnić do 368 bajtów progamu FLASH. Ale to nie są płyty Arduino dokładnie.

Urządzenia oparte na Arduino ARM są bardzo różne i używaj różnych bibliotek.

Sprawdź Arduino Mega 2560, jest bardzo podobny do Uno, ma podobny ślad, kod powinien być stosunkowo łatwy do przenoszenia i jest niedrogi.

Istnieją większe urządzenia z rodziny AVR.

Uwaga, AVR32 to inny procesor, a urządzenia peryferyjne są na tyle różne, że jest to inne urządzenie.

Jeśli chcesz dostać się do bardzo dużych programów ( gigabajty pamięci) sprawdź Beagleboard. Ma pełny system Linux, z pamięcią wirtualną (patrz punkt 2 powyżej) i ma mocniejsze mechanizmy I / O.

Komentarze

  • Być może naprawi kilka literówki, takie jak Wen, 3 i differnt
  • To znaczy, jeśli naprawisz te literówki, ktoś może zagłosować za twoją odpowiedzią …

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *