Cum se extinde memoria programului pe un arduino?

Uneori rămân fără spațiu de dimensiunea programului pentru programul C încorporat pe care vreau să-l pun pe un arduino. Deci, de ce cip am nevoie pentru a extinde memoria programului arduino, astfel încât să pot folosi programe C mai mari cu arduino-ul meu?

Comentarii

  • Luând în considerare că un tip pe nume Petri H ä kkinen a pus un joc în stil arcade pe un Atmega328P, poate ar trebui să te uiți la economisirea spațiului în codul tău? Dacă acest lucru nu este ‘ t practic, așa cum spun unele dintre răspunsuri, puteți obține un cip mai mare cu mai multă memorie de program. Atmega644, de exemplu, vine într-un pachet DIP-chip, printre altele.
  • Consultați și forum.arduino.cc/index.php?topic= 226465.0
  • vă puteți explica mai mult răspunsul dvs.? 2) Arduino are SPI, deci un card SD poate fi accesat. Orice cod de pe cardul SD ar trebui încărcat în memoria executabilă. Acest lucru este complicat și nu pentru începători … Vrei să spui că poți schimba sau reprograma memoria de instrucțiuni în timp ce programul rulează? Poate programul care rulează să apeleze bootloaderul și să încarce instrucțiuni noi pe alte adrese? Nu a câștigat ´ această vârstă în memoria programului? O altă soluție poate fi identificarea rutinelor din programul dvs. și a tuturor apelurilor ” ´ s ” stocate cu datele pe o memorie externă spi … Mulțumesc!

Răspuns

Un ATmega2560 este cip pentru a adăuga mai multă memorie când rămâneți fără memorie de program pe un Uno. Referindu-vă la pagina web Memorie de la arduino.cc, veți vedea că are Flash = 256KB, SRAM = 8KB, EEPROM = 4KB, unde cipul ATmega328 de pe Uno are Flash = 32KB, SRAM = 2KB, EEPROM = 1KB.

Când rămâneți fără memorie de program pe un Uno, aveți aproximativ trei opțiuni practice: micșorați programul; scoateți bootloader-ul (pentru a elibera unul sau doi KB); utilizați o placă diferită cu un procesor mai capabil. CPU-ul de pe o placă Uno nu are o modalitate de a accesa octeți de program din alte locuri decât blițul de 32 KB pe cip. Procesorul de pe o placă Mega2560 începe cu 8 ori mai mult bliț, deci poate conține programe mai mari decât o poate face Uno.

Dacă eliminați bootloader-ul, puteți programa în schimb folosind o placă USBASP, așa cum este descris într-un articol „Programați un cip AVR utilizând un USBASP cu cablu cu 10 pini” la learningaboutelectronics.com.

Comentarii

  • dar dacă eliberați bootloader-ul, cum aș folosi arduino IDE pentru a programa?
  • @ qwerty10, consultați ultimul paragraf de editare. Arduino IDE acceptă USBASP ok.
  • Nu ar funcționa cu vreun programator care poate încărca codul în ATMEGA? În loc doar de un USBASP. După cum am înțeles, nu se folosește de fapt 10 pini, ci un subset al acelor pini.
  • @ qwerty10, USPASP este un programator ISP (în programarea sistemului). În general, orice programator ISP poate fi folosit pentru a programa un cip (cu sau fără bootloader pe el) atâta timp cât pinii MOSI, MISO, SCK, RST, VCC și GND sunt disponibili pe cipul țintă.
  • Unos-urile actuale utilizează încărcătorul de boot optiboot foarte compact. Eliminarea acestuia va elibera doar 512 octeți.

Răspuns

Un alt mod (altul decât MCU cu mai multă memorie) este nu folosesc cadrul Arduino și bibliotecile sale. Un astfel de nivel de abstractizare este scump în ambele moduri – utilizarea memoriei și viteza. Dar acest lucru este „mult mai dificil. Dacă aveți nevoie de o bibliotecă, trebuie să o portați (dacă nu ați găsit una nativă) sau cel puțin să furnizați funcțiile necesare de la Arduino.

De exemplu, în Arduino IDE 1.6.11 schița goală folosește 444 de octeți de bliț. Utilizarea unui pinMode și digitalWrite(13, ! digitalRead(13)); + delay(500); înseamnă 964 de octeți. Desigur, acestea sunt cel mai probabil o singură dată. Dacă utilizați încă șase pini și îl comutați, acesta folosește mult mai puțină memorie de program decât utilizarea primului (1192B). Dar tot crește foarte repede.

În C pur, programul gol are o lungime de aproximativ 134 de octeți. Aceeași funcționalitate (comutarea unui pin la fiecare 500 ms) necesită 158 de octeți (și este mult mai rapid).

Dar pentru proiectul hobby aș merge în schimb la ATMega2560 sau ATMega644 / 1284.

Și puteți utiliza și accesul direct la hardware. Comutați schița pinului cu utilizarea directă a registrelor și _delay_ms din bibliotecile avr utilizează 468 octeți în loc de 964B. Cu întârziere din bibliotecile de bază Arduino este „602B.

Comentarii

  • Adică _delay_ms().
  • Acest lucru are avantajul suplimentar de a învăța de fapt despre mcu că ‘ se folosește. AVR-urile de pe aceste Arduino sunt mult mai capabile decât v-ar putea crede ” biblioteca standard „++

Răspuns

Dar un raspberry pi zero ? Am un cuplu și le folosesc destul de des ca arduino.

Comentarii

  • Într-adevăr ar trebui luate în considerare alte arhitecturi, dar un sistem Linux încorporat cu încărcare obligatorie a cardului SD precum pi adaugă multă complexitate și este fragilă în moduri unice, chiar dacă nu mai scumpe. Există o mulțime de plăci bazate pe MCU-uri ARM mai mici, mult mai integrate, care sunt mult mai asemănătoare cu un Arduino în ceea ce privește aplicațiile, fiind în același timp mult mai capabile. Dar dacă aveți nevoie de multă procesare sau de megaocteți de memorie, atunci da, aceste complexități încep să merite.
  • De asemenea, prefer zero, deoarece este atât de flexibil. Puteți adăuga mai mult spațiu de stocare sau îl puteți încorpora în proiecte, având în același timp un procesor suficient de mare pentru a face aproape orice.

Răspuns

Ați putea căuta și în alte platforme. De exemplu, un Teensy 3.2 este compatibil Arduino și are o memorie RAM de 2 KB și 64 KB de memorie RAM.

Răspuns

Wen întreabă întrebare, este util să includeți câteva detalii. Îmi place câtă memorie și de ce crezi că ai nevoie de ea.

Odată am specificat un procesor la 2 KB spațiu de program, 64 de octeți RAM și 1 KIPS. Inginerul a întrebat, MIPS, am explicat mii pe secundă. El a răspuns, nu vin atât de încet. La sfârșitul proiectului, a fost adăugată o UI imensă, iar memoria s-a strâns … dar încă nu se potrivește fără nicio problemă.

Deci, ia în considerare a fi mai atent despre resursele utilizate.

Pentru a răspunde la întrebare:

1) Arduino nu oferă un autobuz convenabil pentru a prelua memoria. Deci, nu există nici o modalitate de a conecta un chip pentru a obține mai multă memorie.

2) Arduino are SPI, deci un card SD poate fi accesat. Orice cod de pe cardul SD ar trebui încărcat în memoria executabilă. Acest lucru este complicat și nu pentru începători …

3) Așa cum a fost sugerat, strângeți codul. Acesta este probabil un mod bun de a învăța.

3) Treceți la un Arduino mai mare.

Există diferite procesoare Arduino. Unele în linia ACR, altele în linia ARM. Accesarea unui dispozitiv diferit din aceeași familie este o schimbare relativ modestă și poate oferi până la 368 de octeți de progam FLASH. Dar acestea nu sunt plăci Arduino exact.

Dispozitivele bazate pe Arduino ARM sunt foarte diferite și folosiți diferite biblioteci.

Verificați Arduino Mega 2560, este foarte asemănător cu Uno, are o amprentă similară, codul trebuie portat relativ ușor și este ieftin.

Există dispozitive mai mari în familia AVR.

Rețineți, AVR32 este un procesor diferit, iar perifericele sunt suficient de diferite încât să fie un dispozitiv diferit.

Dacă doriți să intrați în programe foarte mari ( gigaocteți de memorie) verificați Beagleboard. Are un Linux complet, cu memorie virtuală (a se vedea # 2 de mai sus) și are mecanisme de I / O mai puternice.

Comentarii

  • Poate remediază unele greșeli de scriere, cum ar fi Wen, 3 și diferite
  • Adică, dacă remediați greșelile respective, cineva ar putea vota răspunsul dvs. …

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *