Hvordan utvide programminnet på en arduino?

Noen ganger får jeg tom for plass på programstørrelsen for det innebygde C-programmet som jeg vil legge på en arduino. Så hvilken brikke trenger jeg for å utvide programminnet til arduinoen slik at jeg kan bruke større C-programmer med min arduino?

Kommentarer

  • Vurderer at en kar ved navn Petri H ä kkinen satte et arkadestil på en Atmega328P, kanskje du bør se på å spare plass i koden din? Hvis det ikke er ‘ t praktisk, som noen av svarene sier, kan du få en større chip med mer programminne. Atmega644, for eksempel, kommer blant annet i en DIP-chip-pakke.
  • Se også forum.arduino.cc/index.php?topic= 226465.0
  • kan du forklare litt mer svaret ditt? 2) Arduino har SPI, slik at du kan få tilgang til et SD-kort. Enhver kode på SD-kortet må lastes inn i kjørbart minne. Dette er komplisert og ikke for nybegynnere … Du mener at du kan endre eller omprogrammere instruksjonsminnet mens programmet kjører? Kan det løpende programmet ringe opp bootloaderen og laste nye instruksjoner på en annen adresse? Vant du ´ i denne alderen programminnet? En annen løsning kan være å identifisere rutiner i programmet ditt og alle » samtale ´ s » lagret med dataene på et eksternt minne … Takk!

Svar

En ATmega2560 er chip for å legge til mer minne når du går tom for programminne på en Uno. Med henvisning til Minne -siden på arduino.cc, ser du at den har Flash = 256KB, SRAM = 8KB, EEPROM = 4KB, der ATmega328-brikken på Uno har Flash = 32KB, SRAM = 2KB, EEPROM = 1KB.

Når du går tom for programminne på en Uno, har du omtrent tre valg som er praktiske: gjør programmet mindre; fjern bootloader (for å frigjøre en eller to KB), bruk et annet kort med en mer dyktig prosessor. CPUen på et Uno-kort har ikke en måte å få tilgang til programbyte fra andre steder enn 32-kB flash på chip. CPUen på et Mega2560-kort starter med åtte ganger så mye blits, slik at det kan inneholde større programmer enn en Uno-boks.

Hvis du fjerner bootloaderen, kan du i stedet programmere ved hjelp av et USBASP-kort, som beskrevet i en “Programmer AVR-brikke ved hjelp av en USBASP med 10-pins kabel” artikkel på learningaboutelectronics.com.

Kommentarer

  • men hvis du frigjør bootloader, hvordan kan jeg bruke arduino IDE til å programmere?
  • @ qwerty10, se siste avsnitt for redigering. Arduino IDE støtter USBASP ok.
  • Vil det ikke fungere med noen programmerer som kan laste opp kode til ATMEGA? I stedet for bare en USBASP. Som jeg forstår det bruker det faktisk ikke 10 pinner, men en delmengde av disse pinnene.
  • @ qwerty10, USPASP er en ISP (i systemprogrammering) programmerer. Generelt kan enhver ISP-programmerer brukes til å programmere en brikke (med eller uten en bootloader på den) så lenge MOSI-, MISO-, SCK-, RST-, VCC- og GND-pinnene er tilgjengelige på målbrikken.
  • Nåværende Unos bruker den veldig kompakte oppstartslasteren. Hvis du fjerner den, frigjøres bare 512 byte.

Svar

En annen måte (annet enn MCU med mer minne) er bruker ikke Arduino framework og dets biblioteker. Et slikt abstraksjonsnivå er dyrt på begge måter – minnebruk og hastighet. Men det er mye vanskeligere. Hvis du trenger noe bibliotek, må du portere det (hvis du ikke har funnet et eget) eller i det minste gi nødvendige funksjoner fra Arduino.

For eksempel i Arduino IDE 1.6.11 tom skisse bruker opp 444 bytte flash. Å bruke en pinMode og digitalWrite(13, ! digitalRead(13)); + delay(500); betyr 964 byte. Selvfølgelig er dette mest sannsynlig engangsbrukere. Hvis du bruker seks flere pinner og slår den på, bruker den mye mindre programminne enn å bruke den første (1192B). Men den vokser fortsatt veldig fort.

I ren C er tomt program ca 134 byte langt. Samme funksjonalitet (å bytte en pin hver 500 ms) tar 158 byte (og det er raskere).

Men for hobbyprosjekt vil jeg gå for ATMega2560 eller ATMega644 / 1284 i stedet.

Og du kan også bruke direkte tilgang til maskinvare. Bytt pin-skisse ved å bruke registre direkte og _forsink_ms fra avr-biblioteker bruker 468 byte i stedet for 964B. Med forsinkelse fra Arduino-kjernebiblioteker er det 602B.

Kommentarer

  • Du mener _delay_ms().
  • Dette har den ekstra fordelen av å faktisk lære om MCU som du ‘ bruker igjen. AVRene på disse Arduinoene er mye mer i stand enn » standardbiblioteket » vil du ha.++

Svar

Hva med et bringebær-pi null ? Jeg har et par og bruker dem ganske ofte som arduinos.

Kommentarer

  • Andre arkitekturer bør faktisk vurderes, men et innebygd linuxsystem med obligatorisk oppstart av SD-kort som pi gir mye kompleksitet og er skjør på unike måter, selv om det ikke er dyrere. Det er mange tavler basert på mindre, mer integrerte ARM MCUer som er mye mer lik en Arduino når det gjelder applikasjoner, samtidig som de er drastisk mer i stand. Men hvis du trenger mye behandling, eller megabyte minne, så ja, disse kompleksitetene begynner å være verdt.
  • Jeg foretrekker også null fordi det er så fleksibelt. Du kan legge til mer lagringsplass eller legge den inn i prosjekter mens du også har en stor nok prosessor til å gjøre stort sett hva som helst.

Svar

Du kan også se på andre plattformer. For eksempel er en Teensy 3.2 kompatibel med Arduino og har en 2KB eeprom og 64KB RAM.

Svar

Vi spør en bred spørsmål, er det nyttig å ta med noen detaljer. Liker hvor mye minne og hvorfor du tror du trenger det.

Jeg spesifiserte en gang en prosessor på 2 KB programplass, 64 byte RAM og 1 KIPS. Ingeniøren spurte, MIPS, jeg forklarte tusenvis i sekundet. Han svarte, de kommer ikke så sakte. På slutten av prosjektet ble det lagt til et stort brukergrensesnitt og minnet ble stramt … men passer fortsatt uten problemer.

Så vurder å være mer gjennomtenkt om ressursene som brukes.

For å svare på spørsmålet:

1) Arduino gir ikke en praktisk buss å hente minne over. Så det er ingen måte å koble til en chip for å få mer minne.

2) Arduino har SPI, slik at du kan få tilgang til et SD-kort. Enhver kode på SD-kortet må lastes inn i kjørbart minne. Dette er komplisert og ikke for nybegynnere …

3) Som foreslått, stram opp koden. Dette er sannsynligvis en god måte å lære.

3) Gå til en større Arduino.

Det er forskjellige Arduino-prosessorer. Noen i ACR-linjen, andre i ARM-linjen. Å gå til en annen enhet i samme familie er en relativt beskjeden endring og kan gi opptil 368 Bytes progam FLASH. Men dette er ikke Arduino-kort nøyaktig.

De Arduino ARM-baserte enhetene er veldig forskjellige og bruk forskjellige biblioteker.

Sjekk ut Arduino Mega 2560, den ligner veldig på Uno, har et lignende fotavtrykk, koden skal portes relativt enkelt og er billig.

Det er større enheter i AVR-familien.

Merk at AVR32 er en annen prosessor, og periferiutstyr er nok forskjellige til at det er en annen enhet.

Hvis du vil komme inn i veldig store programmer ( gigabyte minne) sjekk ut Beagleboard. Den har full Linux, med virtuelt minne (se nr. 2 ovenfor) og har kraftigere I / O-mekanismer.

Kommentarer

  • Kanskje fikse noen skrivefeil, som Wen, 3 og forskjellige
  • Jeg mener, hvis du fikser disse skrivefeilene, kan det hende noen stemmer på svaret ditt …

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *