Hogyan lehet kibővíteni a program memóriáját egy arduinón?

Néha elfogy a programméret a beágyazott C program számára, amelyet egy arduinóra szeretnék tenni. Tehát milyen chipre van szükségem az arduino programmemóriájának bővítéséhez, hogy nagyobb C programokat használhassak az arduinómmal?

Megjegyzések

  • hogy egy Petri H nevű társ ä kkinen put árkád stílusú játék egy Atmega328P készüléken, talán érdemes megnéznie a kód megtakarítását? Ha ez ‘ nem praktikus, ahogy a válaszok némelyike mondja, akkor nagyobb chipet kaphat, több programmemóriával. Az Atmega644 például DIP-chip csomagban van, többek között.
  • Lásd még: forum.arduino.cc/index.php?topic= 226465.0
  • tudná magyarázni egy kicsit jobban a válaszát? 2) Az Arduino rendelkezik SPI-vel, így SD-kártya érhető el. Az SD-kártyán lévő bármely kódot be kell tölteni a futtatható memóriába. Ez bonyolult, és nem kezdőknek szól … Úgy érted, hogy az utasítás memóriáját megváltoztathatja vagy újra programozhatja a program futása közben? Meghívhatja a futó program az indítót, és új utasításokat tölthet be egy másik címre? Vajon ´ nem ebben a korban a program memóriája? Más megoldás lehet a rutinok azonosítása a programban, és az összes ” hívás ´ s ” tárolja az adatokat egy spi külső memóriáján … Köszönöm!

Válasz

Az ATmega2560 az chipet, hogy további memóriát adjon hozzá, ha az Uno-n elfogy a program memóriája. Az arduino.cc címen található memória weboldalra hivatkozva látni fogja, hogy Flash = 256 KB, SRAM = 8 KB, EEPROM = 4 KB, ahol az ATmega328 chip be van kapcsolva. az Uno Flash = 32KB, SRAM = 2KB, EEPROM = 1KB.

Ha az Uno-n kifogy a program memóriája, körülbelül három praktikus választási lehetőség áll rendelkezésére: kisebbítse a programot, távolítsa el a rendszerbetöltőt (egy vagy két KB felszabadításához); használjon egy másik kártyát egy jobban képes processzorral. Az Uno kártya CPU-jának nincs módja elérni a program bájtjait a chipen lévő 32 KB-os vakutól eltérő helyeken. A Mega2560 kártya CPU-ja nyolcszor annyi vakuval indul, így nagyobb programokat képes befogadni, mint egy Uno.

Ha eltávolítja a rendszerbetöltőt, akkor inkább USBASP kártya segítségével programozhat, amint azt leírtuk. egy „AVR chip programozása USBASP segítségével 10 tűs kábellel” cikkben a learningaboutelectronics.com címen.

Megjegyzések

  • de ha felszabadítja a rendszerbetöltőt, akkor hogyan használnám az arduino IDE programozására?
  • @ qwerty10, lásd a szerkesztés utolsó bekezdését. Az Arduino IDE támogatja az USBASP ok rendszert.
  • Nem működik olyan programozóval, amely feltölthet kódot az ATMEGA-ba? Csak USBASP helyett. Ahogy megértem, valójában nem 10 érintkezőt használ, hanem ezeknek a részeknek a részét.
  • @ qwerty10, az USPASP egy ISP (a rendszer programozásában) programozó. Általában bármely ISP programozó felhasználható chipek programozására (indítótöltővel vagy anélkül), amennyiben MOSI, MISO, SCK, RST, VCC és GND csapok állnak rendelkezésre a cél chipen.
  • A jelenlegi Unos a nagyon kompakt optiboot bootloadert használja. Eltávolításával csak 512 bájt szabadul fel.

Válasz

Egy másik mód (a több memóriával rendelkező MCU kivételével): nem használja az Arduino keretrendszert és annak könyvtárait. Az ilyen absztrakciós szint mindkét szempontból drága – a memóriahasználat és a sebesség. De ez sokkal nehezebb módszer. Ha szüksége van valamilyen könyvtárra, akkor azt portolnia kell (ha még nem található natív könyvtár), vagy legalább meg kell adnia az Arduino szükséges funkcióit.

Például az Arduino IDE-ben Az 1.6.11 üres vázlat 444 bájt flash-t használ fel. Egy pinMode és digitalWrite(13, ! digitalRead(13)); + delay(500); használata 964 bájtot jelent. Természetesen ezek nagy valószínűséggel egyszeri. Ha további hat csapot használ és átkapcsol, sokkal kevesebb programmemóriát használ, mint az első (1192B). De még mindig nagyon gyorsan növekszik.

A tiszta C-ben az üres program körülbelül 134 bájt hosszú. Ugyanaz a funkció (egy gombnyomás átkapcsolása 500 ms-onként) 158 bájtot igényel (és ez gyorsabban megy).

De hobbi projektnél inkább az ATMega2560 vagy az ATMega644 / 1284-et választanám.

És használhatja a hardverhez való közvetlen hozzáférést is. A pin-vázlatot a regiszterek közvetlen használatával kapcsolhatja be, és az avr könyvtárak _delay_ms értéke 464 bájtot használ 964B helyett. Az Arduino magkönyvtárakból késéssel 602B-ot használ.

Megjegyzések

  • Úgy érted, hogy _delay_ms().
  • Ennek az az előnye, hogy ténylegesen megismered az mcu-t, amelyet ‘ újra használja. Az AVR-k ezeken az Arduinókon sokkal jobban képesek, mint azt a ” standard könyvtár ” hihetnéd.++

Válasz

Mi a helyzet egy málna pi-vel nulla ? Van egy pár, és elég gyakran használom őket arduinóként.

Megjegyzések

  • Más architektúrákat valóban figyelembe kell venni, de egy beágyazott Linux rendszert kötelező SD-kártya indítással , mint a pi sok bonyolultságot ad és egyedi módon törékeny, még ha nem is drágább. Sok olyan tábla létezik, amelyek kisebb, jobban integrált ARM MCU-kra épülnek, és amelyek alkalmazásuk szempontjából sokkal jobban hasonlítanak egy Arduinóra, ugyanakkor drasztikusan jobban képesek. De ha sok feldolgozásra vagy megabájt memóriára van szükséged, akkor igen, ezek a bonyolultságok kezdik megtérülni.
  • Én is jobban szeretem a nullát, mert annyira rugalmas. Hozzáadhat további tárhelyet vagy beágyazhatja a projektekbe, miközben elég nagy processzorral rendelkezik ahhoz, hogy nagyjából bármit megtehessen.

Válasz

Megtekinthet más platformokat is. Például egy Teensy 3.2 kompatibilis Arduino, 2KB eeprommal és 64KB RAM-mal rendelkezik.

Válasz

Wen széles kérdést tesz fel kérdés, hasznos néhány részletet megadni. Például mennyi memória, és miért gondolja, hogy szüksége van rá.

Egyszer 2 KB programterületen 64 bájt RAM-ot és 1 KIPS-t írtam meg. A mérnök megkérdezte, MIPS, másodpercenként ezreket magyaráztam. Azt válaszolta, hogy nem jönnek ilyen lassan. A projekt végén egy hatalmas felhasználói felület került hozzá, és a memória szűkös lett … de még mindig gond nélkül fitt.

Tehát fontolja meg, hogy átgondoltabb legyen a felhasznált erőforrásokról.

A kérdés megválaszolásához:

1) Az Arduino nem biztosít kényelmes buszt a memória átvételéhez. Tehát nincs mód csatlakoztatni egy chip, hogy több memóriát kapjon.

2) Az Arduino rendelkezik SPI-vel, így SD-kártya érhető el. Az SD-kártyán lévő bármely kódot be kell tölteni a futtatható memóriába. Ez bonyolult és nem kezdőknek szól …

3) A javaslat szerint szigorítsa a kódot. Ez valószínűleg jó módszer a tanulásra.

3) Lépjen egy nagyobb Arduino-ra.

Különböző Arduino processzorok vannak. Néhányan az ACR, mások az ARM sorban találhatók. Ugyanabban a családban egy másik eszközre lépni viszonylag szerény változás, és akár 368 bájt program FLASH-ot is biztosíthat. De ezek nem Arduino táblák pontosan.

Az Arduino ARM alapú eszközök nagyon különböznek és használjon különböző könyvtárakat.

Nézze meg az Arduino Mega 2560-at, nagyon hasonlít az Uno-hoz, hasonló a lábnyoma, a kódnak viszonylag könnyen kell portolnia és olcsó.

Vannak nagyobb eszközök az AVR családban.

Ne feledje, hogy az AVR32 egy másik processzor, és a perifériák eléggé különböznek attól, hogy más eszközről van szó.

Ha nagyon nagy programokba szeretne belépni ( gigabájt memória) nézze meg a Beagleboard-ot. Teljes Linux-ja van, virtuális memóriával (lásd a fenti 2. pontot), és erősebb I / O-mechanizmusokkal rendelkezik.

Megjegyzések

  • Talán kijavíthatunk néhányat elírási hibák, például Wen, 3 és differnt
  • Úgy értem, ha kijavítja ezeket az elírási hibákat, valaki megszavazhatja válaszát …

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük