Jak rozšířit programovou paměť na Arduino?

Někdy mi dojde místo ve velikosti programu pro vložený program C, který chci nasadit na arduino. Jaký čip tedy potřebuji k rozšíření programové paměti arduina, abych mohl se svým arduino používat větší programy C?

Komentáře

  • Zvažování že kolega jménem Petri H ä kkinen dal arkádová hra na Atmega328P, možná byste se měli podívat na úsporu místa v kódu? Pokud to není ‚ praktické, jak říkají některé odpovědi, můžete získat větší čip s více programové paměti. Například Atmega644 je mimo jiné v balíčku s čipem DIP.
  • Viz také forum.arduino.cc/index.php?topic= 226465.0
  • můžete prosím trochu vysvětlit svou odpověď? 2) Arduino má SPI, takže lze přistupovat k SD kartě. Jakýkoli kód na SD kartě by musel být načten do spustitelné paměti. To je komplikované a ne pro začátečníky … Myslíte tím, že můžete měnit nebo přeprogramovat paměť instrukcí, když je program spuštěný? Může spuštěný program zavolat bootloader a načíst nové pokyny na jiné adresy? Nezískali jste ´ v tomto věku paměť programu? Jiným řešením může být identifikace rutin ve vašem programu a všechny “ volání ´ s “ uloženo s daty do externí paměti spi … díky!

odpověď

ATmega2560 je čip, který přidáte pro více paměti, když vám dojde paměť programu na Uno. S odkazem na paměť webovou stránku na adrese arduino.cc uvidíte, že má Flash = 256 kB, SRAM = 8 kB, EEPROM = 4KB, kde je čip ATmega328 Uno má Flash = 32 kB, SRAM = 2 kB, EEPROM = 1 kB.

Když vám na Uno dojde paměť programu, máte asi tři možnosti, které jsou praktické: zmenšit program; odebrat bootloader (pro uvolnění jednoho nebo dvou KB); použijte jinou desku s výkonnějším procesorem. CPU na desce Uno nemá způsob, jak přistupovat k programovým bajtům z jiných míst než 32KB flash na čipu. CPU na desce Mega2560 začíná s 8krát větším množstvím blesku, takže pojme větší programy než Uno.

Pokud odeberete bootloader, můžete místo toho programovat pomocí desky USBASP, jak je popsáno v článku „Programování čipu AVR pomocí USBASP s 10kolíkovým kabelem“ na adrese learningaboutelectronics.com.

Komentáře

  • ale pokud uvolníte bootloader, jak bych tedy k programování použil IDE arduino?
  • @ qwerty10, viz poslední odstavec úpravy. Arduino IDE podporuje USBASP v pořádku.
  • Nepracoval by s nějakým programátorem, který může nahrávat kód do ATMEGA? Místo pouze USBASP. Jak jsem pochopil, ve skutečnosti nepoužívá 10 pinů, ale podmnožinu těchto pinů.
  • @ qwerty10, USPASP je programátor ISP (v systémovém programování). Obecně lze k programování čipu použít jakýkoli programátor ISP (s bootloaderem nebo bez něj), pokud jsou na cílovém čipu k dispozici piny MOSI, MISO, SCK, RST, VCC a GND.
  • Aktuální Unos používá velmi kompaktní bootloader optiboot. Odebráním uvolníte pouze 512 bajtů.

Odpověď

Jiný způsob (jiný než MCU s větší pamětí) je nepoužívá Arduino framework a jeho knihovny. Taková úroveň abstrakce je nákladná v obou ohledech – využití paměti a rychlost. Ale to je mnohem těžší cesta. Pokud potřebujete nějakou knihovnu, musíte ji přenést (pokud jste nenašli nativní) nebo alespoň poskytnout požadované funkce z Arduina.

Například v Arduino IDE 1.6.11 prázdná skica spotřebovává až 444 bajtů blesku. Použití jednoho pinMode a digitalWrite(13, ! digitalRead(13)); + delay(500); znamená 964 bajtů. Samozřejmě se jedná o jednorázové. Pokud použijete šest dalších kolíků a přepnete je, použije mnohem méně programové paměti než při použití prvního (1192B). Ale stále roste opravdu rychle.

V čistém C je prázdný program dlouhý přibližně 134 Bajtů. Stejná funkčnost (přepínání jednoho pinu každých 500 ms) trvá 158 bajtů (a je to mnohem rychlejší).

Ale pro hobby projekt bych místo toho použil ATMega2560 nebo ATMega644 / 1284.

A můžete také použít přímý přístup k hardwaru. Přepnout náčrt pinů pomocí přímého použití registrů a _delay_ms z knihoven avr používá 468 bajtů místo 964B. Se zpožděním z jádrových knihoven Arduino je to 602B.

Komentáře

  • Myslíte _delay_ms().
  • To má tu další výhodu, že se vlastně dozvíte o MCU, které ‚ znovu používám. AVR na těchto Arduinech jsou mnohem schopnější, než by vám věřila “ standardní knihovna „.++

Odpověď

A co malinová pi nula ? Mám pár a používám je docela často jako arduinos.

Komentáře

  • Měli byste skutečně uvažovat o jiných architekturách, ale vestavěný linuxový systém s povinným zavedením SD karty jako pi dodává hodně složitosti a je křehká jedinečnými způsoby, i když není dražší. Existuje spousta desek založených na menších, vysoce integrovaných ARM MCU, které jsou z hlediska aplikací mnohem podobnější Arduinu, ale jsou drasticky schopnější. Pokud ale potřebujete hodně zpracování nebo megabajty paměti, pak ano, tyto složitosti začínají být užitečné.
  • Také dávám přednost nule, protože je tak flexibilní. Můžete přidat další úložiště nebo jej vložit do projektů a zároveň mít dostatečně velký procesor, který zvládne prakticky cokoli.

Odpovědět

Mohli byste se také podívat na jiné platformy. Například Teensy 3.2 je kompatibilní s Arduino a má 2 kB eeprom a 64 kB RAM.

Odpověď

Wen žádá širokou Je užitečné zahrnout některé podrobnosti. Líbí se mi, kolik paměti a proč si myslíte, že ji potřebujete.

Jednou jsem určil procesor na 2 kB programového prostoru, 64 bajtů RAM a 1 KIPS. Inženýr se zeptal, MIPS, vysvětlil jsem tisíce za sekundu. Odpověděl, nepřijdou tak pomalu. Na konci projektu bylo přidáno obrovské uživatelské rozhraní a paměť se zúžila … ale stále se vejde bez problémů.

Takže zvažte větší promyšlenost o použitých zdrojích.

Odpověď na otázku:

1) Arduino neposkytuje pohodlnou sběrnici pro načítání paměti. Neexistuje tedy žádný způsob, jak připojit čip, abyste získali více paměti.

2) Arduino má SPI, takže lze přistupovat k SD kartě. Jakýkoli kód na SD kartě by musel být načten do spustitelné paměti. To je komplikované a ne pro začátečníky …

3) Jak bylo navrženo, zpřísněte kód. Toto je pravděpodobně dobrý způsob, jak se učit.

3) Přesuňte se na větší Arduino.

Existují různé procesory Arduino. Některé v řadě ACR, jiné v řadě ARM. Přechod na jiné zařízení ve stejné rodině je relativně skromná změna a může poskytnout až 368 bajtů progam FLASH. Nejedná se však o desky Arduino přesně.

Zařízení založená na ARM Arduino se velmi liší a používejte různé knihovny.

Podívejte se na Arduino Mega 2560, který je velmi podobný Uno, má podobnou stopu, kód by se měl portovat relativně snadno a je levný.

Existují větší zařízení v rodině AVR.

Všimněte si, že AVR32 je jiný procesor a periferní zařízení jsou natolik odlišné, že se jedná o jiné zařízení.

Pokud se chcete dostat do velmi velkých programů ( gigabajty paměti), podívejte se na Beagleboard. Má plný linux s virtuální pamětí (viz # 2 výše) a má výkonnější I / O mechanismy.

Komentáře

  • Možná některé opraví překlepy, například Wen, 3 a různé
  • Chci říct, že pokud ty překlepy opravíte, někdo může vaši odpověď odhlasovat …

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *