Hur utökar jag programminnet på en arduino?

Ibland tar jag slut på programstorlek för det inbäddade C-programmet som jag vill lägga på en arduino. Så vilket chip behöver jag för att utvidga arduino-programminnet så att jag kan använda större C-program med min arduino?

Kommentarer

  • Med tanke på att en kille vid namn Petri H ä kkinen sätter ett arkadspel på en Atmega328P, kanske du bör titta på att spara plats i din kod? Om det inte är ’ t, som några av svaren säger, kan du få ett större chip med mer programminne. Atmega644 kommer till exempel bland annat i ett DIP-chip-paket.
  • Se även forum.arduino.cc/index.php?topic= 226465.0
  • kan du snälla förklara lite mer ditt svar? 2) Arduino har SPI, så att ett SD-kort kan nås. Varje kod på SD-kortet måste laddas in i körbart minne. Detta är komplicerat och inte för nybörjare … Du menar att du kan ändra eller omprogrammera instruktionsminnet medan programmet körs? Kan det pågående programmet ringa startladdaren och ladda nya instruktioner på olika adresser? Vann ´ inte den här åldern programminnet? En annan lösning kan vara att identifiera rutiner i ditt program och alla ” samtal ´ s ” lagras med data i ett externt spi-minne … Tack!

Svar

En ATmega2560 är chip för att lägga till för mer minne när du tar slut på programminnet på en Uno. Med hänvisning till Memory -sidan på arduino.cc ser du att den har Flash = 256KB, SRAM = 8KB, EEPROM = 4KB, där ATmega328-chipet på Uno har Flash = 32KB, SRAM = 2KB, EEPROM = 1KB.

När du tar slut på programminnet på en Uno har du ungefär tre val som är praktiska: gör programmet mindre; ta bort bootloader (för att frigöra en eller två kB), använd ett annat kort med en mer kapabel processor. CPU: n på ett Uno-kort har inte ett sätt att komma åt programbyte från andra platser än 32-kB-flash på chipet. Processorn på ett Mega2560-kort börjar med 8 gånger så mycket blixt, så det kan rymma större program än en Uno-burk.

Om du tar bort startladdaren kan du istället programmera med ett USBASP-kort, som beskrivs i ett ”Programmera AVR-chip med en USBASP med 10-stifts kabel” på learningaboutelectronics.com.

Kommentarer

  • men om du frigör bootloader, hur skulle jag använda arduino IDE för att programmera?
  • @ qwerty10, se sista stycket för redigering. Arduino IDE stöder USBASP ok.
  • Skulle det inte fungera med någon programmerare som kan ladda upp kod till ATMEGA? Istället för bara en USBASP. Som jag förstår använder den inte tio stift utan en delmängd av dessa stift.
  • @ qwerty10, USPASP är en ISP-programmerare (i systemprogrammering). I allmänhet kan alla ISP-programmerare användas för att programmera ett chip (med eller utan en bootloader på det) så länge som MOSI-, MISO-, SCK-, RST-, VCC- och GND-stift finns på målchipet.
  • Nuvarande Unos använder den mycket kompakta startladdaren för optiboot. Om du tar bort det frigörs bara 512 byte.

Svar

Ett annat sätt (annat än MCU med mer minne) är använder inte Arduino framework och dess bibliotek. En sådan abstraktionsnivå är dyr på båda sätten – minnesanvändning och hastighet. Men det är mycket svårare. Om du behöver något bibliotek måste du portera det (om du inte har hittat ett inbyggt) eller åtminstone tillhandahålla nödvändiga funktioner från Arduino.

Till exempel i Arduino IDE 1.6.11 tom skiss använder upp 444 bitar blixt. Att använda en pinMode och digitalWrite(13, ! digitalRead(13)); + delay(500); betyder 964 byte. Naturligtvis är dessa troligtvis engångsarbetare. Om du använder sex fler stift och växlar, använder den mycket mindre programminne än att använda den första (1192B). Men det växer fortfarande riktigt snabbt.

I ren C är tomt program cirka 134 byte långt. Samma funktionalitet (växla en stift var 500: e) tar 158 byte (och det går snabbare).

Men för hobbyprojekt skulle jag istället gå för ATMega2560 eller ATMega644 / 1284.

Och du kan också använda direkt tillgång till hårdvara. Växla pin-skiss med att använda register direkt och _delay_ms från avr-bibliotek använder 468 byte istället för 964B. Med fördröjning från Arduino-kärnbibliotek är det 602B.

Kommentarer

  • Du menar _delay_ms().
  • Detta har den extra fördelen att du faktiskt lär dig om mcu som du ’ använder. AVR-enheterna på dessa Arduinos är mycket mer kapabla än ” standardbiblioteket ” skulle du tro.++

Svar

Vad sägs om ett hallon pi noll ? Jag har ett par och använder dem ganska ofta som arduinos.

Kommentarer

  • Andra arkitekturer bör verkligen övervägas, men ett inbäddat Linux-system med obligatorisk start av SD-kort som pi lägger till mycket komplexitet och är ömtålig på unika sätt, även om det inte är dyrare. Det finns många styrelser baserade på mindre, mer mycket integrerade ARM MCU: er som är mycket mer lik en Arduino när det gäller applikationer, samtidigt som de är drastiskt mer kapabla. Men om du behöver mycket bearbetning eller megabyte minne, ja, dessa komplexiteter börjar vara värda.
  • Jag föredrar också nollan eftersom den är så flexibel. Du kan lägga till mer lagringsutrymme eller bädda in det i projekt samtidigt som du har en tillräckligt stor processor för att göra i stort sett vad som helst.

Svar

Du kan också titta på andra plattformar. Till exempel är en Teensy 3.2 Arduino-kompatibel och har en 2KB eeprom och 64KB RAM.

Svar

Vi frågar en bred fråga, det är bra att ta med några detaljer. Gilla hur mycket minne och varför du tror att du behöver det.

Jag angav en gång en processor på 2 kB programutrymme, 64 byte RAM och 1 KIPS. Ingenjören frågade, MIPS, jag förklarade tusentals per sekund. Han svarade, de kommer inte så långsamt. I slutet av projektet lades ett enormt användargränssnitt till och minnet blev tätt … men passar fortfarande utan problem.

Så överväg att vara mer tankeväckande om de resurser som används.

För att svara på frågan:

1) Arduino tillhandahåller inte en bekväm buss att hämta minne över. Så det finns inget sätt att ansluta en chip för att få mer minne.

2) Arduino har SPI, så att ett SD-kort kan nås. Vilken kod som helst på SD-kortet måste laddas in i körbart minne. Detta är komplicerat och inte för nybörjare …

3) Som föreslagit, stram upp koden. Detta är förmodligen ett bra sätt att lära sig.

3) Flytta till en större Arduino.

Det finns olika Arduino-processorer. Några i ACR-linjen, andra i ARM-linjen. Att gå till en annan enhet i samma familj är en relativt blygsam förändring och kan ge upp till 368 byte progam FLASH. Men det här är inte Arduino-kort exakt.

De Arduino ARM-baserade enheterna är väldigt olika och använd olika bibliotek.

Kolla in Arduino Mega 2560, den liknar mycket Uno, har liknande fotavtryck, koden bör porta relativt enkelt och är billig.

Det finns större enheter i AVR-familjen.

Obs! AVR32 är en annan processor och kringutrustningen är tillräckligt olika för att det är en annan enhet.

Om du vill komma in i mycket stora program ( gigabyte minne) kolla in Beagleboard. Den har en full Linux, med virtuellt minne (se # 2 ovan) och har kraftfullare I / O-mekanismer.

Kommentarer

  • Kanske fixar några skrivfel, som Wen, 3 och olika
  • Jag menar, om du fixar dessa skrivfel kanske någon röstar upp ditt svar …

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *